小弟用FindFirstFile,FindNextFile,和FindClose这三个API,写了一个函数
FindFiles(strFolder as String),查找strFolder下的所有文件,当我递归调用FindFiles时出现了堆栈溢出,请问各位大大怎么解决这个问题
还有无更好的办法/算法,检索文件
谢谢以下是基本思路Sub FindFiles(strFolder as String)
..............
.............If this is a dir
strFolder=strFolder+dir
FindFiles(strFolder)
else 
collectionFiles.add File.name or strFolder+File.name
....................
End Sub

解决方案 »

  1.   

    '获取某目录下的所有子目录路径及名称和文件的路径及名称
    Public Sub SeachFile(ByVal strPath As String)
        Dim Fso As Object
        Dim Fol As Object
        Dim Fil As Object
        Set Fso = CreateObject("Scripting.FileSystemObject")
        Set Fol = Fso.GetFolder(strPath)
        
        For Each Fil In Fol.Files
            Debug.Print Fil.Path   '打印路径及文件名
            Debug.Print Fil.Name   '打印文件名
        Next
        For Each Fol In Fol.subfolders
             Debug.Print Fol.Path  '打印子目录的路径及名称
             Debug.Print Fol.Name  '打印子目录的名称
             SeachFile Fol
        Next
    End SubPrivate Sub Command1_Click()
        SeachFile ("C:\Test\")
    End Sub
      

  2.   

    樓上的強!
    如果要得出某文件夾下某類型的所有文件(如TXT文件)該如何做?
      

  3.   

    to: DengXingJie(杰西)还是利用上面的方法,判断一下文件的扩展名,如果是txt,就取出来
    ......
    For Each Fil In Fol.Files
        If CreateObject("Scripting.FileSystemObject").GetExtensionName(Fil.Name)="txt" Then Debug.Print Fil.Path   '打印路径及文件名
    Next
    ......
      

  4.   

    详细的代码应该是进入死循环啦,最好跟一下本人主要使用VB+MS SQL,C#略知一二如有相关问题需要帮助可发短消息告知链接
      

  5.   

    謝謝faysky2()的指點,真是成分感激!!
    也謝謝樓主的貼子
      

  6.   

    For Each Fil In Fol.Files
       这里加判断语句:
          if right(fil.name,3)= "txt" then
            Debug.Print Fil.Path   '打印路径及文件名
            Debug.Print Fil.Name   '打印文件名
          end if
        Next
      

  7.   

    或者:
     
    For Each Fil In Fol.Files
       这里加判断语句:
          if Fil.Type= "文本文档" then
            Debug.Print Fil.Path   '打印路径及文件名
            Debug.Print Fil.Name   '打印文件名
          end if
        Next
      

  8.   

    根据faysky2()的基础上添加code改变如下:)
    Option Explicit
    Public Sub SeachFile(ByVal strPath As String)    Dim Fso As Object
        Dim Fol As Object
        Dim Fil As Object
        Dim strName As String
        Dim i As String
        Set Fso = CreateObject("Scripting.FileSystemObject")
        Set Fol = Fso.GetFolder(strPath)
        
    '    Fso.GetExtensionName ("C:\AUTOEXEC.BAT")    For Each Fil In Fol.Files
            Debug.Print Fil.Path   
            
            Debug.Print Fil.Name  
            Fso.getextensionname (Fil.Name)
    '        Debug.Print Fso.getextensionname(Fil.Name)
            If Fso.getextensionname(Fil.Name) = "txt" Then---------------------此处改动
                strName = Mid(Fil.Name, 1, InStr(1, Fil.Name, ".") - 1)
                Debug.Print strName
            End If-------------------------------------------------------------此处改动
        Next
        For Each Fol In Fol.subfolders
             Debug.Print Fol.Path  
             Debug.Print Fol.Name  
             SeachFile Fol
        Next
    End SubPrivate Sub Command1_Click()
        SeachFile ("C:\Test\")
    End Sub