如何用Delphi實(shí)現(xiàn)子目錄級的文件查詢

字號(hào):

在應(yīng)用實(shí)踐中,我們經(jīng)常會(huì)用到文件查詢功能。通過Win95中提供的查找功能,我們可以方便的找出磁盤上任何子目錄下的文件,其原因是該查找功能可以遍歷指定目錄下的所有子目錄中的文件。從編程角度講,它實(shí)現(xiàn)了子目錄級的文件查詢。其實(shí),這項(xiàng)功能并不難實(shí)現(xiàn),關(guān)鍵是能理解并掌握懙莨閽這種程序設(shè)計(jì)思路。本人用Delphi實(shí)現(xiàn)了該項(xiàng)功能(任意子目錄級),由于使用了懙莨閽,程序思路清晰,代碼量小。
    實(shí)現(xiàn)方法:
    1. 獲取當(dāng)前目錄下的所有下一級子目錄。
    2. 存入字符串列表中(Tstrings)。
    其中,用到了幾個(gè)API函數(shù)。
    FindFirst 是找出指定目錄下第一個(gè)文件或目錄。
    FindNext 一般和FindFirst配合使用,用來找出下一個(gè)文件或目錄。
    FindClose 用來關(guān)閉查詢。
    (以上函數(shù)Delphi在線幫助中有詳盡解釋,在此不贅述);
    3. 用FileExists函數(shù)查找當(dāng)前目錄,
    4. 尋找是否有滿足條件的文件存在,
    5. 依次使各個(gè)子目錄成為當(dāng)前目錄,
    6. 遞歸調(diào)用本函數(shù),
    7. 釋放資源,
    8. 返回查詢結(jié)果。  
    代碼如下:
    1.從搜索記錄中判斷是否是子目錄。
    function IsValidDir(SearchRec:TSearchRec):Boolean;
    begin
    if (SearchRec.Attr=16) and
    (SearchRec.Name<>'.') and
    (SearchRec.Name<>'..') then
    Result:=True
    else
    Result:=False;
    end;