用dir递归遍历文件及文件夹时,能否控制层级/深度?

phanphan 2017-04-27 12:08:52
以下是用dir递归遍历文件及文件夹的代码,有没有什么办法能够控制遍历的层级?比如我只想遍历某文件夹下3层以内的子文件夹及文件。根据我的尝试,可能因为递归的特点,好像不好实现。

'这个函数用来查找指定目录下,指定类型文件的路径
Function SearchFiles(Path As String, FileType As String)
Dim Files() As String '文件路径
Dim Folder() As String '文件夹路径
Dim a, b, c As Long
Dim sPath As String


sPath = Dir(Path & FileType) '查找第一个文件


Do While Len(sPath) '循环到没有文件为止
a = a + 1
ReDim Preserve Files(1 To a)
Files(a) = Path & sPath '将文件目录和文件名组合,并存放到数组中
Debug.Print Files(a)
sPath = Dir '查找下一个文件
DoEvents '让出控制权
Loop


sPath = Dir(Path & "\", vbDirectory) '查找第一个文件夹


Do While Len(sPath) '循环到没有文件夹为止
If Left(sPath, 1) <> "." Then '为了防止重复查找
If GetAttr(Path & "\" & sPath) And vbDirectory Then '如果是文件夹则。。。。。。
b = b + 1
ReDim Preserve Folder(1 To b)
Folder(b) = Path & sPath & "\" '将目录和文件夹名称组合形成新的目录,并存放到数组中
End If
End If
sPath = Dir '查找下一个文件夹
DoEvents '让出控制权
Loop


For c = 1 To b '使用递归方法,遍历所有目录
SearchFiles Folder(c), FileType
Next


End Function


Private Sub Command1_Click() '调用
SearchFiles Replace(App.Path & "\", "\\", ""), "*.*"
End Sub


...全文
953 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2017-04-27
  • 打赏
  • 举报
回复
要控制“层深度”很简单啊,增加一个“层”的计数参数, 并判断“当前”进入了第几层,对“达到指定层”的目录,不再进入下层文件夹;    或者“当超过指定层深”时直接返回就行了。
赵4老师 2017-04-27
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
of123 2017-04-27
  • 打赏
  • 举报
回复
应该不难。设一个层级变量,初始值为 0。当进入子目录前,检查是否达到底限,如果是,不进入;如果不是,进入并将层级变量加 1。退出子目录时,变量减 1。
phanphan 2017-04-27
  • 打赏
  • 举报
回复
多谢各位!因同时在百度贴吧也求助了,热心网友给出了具体的代码。现在贴出来结帖,也供像我这样的菜鸟借鉴。 Function SearchFiles(Path As String, FileType As String,depth as integer) if depth >SearchDepth then exit function ... SearchFiles Folder(c), FileType,depth +1 ... End Function Private Sub Command1_Click() '调用 SearchDepth=val(text1.text) SearchFiles Replace(App.Path & "\", "\\", ""), "*.*",0 End Sub
phanphan 2017-04-27
  • 打赏
  • 举报
回复
引用 1 楼 Chen8013 的回复:
要控制“层深度”很简单啊,增加一个“层”的计数参数, 并判断“当前”进入了第几层,对“达到指定层”的目录,不再进入下层文件夹;    或者“当超过指定层深”时直接返回就行了。
道理上能懂,但是递归中参数的传递弄得我有点晕。这个计算层的参数放在哪一步呢?大师能否就1楼的代码给出一个具体解决方法(代码)?

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧