在應用實踐中,我們經常會用到文件查詢功能。通過Win95中提供的查找功能,我們可以方便的找出磁盤上任何子目錄下的文件,其原因是該查找功能可以遍歷指定目錄下的所有子目錄中的文件。從編程角度講,它實現了子目錄級的文件查詢。其實,這項功能並不難實現,關鍵是能理解並掌握懙莨閽這種程序設計思路。本人用Delphi實現了該項功能(任意子目錄級),由於使用了懙莨閽,程序思路清晰,代碼量小。
實現方法:
1.獲取當前目錄下的所有下一級子目錄。
2.存入字符串列表中(Tstrings)。
其中,用到了幾個API函數。
FindFirst 是找出指定目錄下第一個文件或目錄。
FindNext 一般和FindFirst配合使用,用來找出下一個文件或目錄。
FindClose 用來關閉查詢。
(以上函數Delphi在線幫助中有詳盡解釋,在此不贅述);
3.用FileExists函數查找當前目錄,
4.尋找是否有滿足條件的文件存在,
5.依次使各個子目錄成為當前目錄,
6.遞歸調用本函數,
7.釋放資源,
8.返回查詢結果。
代碼如下:
1.從搜索記錄中判斷是否是子目錄。
function IsValidDir(SearchRec:TSearchRec):Boolean;
begin
if (SearchRec.Attr=16) and
(SearchRec.Name<>'.') and
(SearchRec.Name<>'..') then
Result:=True
else
Result:=False;
end;
2.這是查詢主體函數。
參數介紹:
Mainpath: 指定的查詢目錄。
Filename: 欲查詢的文件。
Foundresult: 返回的含完整路徑的匹配文件(可能有多個)。
如果有匹配文件,函數返回True,否則,返回False;
function SearchFile(mainpath:string; filename:string;
var foundresult:TStrings):Boolean;
var i:integer;
Found:Boolean;
subdir1:TStrings;
searchRec:TsearchRec;
begin
found:=false;
if Trim(filename)<>'' then
begin
subdir1:=TStringList.Create;//字符串列表必須動態生成
//找出所有下級子目錄。
if (FindFirst(mainpath+'*.*', faDirectory, SearchRec)=0) then
begin
if IsValidDir(SearchRec) then
subdir1.Add(SearchRec.Name);
while (FindNext(SearchRec) = 0) do
begin
if IsValidDir(SearchRec) then
subdir1.Add(SearchRec.Name);
end;
end;
FindClose(SearchRec);
//查找當前目錄。
if FileExists(mainpath+filename) then
begin
found:=true;
foundresult.Add(mainpath+filename);
end;
//這是遞歸部分,查找各子目錄。
for i:=0 to subdir1.Count-1 do
found:=Searchfile(mainpath+subdir1.Strings[i]+
'\',Filename,foundresult)or found;
//資源釋放並返回結果。
subdir1.Free;
end;
result:=found;
end;
總之,只要掌握了思路,用哪種編程語言都可以實現。現在,你可以輕松的給你 的系統掛上一個非常使用的功能了。