我有个例子,如果需要可以和我联系。
E-mail:[email protected]

解决方案 »

  1.   

    dir是不是只能显示目录名或者文件名?
      

  2.   

    dir好象只能够显示下一级文件夹、文件而已
    不是把下一级、再下一级、再再再下一级的文件统统都列出来
      

  3.   

    嗯,好吧,太长了一点:)Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
    Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
    Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '最大路径长度和文件属性常量的定义
    Private Const MAX_PATH = 260
    Private Const FILE_ATTRIBUTE_ARCHIVE = &H20
    Private Const FILE_ATTRIBUTE_COMPRESSED = &H800
    Private Const FILE_ATTRIBUTE_DIRECTORY = &H10
    Private Const FILE_ATTRIBUTE_HIDDEN = &H2
    Private Const FILE_ATTRIBUTE_NORMAL = &H80
    Private Const FILE_ATTRIBUTE_READONLY = &H1
    Private Const FILE_ATTRIBUTE_SYSTEM = &H4
    Private Const FILE_ATTRIBUTE_TEMPORARY = &H100
    '自定义数据类型FILETIME和WIN32_FIND_DATA的定义
    Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
    End Type
    Private Type WIN32_FIND_DATA
      dwFileAttributes As Long
      ftCreationTime As FILETIME
      ftLastAccessTime As FILETIME
      ftLastWriteTime As FILETIME
      nFileSizeHigh As Long
      nFileSizeLow As Long
      dwReserved0 As Long
      dwReserved1 As Long
      cFileName As String * MAX_PATH
      cAlternate As String * 14
    End Type
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '去掉固定长度字符串右边的NULL字符(ASCII值为0)和SPACE字符(ASCII值为32)函数
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function fDelInvaildChr(str As String) As String
      On Error Resume Next
      For i = Len(str) To 1 Step -1
        If Asc(Mid(str, i, 1)) <> 0 And Asc(Mid(str, i, 1)) <> 32 Then
          fDelInvaildChr = Left(str, i)
          Exit For
        End If
      Next
    End Function
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '遍历主函数
    '参数说明:
    ' strPathName 要遍历的目录
    ' objList 使用VB的内部控件ListBox来存放遍历得到的路径,之所以
    ' 不使用字符串数组是因为数组大小不好定义
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub sDirTraversal(ByVal strPathName As String, ByRef objList As ListBox)
      Dim sSubDir(200) As String '存放当前目录下的子目录,下标可根据需要调整
      Dim iIndex As Integer '子目录数组下标
      Dim i As Integer '用于循环子目录的查找
      Dim lHandle As Long 'FindFirstFileA 的句柄
      Dim tFindData As WIN32_FIND_DATA '
      Dim strFileName As String '文件名
      On Error Resume Next
      '初始化变量
      i = 1
      iIndex = 0
      tFindData.cFileName = "" '初始化定长字符串
      lHandle = FindFirstFile(strPathName & "\*.*", tFindData)
      If lHandle = 0 Then '查询结束或发生错误
    Exit Sub
    End If
    strFileName = fDelInvaildChr(tFindData.cFileName)
    If tFindData.dwFileAttributes = &H10 Then '目录
      If strFileName <> "." And strFileName <> ".." Then
        iIndex = iIndex + 1
        sSubDir(iIndex) = strPathName & "\" & strFileName '添加到目录数组
      End If
    Else
      objList.AddItem strPathName & "\" & strFileName
    End If
    '循环查找下一个文件,直到结束
    Do While True
      tFindData.cFileName = ""
      If FindNextFile(lHandle, tFindData) = 0 Then '查询结束或发生错误
        FindClose (lHandle)
        Exit Do
      Else
        strFileName = fDelInvaildChr(tFindData.cFileName)
        If tFindData.dwFileAttributes = &H10 Then
          If strFileName <> "." And strFileName <> ".." Then
            iIndex = iIndex + 1
            sSubDir(iIndex) = strPathName & "\" & strFileName '添加到目录数组
          End If
        Else
          objList.AddItem strPathName & "\" & strFileName
        End If
      End If
    Loop
      '如果该目录下有目录,则根据目录数组递归遍历
      If iIndex > 0 Then
        For i = 1 To iIndex
          sDirTraversal sSubDir(i), objList
        Next
      End If
    End SubPrivate Sub Command1_Click()
    Call sDirTraversal("d:\downloads", List1)
    End Sub