eCount = 0
CheckFolder "C:\"
Debug.Print "C盘下GIF文件总数: " & m_lngFileCount
End Sub
Sub CheckFolder(strPath As String)
Dim objFolder As Scripting.Folder 注释:文件夹对象
Dim objFile As Scripting.File 注释:文件对象
Dim objSubdirs As Scripting.Folders 注释:文件夹集合对象
Dim objLoopFolder As Scripting.Folder 注释:文件夹对象
Debug.Print "Checking directory " & strPath
Set objFolder = m_objFSO.GetFolder(strPath)
注释: 检查目录中的文件
For Each objFile In objFolder.Files
If UCase$(Right$(objFile.ShortPath, 4)) = ".GIF" Then
注释:这一段是条件检查,但找到的文件是否符合给定的条件,这儿通过取文件名的
注释:最后4位看是不是“.GIF“来判断文件是否是GIF文件。
m_lngFileCount = m_lngFileCount + 1
注释:找到指定条件的文件后进行相应的操作,这儿是把计数器加一。
End If
Next objFile
注释: 在所有子目录中循环,计数。
Set objSubdirs = objFolder.SubFolders
For Each objLoopFolder In objSubdirs
CheckFolder objLoopFolder.Path
注释:递归调用CheckFolder子过程,实现目录树的遍历。
Next objLoopFolder
Set objSubdirs = Nothing
Set objFolder = Nothing
End Sub
为了简化这段代码,FileSystemObject对象和文件计数器都被定义为这个模块的全局变量(因此前面都加了m_前缀)。CheckFolder 子
程序开始时用C:\ 作为入口参数,一旦找到一个符合条件的文件,就把计数值加一。检查完下面的所有文件后,再用其子目录作为参数调用CheckFolder过程本身。当所有的目录都被作为参数调用了之后,所有的文件也就被检查完了。这就是用递归遍历目录树的方法。所谓递归,就是过程直接或者间接的调用自身。最后,作为过程调用的结果,统计数字被Main过程显示出来。
只要把检验文件是否为GIF文件的部分换成其它的条件,再把计数的语句换成想要执行的语句块。每当找到符合条件的语句后,就会执行这个语句块。这样就可以很容易的把代码修改用于其它的用途。
如果你曾今用过Dir函数来实现同样的功能,那么你一定会感到用对象编程的方便之处。不论你是想检查文件属性,还是创建新的文件,或者其它任何关于文件的操作,新的文件对象都会为你节省不少时间,而且是代码更加易于理解。