一名vba程序员在不采用递归算法的情况下如何实现查找指定文件夹及其子文件夹的功能
可以使用循环来实现查找指定文件夹及其子文件夹的功能。具体步骤如下:
-
首先定义一个函数,传入要查找的文件夹路径和要查找的文件类型,函数返回值为符合条件的文件路径数组。
-
在函数中,创建一个文件夹对象,打开要查找的文件夹,获取该文件夹下所有文件和子文件夹的路径。
-
遍历文件夹下的所有文件和子文件夹,如果是文件夹,则递归调用该函数,获取该文件夹下符合条件的文件路径数组,将其加入结果数组中。
-
如果是文件,则判断其文件类型是否符合要查找的文件类型,如果是,则将其加入结果数组中。
-
返回结果数组。
下面是示例代码:
Function FindFiles(ByVal folderPath As String, ByVal fileType As String) As Variant()
Dim files() As Variant
ReDim files(0 To 0)
Dim folder As Object
Set folder = CreateObject("Scripting.FileSystemObject").GetFolder(folderPath)
Dim file As Object
For Each file In folder.Files
If Right(file.Path, Len(fileType)) = fileType Then
files(UBound(files)) = file.Path
ReDim Preserve files(0 To UBound(files) + 1)
End If
Next
Dim subFolder As Object
For Each subFolder In folder.SubFolders
Dim subFiles() As Variant
ReDim subFiles(0 To 0)
subFiles = FindFiles(subFolder.Path, fileType)
Dim subFile As Variant
For Each subFile In subFiles
files(UBound(files)) = subFile
ReDim Preserve files(0 To UBound(files) + 1)
Next
Next
ReDim Preserve files(0 To UBound(files) - 1)
FindFiles = files
End Function
使用示例:
Sub TestFindFiles()
Dim files() As Variant
files = FindFiles("C:\test", ".txt")
Dim file As Variant
For Each file In files
Debug.Print file
Next
End Sub
注意:该代码使用了动态数组,需要在使用前声明数组大小,并在使用后将数组大小调整为实际大小,否则可能会造成内存泄漏
原文地址: https://www.cveoy.top/t/topic/d4w6 著作权归作者所有。请勿转载和采集!