正文

用集合和递归方法遍历目录文件 2005-12-25 19:15:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/iamben250/8818.html

分享到:

查找函数:

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函数遍历目录的方法没什么差别。如果有什么地方可以改进的,请不吝指点,先行谢过!!

签名档
没有一个人不是平凡人,也没有一个人注定平庸

阅读(2842) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册