在VB中要实现查找文件功能,我们可以利用VB的DIR函数进行递归来实现。每次使用DIR函数后,比较是否有要查找的文件,再检查是否有子目录,若有,利用递归继续查找,这样可对整个盘进行查找。 下面是一个例子,查找DOS目录下的所有EXE文件,统计EXE文件的数目并列出文件名。本程序会查找当前路径下的所有文件和子目录,与WIN95的“包含子文件夹”的查找功能类似。 程序与注释如下: 1.在窗体中加一命令按钮Command1,Caption=查找示例,双击此按钮,写如下代码: PrivateSubCommand1-Click() Dimff()AsString′定义一个字符串数组用来保存找到的文件名称 DimfnAsLong′保存找到的文件数目 fn=TreeSearch(″C:%%dos″,″*.exe″,ff()) Print″找到文件数目为″;fn ForI=1Tofn Printff(I) Next EndSub 2.插入一模块Modulel.bas,写如下代码: OptionExplicit PublicFunctionTreeSearch(ByValsPathAsString,ByValsFileSpecAsString,sFiles()AsString) AsLong Static1FilesAsLong′文件数目 DimsDir AsString DimsSubDirs()AsString′存放子目录名称 Dim1IndexAsLong IfRight(sPath,1)<>″%%″ThensPath=sPath&″%%″ sDir=Dir(sPath&sFileSpec) ′获得当前目录下文件名和数目 DoWhileLen(sDir) 1Files=1Files+1 ReDimPreservesFiles(1To1Files) sFiles(1Files)=sPath&sDir sDir=Dir Loop ′获得当前目录下的子目录名称 1Index=0 sDir=Dir(sPath&″*.*″,16) DoWhileLen(sDir) IfLeft(sDir,1)<>″.″Then′skip.and.. ′找出子目录名 IfGetAttr(sPath&sDir)AndvbDirectoryThen 1Index=lIndex+1 ′保存子目录名 RedimPreservesSubDirs(1To1Index) sSubDirs(1Index)=sPath&sDir&″%%″ EndIf EndIf sDir=dir Loop For1Index=1To1Index ′查找每一个子目录下文件,这里利用了递归 CallTreeSearch(sSubDirs(1Index),sFileSpec,sFiles()) Next1Index TreeSearch=1Files EndFunction 3.保存文件,按F5运行,单击命令按钮即可。 程序运行环境:VB4.0(32位),中文WIN95。->
|