在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。->