mFindFile.bas
上传用户:davilee3
上传日期:2015-04-22
资源大小:986k
文件大小:7k
源码类别:

浏览器

开发平台:

Visual Basic

  1. Attribute VB_Name = "mFindFile"
  2. Option Explicit
  3. 'Create a form with a command button (command1), a list box (list1)
  4. 'and four text boxes (text1, text2, text3 and text4).
  5. 'Type in the first textbox a startingpath like c:
  6. 'and in the second textbox you put a pattern like *.* or *.txt
  7. Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
  8. Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
  9. Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
  10. Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
  11. Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As Long) As Long
  12. 'Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long
  13. Const MAX_PATH = 260
  14. Const MAXDWORD = &HFFFF
  15. Const INVALID_HANDLE_VALUE = -1
  16. Const FILE_ATTRIBUTE_ARCHIVE = &H20
  17. Const FILE_ATTRIBUTE_DIRECTORY = &H10
  18. Const FILE_ATTRIBUTE_HIDDEN = &H2
  19. Const FILE_ATTRIBUTE_NORMAL = &H80
  20. Const FILE_ATTRIBUTE_READONLY = &H1
  21. Const FILE_ATTRIBUTE_SYSTEM = &H4
  22. Const FILE_ATTRIBUTE_TEMPORARY = &H100
  23. Private Type FILETIME
  24.     dwLowDateTime As Long
  25.     dwHighDateTime As Long
  26. End Type
  27. Private Type WIN32_FIND_DATA
  28.     dwFileAttributes As Long
  29.     ftCreationTime As FILETIME
  30.     ftLastAccessTime As FILETIME
  31.     ftLastWriteTime As FILETIME
  32.     nFileSizeHigh As Long
  33.     nFileSizeLow As Long
  34.     dwReserved0 As Long
  35.     dwReserved1 As Long
  36.     cFileName As String * MAX_PATH
  37.     cAlternate As String * 14
  38. End Type
  39. Private Function StripNulls(OriginalStr As String) As String
  40.     If (InStr(OriginalStr, Chr(0)) > 0) Then
  41.         OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
  42.     End If
  43.     StripNulls = OriginalStr
  44. End Function
  45. '---------------------------------------------------------------------------------------
  46. ' Procedure : FindFilesAPI
  47. ' DateTime  : 2005-4-19 01:19
  48. ' Author    : Lingll
  49. ' Purpose   : 查找文件
  50. '---------------------------------------------------------------------------------------
  51. Public Function FindFilesAPI(path$, SearchStr$, _
  52.         FileCount&, FileNames() As String, ForFile As Boolean, Optional getHidden As Boolean = True)
  53.     'KPD-Team 1999
  54.     'E-Mail: KPDTeam@Allapi.net
  55.     'URL: http://www.allapi.net/
  56.     Dim FileName As String ' Walking filename variable...
  57. '    Dim i As Integer ' For-loop counter...
  58.     Dim hSearch As Long ' Search Handle
  59.     Dim WFD As WIN32_FIND_DATA
  60.     Dim Cont As Integer
  61.     If Right(path, 1) <> "" Then path = path & ""
  62.     FileCount = 0
  63.     ReDim FileNames(0 To FileCount)
  64.     ' Walk through this directory and sum file sizes.
  65.     hSearch = FindFirstFile(path & SearchStr, WFD)
  66.     Cont = True
  67.     If hSearch <> INVALID_HANDLE_VALUE Then
  68.         While Cont
  69.             If ForFile Then
  70.                 If WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY Then
  71.                 Else
  72.                     If getHidden Or ((WFD.dwFileAttributes And FILE_ATTRIBUTE_HIDDEN) = 0) Then
  73.                         FileName = StripNulls(WFD.cFileName)
  74.                         If (FileName <> ".") And (FileName <> "..") Then
  75.                             FindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) + WFD.nFileSizeLow
  76.                             FileCount = FileCount + 1
  77.                             ReDim Preserve FileNames(0 To FileCount)
  78.                             FileNames(FileCount) = FileName
  79.                         End If
  80.                     End If
  81.                 End If
  82.             Else
  83.                 If WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY Then
  84.                     If getHidden Or ((WFD.dwFileAttributes And FILE_ATTRIBUTE_HIDDEN) = 0) Then
  85.                         FileName = StripNulls(WFD.cFileName)
  86.                         If (FileName <> ".") And (FileName <> "..") Then
  87.                             FindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) + WFD.nFileSizeLow
  88.                             FileCount = FileCount + 1
  89.                             ReDim Preserve FileNames(0 To FileCount)
  90.                             FileNames(FileCount) = FileName
  91.                         End If
  92.                     End If
  93.                 End If
  94.             End If
  95.             
  96.             Cont = FindNextFile(hSearch, WFD) ' Get next file
  97.         Wend
  98.         Cont = FindClose(hSearch)
  99.     End If
  100. End Function
  101. '---------------------------------------------------------------------------------------
  102. ' Procedure : FileExist
  103. ' DateTime  : 2005-4-18 22:42
  104. ' Author    : Lingll
  105. ' Purpose   : 判断文件(夹)是否存在
  106. '---------------------------------------------------------------------------------------
  107. Public Function FileExist(FileName As String, Optional ForFile As Boolean = True) As Boolean
  108.     Dim hSearch As Long ' Search Handle
  109.     Dim WFD As WIN32_FIND_DATA
  110.     Dim rtn As Boolean
  111.     hSearch = FindFirstFile(FileName, WFD)
  112.     rtn = False
  113.     If hSearch = INVALID_HANDLE_VALUE Then
  114.         If Not ForFile Then
  115.             rtn = DriveExist(FileName)
  116.         End If
  117.     Else
  118.         If GetFileAttributes(FileName) And FILE_ATTRIBUTE_DIRECTORY Then
  119.             rtn = Not ForFile
  120.         Else
  121.             rtn = ForFile
  122.         End If
  123.         Call FindClose(hSearch)
  124.     End If
  125.     FileExist = rtn
  126. End Function
  127. '---------------------------------------------------------------------------------------
  128. ' Procedure : DriveExist
  129. ' DateTime  : 2005-4-18 22:17
  130. ' Author    : Lingll
  131. ' Purpose   : 判断某个逻辑盘是否存在
  132. '---------------------------------------------------------------------------------------
  133. Public Function DriveExist(ByVal vDriveName As String) As Boolean
  134. Dim tBff() As Byte
  135. Dim tDrv() As String
  136. Dim tLen&
  137. Dim i&, ub&
  138. Select Case Len(vDriveName)
  139.     Case 1
  140.         vDriveName = vDriveName & ":"
  141.     Case 2
  142.         vDriveName = vDriveName & ""
  143.     Case 3
  144.     Case Else
  145.         DriveExist = False
  146.         Exit Function
  147. End Select
  148. ReDim tBff(0 To 256)
  149. tLen = GetLogicalDriveStrings(256, VarPtr(tBff(0)))
  150. ReDim Preserve tBff(0 To tLen - 2)
  151. tDrv = Split(StrConv(tBff, vbUnicode), vbNullChar)
  152. ub = UBound(tDrv)
  153. vDriveName = LCase(vDriveName)
  154. DriveExist = False
  155. For i = 0 To ub
  156.     If LCase$(tDrv(i)) = vDriveName Then
  157.         DriveExist = True
  158.         Exit For
  159.     End If
  160. Next i
  161. End Function