查找函数: Private Function FindFile(ByVal Spath As String, GetFileName() As String, ByVal FindFileName As String) As Long Dim Files(2) As Long '定义一个固定数组,保存匹配的文件(夹)名称,总数 Dim SubDirs() As String '定义一个动态数组,,保存当前查找目录中的所有下级子目录(用来递归查找) Dim fos As New FileSystemObject, fol As Folder Dim subfil, subfol If Trim(Spath)="" Or FindFileName="" Then Exit Function '要查找的路径没带一"\",则添上一"\" If Right(Spath, 1) <> "\" Then Spath = Spath + "\" BeginFind: On Error Goto ExitSub Set fol = fos.GetFolder(Spath) For Each subfil In fol.Files If subfil.Name Like FindFileName Then Files(0) = Files(0) + 1 ReDim Preserve GetFileName(1 To Files(0)) GetFileName(Files(0)) = Spath & subfil.Name 'GetFileName这个数组返回匹配的所有文件(夹)名称,从参数中返回 End If Next For Each subfol In fol.SubFolders If subfol.Name Like FindFileName Then Files(0) = Files(0) + 1 ReDim Preserve GetFileName(1 To Files(0)) GetFileName(Files(0)) = Spath & subfol.Name End If Files(1) = Files(1) + 1 ReDim Preserve SubDirs(1 To Files(1)) SubDirs(Files(1)) = Spath & subfol.Name + "\" Next Files(2) = Files(2) + 1 If Files(1) <> 0 And Files(2) <= Files(1) Then '如果有下级目录,且循环不大于子目录总数,则递归查找 Spath = SubDirs(Files(2)) GoTo BeginFind End If FindFile = Files(0) '数组本身返回找到的总数 Set fos = Nothing ExitSub: End Function 调用: Private Sub Command1_Click() Dim GetName() As String '定义一个空的动态数组,接收返回的匹配文件名 Dim FileCount As Long FileCount = FindFile("c:\a", GetName(), "a") Print "共找到"; FileCount; "个匹配的对象" For i = 1 To FileCount Print GetName(i) '显示出各个名称(包括路径) Next Redim GetName(0) End sub 能用vb自带的函数、方法解决的,不想去用api,感觉查找速度跟使用api函数遍历目录的方法没什么差别。如果有什么地方可以改进的,请不吝指点,先行谢过!! ![]() 没有一个人不是平凡人,也没有一个人注定平庸 |
正文
用集合和递归方法遍历目录文件 2005-12-25 19:15:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/iamben250/8818.html
阅读(2841) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论