回 帖 发 新 帖 刷新版面

主题:在这段代码中,为何不能搜索C盘所有文件夹

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 GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
  Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
  Const MAX_PATH = 260
  Const INVALID_HANDLE_VALUE = -1
  Const FILE_ATTRIBUTE_DIRECTORY = &H10
  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
  Function StripNulls(OriginalStr As String) As String
          If (InStr(OriginalStr, Chr(0)) > 0) Then
                  OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
          End If
          StripNulls = OriginalStr
  End Function
  Function FindFilesAPI(Path As String, SearchStr As String)
          Dim FileName     As String    
          Dim DirName     As String   
          Dim dirNames()     As String   
          Dim nDir     As Integer    
          Dim i     As Integer    
          Dim hSearch     As Long    

          Dim WFD     As WIN32_FIND_DATA
          Dim Cont     As Integer
          If Right(Path, 1) <> "\" Then Path = Path & "\"
          '   Search   for   subdirectories.
       
          ReDim dirNames(nDir) '为变量重新分配空间'
          Cont = True
          hSearch = FindFirstFile(Path & "*", WFD)
          
          If hSearch <> INVALID_HANDLE_VALUE Then '一但不出错'
                  Do While Cont
                  DirName = StripNulls(WFD.cFileName) 
                  If (DirName <> ".") And (DirName <> "..") Then
                                  dirNames(nDir) = DirName
                                  nDir = nDir + 1 '记录文件及文件夹数量'
                                  ReDim Preserve dirNames(nDir) '重新分配内存,并保存'
                         
                  End If
                  Cont = FindNextFile(hSearch, WFD)         'Get   next   subdirectory.
                  
                  DoEvents
                  
                  Loop
                  
                  Cont = FindClose(hSearch) '一但出错,退出查找'
          End If
          '   Walk   through   this   directory   and   sum   file   sizes.
          hSearch = FindFirstFile(Path & SearchStr, WFD)
          Cont = True
          If hSearch <> INVALID_HANDLE_VALUE Then
                  While Cont
                          FileName = StripNulls(WFD.cFileName) '去除当前文件名的空格'
                                  FileCount = FileCount + 1
                                  List1.AddItem Path & FileName
                          
                          Cont = FindNextFile(hSearch, WFD)                                  DoEvents
                  Wend
                  Cont = FindClose(hSearch)
          End If
          '   If   there   are   sub-directories...
          If nDir > 0 Then
                  '   Recursively   walk   into   them...
                  For i = 0 To nDir - 1
                          FindFilesAPI = FindFilesAPI + FindFilesAPI(Path & dirNames(i) & "\", SearchStr)
                          DoEvents
                         
                  Next i
          End If
  End Function

回复列表 (共1个回复)

沙发

学学啊 真好

我来回复

您尚未登录,请登录后再回复。点此登录或注册