查找给定文件夹下的全部文件,递归调用堆栈溢出
小弟用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
问题点数:60、回复次数:9Top
1 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-03 10:00:14 得分 50
'获取某目录下的所有子目录路径及名称和文件的路径及名称
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 Sub
Private Sub Command1_Click()
SeachFile ("C:\Test\")
End SubTop
2 楼DengXingJie(杰西)回复于 2006-03-03 11:17:57 得分 0
樓上的強!
如果要得出某文件夾下某類型的所有文件(如TXT文件)該如何做?Top
3 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-03 11:24:15 得分 0
to: DengXingJie(杰西)
还是利用上面的方法,判断一下文件的扩展名,如果是txt,就取出来
......
For Each Fil In Fol.Files
If CreateObject("Scripting.FileSystemObject").GetExtensionName(Fil.Name)="txt" Then Debug.Print Fil.Path '打印路径及文件名
Next
......
Top
4 楼feiyun0112(http://feiyun0112.cnblogs.com/)回复于 2006-03-03 11:29:12 得分 0
详细的代码
应该是进入死循环啦,最好跟一下
本人主要使用VB+MS SQL,C#略知一二
如有相关问题需要帮助
可发短消息告知链接
Top
5 楼DengXingJie(杰西)回复于 2006-03-03 11:39:48 得分 0
謝謝faysky2()的指點,真是成分感激!!
也謝謝樓主的貼子Top
6 楼ZOU_SEAFARER(颓废程序员^_^)回复于 2006-03-03 11:52:22 得分 5
For Each Fil In Fol.Files
这里加判断语句:
if right(fil.name,3)= "txt" then
Debug.Print Fil.Path '打印路径及文件名
Debug.Print Fil.Name '打印文件名
end if
Next
Top
7 楼ZOU_SEAFARER(颓废程序员^_^)回复于 2006-03-03 11:58:03 得分 0
或者:
For Each Fil In Fol.Files
这里加判断语句:
if Fil.Type= "文本文档" then
Debug.Print Fil.Path '打印路径及文件名
Debug.Print Fil.Name '打印文件名
end if
Next
Top
8 楼AnnaBear(淡淡)回复于 2006-03-03 13:44:40 得分 5
根据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 Sub
Private Sub Command1_Click()
SeachFile ("C:\Test\")
End Sub
Top
9 楼fifaboy00(18哥)回复于 2006-03-03 14:12:36 得分 0
是不是这种搜索都是类似递归的呢?
我感觉这种方法仍然在使用了大量的栈,同样也调用了自己本身啊。Top




