ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何使用API函数FindFirstFile查找文件?

如何使用API函数FindFirstFile查找文件?

作者:绿色风 分类: 时间:2022-08-17 浏览:111
楼主
amulee
Q:如何使用API函数FindFirstFile查找文件?
A:利用API函数FindFirstFile、FindNextFile可以实现文件的查找。其用法和VBA中的Dir函数有些类似。请参考以下代码:
  1. 'API声明
  2. Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
  3. Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
  4. Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
  5. '最大路径长度和文件属性常量的定义
  6. Public Const MAX_PATH = 260
  7. '这里有文件属性,包括文件夹、隐藏等。对应dwFileAttributes
  8. Public Const FILE_ATTRIBUTE_ARCHIVE = &H20
  9. Public Const FILE_ATTRIBUTE_COMPRESSED = &H800
  10. Public Const FILE_ATTRIBUTE_DIRECTORY = &H10
  11. Public Const FILE_ATTRIBUTE_HIDDEN = &H2
  12. Public Const FILE_ATTRIBUTE_NORMAL = &H80
  13. Public Const FILE_ATTRIBUTE_READONLY = &H1
  14. Public Const FILE_ATTRIBUTE_SYSTEM = &H4
  15. Public Const FILE_ATTRIBUTE_TEMPORARY = &H100
  16. '文件结构
  17. Type FILETIME
  18.     dwLowDateTime As Long
  19.     dwHighDateTime As Long
  20. End Type
  21. Type WIN32_FIND_DATA
  22.     dwFileAttributes As Long
  23.     ftCreationTime As FILETIME
  24.     ftLastAccessTime As FILETIME
  25.     ftLastWriteTime As FILETIME
  26.     nFileSizeHigh As Long
  27.     nFileSizeLow As Long
  28.     dwReserved0 As Long
  29.     dwReserved1 As Long
  30.     cFileName As String * MAX_PATH
  31.     cAlternate As String * 14
  32. End Type
  33. Sub Main()
  34.     Dim FindData As WIN32_FIND_DATA
  35.     Dim FindHandle As Long
  36.     Dim FindNextHandle As Long
  37.     Dim FPath As String
  38.     Dim FName As String
  39.     FPath = "D:\"
  40.     FName = "*.txt"
  41.     '开始API查找,找到的文件属性在FindData里
  42.     FindHandle = FindFirstFile(FPath & FName, FindData)
  43.     '如果找到,则返回不为0。发生错误返回-1
  44.     If FindHandle <> 0 And FindHandle <> -1 Then
  45.         Debug.Print fDelInvaildChr(FindData.cFileName)
  46.         '查找下一个,用法差不多
  47.         Do
  48.             FindNextHandle = FindNextFile(FindHandle, FindData)
  49.             If FindNextHandle <> 0 And FindNextHandle <> -1 Then
  50.                 Debug.Print fDelInvaildChr(FindData.cFileName)
  51.             Else
  52.                 Exit Do
  53.             End If
  54.         Loop
  55.     End If
  56.     '关闭文件搜索
  57.     FindClose FindHandle
  58. End Sub
  59. '去除非法字符
  60. Public Function fDelInvaildChr(str As String) As String
  61.     On Error Resume Next
  62.     Dim i As Long
  63.     For i = Len(str) To 1 Step -1
  64.         If Asc(Mid(str, i, 1)) <> 0 And Asc(Mid(str, i, 1)) <> 32 Then
  65.             fDelInvaildChr = Left(str, i)
  66.             Exit For
  67.         End If
  68.     Next
  69. End Function



API搜索.rar
2楼
wbzxz
amulee老师,您的附件上传错啦,嘿嘿。

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap