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