标题:[求助]如何遍历已知一个路径下的所有文件?
只看楼主
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
 问题点数:0 回复次数:12 
[求助]如何遍历已知一个路径下的所有文件?
请问,如何遍历已知一个路径下的所有文件(这个表述可能不太准确)?

不过,我想达到的是所有文件,我现在已经知道用DIR函数可以实现,但唯一的缺憾就是如果该路径下还有文件夹,就没办法遍历文件夹里面的文件了。

现在,我该怎么做才能遍历到已知路径下的所有文件,包括该路径包含的文件夹里的所有文件!?
搜索更多相关主题的帖子: 遍历 路径 文件 DIR 
2007-08-13 20:19
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
得分:0 
那你就用递归再DIR下一个子目录就行了啊。

VB QQ群:47715789
2007-08-13 21:18
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
得分:0 

有点不明白?用递归?

主要是现在根本就不知道该路径下有多少个文件夹!而且MSDN中不是说:不能用递归方式来调用DIR函数?


偶学编程,也许本身就是一个错。。。
2007-08-13 21:31
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
得分:0 
谢谢Joforn,现在有点思路了,可是有一个问题

就是如果用dir返回一个名称,怎么知道它是一个文件夹,还是一个无类型文件?

[此贴子已经被作者于2007-8-13 21:35:47编辑过]


偶学编程,也许本身就是一个错。。。
2007-08-13 21:35
心中有剑
Rank: 2
等 级:新手上路
威 望:5
帖 子:611
专家分:0
注 册:2007-5-18
得分:0 
dim lsFile as string

lsFile = Dir(App.Path & "\132\*.*", vbNormal)
do while lsfile<>""

lsfile=dir
loop

2007-08-13 21:35
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
得分:0 
5楼的代码不行哦,只能列出本路径下的文件,连文件夹都遍历不出来,更别说深一层目录下的文件啦~~~~~~

偶学编程,也许本身就是一个错。。。
2007-08-13 21:38
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
得分:0 
Debug.Print Dir("*.*", vbHidden Or vbSystem Or vbDirectory)要注意跳过“.”目录,如果想要好一点的用AIP函数FindFirstFile和FindNextFile做吧,其实遍历文件网上有很多源码,你可以找找看。

VB QQ群:47715789
2007-08-13 22:24
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
得分:0 
Joforn的Dir("*.*", vbHidden Or vbSystem Or vbDirectory)好像不能达到目的哦

我觉得用递归写应该可以,思路是这样的,如果返回的是文件夹名则递归调用本函数,遍历这个文件夹,如返回的文件名,则用DIR继续。

现在的问题是,返回的到底是文件夹名还是无类型文件名不能区分开。如果用后缀名来判断的话,一般情况下是不会出问题。我是担心万一碰到了没有后缀的文件,不知道该怎么办!

偶学编程,也许本身就是一个错。。。
2007-08-13 23:37
心中有剑
Rank: 2
等 级:新手上路
威 望:5
帖 子:611
专家分:0
注 册:2007-5-18
得分:0 

Option Explicit
Public fso As New FileSystemObject
Dim i As Long
Private Sub Command1_Click()
i = 0
Dim lstime
lstime = Timer
If Text2 <> "" Then
Text1 = ""
findFileNm Text2, Drive1.Drive
If Text1 = "" Then
MsgBox "没有要查找的数据"
Else
MsgBox "查找完毕,总共查到文件" & i & "个" & "用时" & Int((Timer - lstime) * 1000) & "毫秒"
End If
Else
Text2.SetFocus
MsgBox "请输入查找的文件!"
End If
End Sub
Function findFileNm(SeachFileName As String, ByVal DBpathFolder As String)
Dim objFile, objFolder
Set objFolder = fso.GetFolder(DBpathFolder)
For Each objFile In objFolder.Files
If UCase(Dir(objFile.Path, vbNormal)) Like "*" & UCase(SeachFileName) & "*" Then
i = i + 1
Text1 = Text1 & objFile.Path & vbNewLine
End If
Next
For Each objFolder In objFolder.SubFolders
findFileNm SeachFileName, objFolder '递归遍历整颗树
Next
End Function

Private Sub Form_Load()
Text1 = ""
Text2 = ""

End Sub


2007-08-14 07:48
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
得分:0 
好家伙,厉害啊~~~~~~

偶学编程,也许本身就是一个错。。。
2007-08-14 11:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-162433-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.621644 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved