delphi中查詢指定檔案的例程
阿新 • • 發佈:2019-01-24
程式碼如下:
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, FileCtrl; type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} {--------------------------------------- 檔案查詢函式 SearchFile 引數說明: sFileName: 要查詢的檔名稱 sRootDir: 指定在哪個目錄中查詢 bFileOnly: 是否只查詢檔案 bRecurse: 是否查詢子目錄 返回值: FileList: 查詢結果列表 ----------------------------------------} function SearchFile(sFileName, sRootDir: string; bFileOnly, bRecurse: boolean): TStringList; //內嵌檔案查詢遞迴過程 procedure DoSearchFile(sFileName, sRootDir: string; bFileOnly, bRecurse: boolean; var FileList: TStringList); var Found: integer; SearchRec: TSearchRec; begin //開始查詢 Found := FindFirst(sRootDir + '\*.*', faAnyFile, SearchRec); while Found = 0 do begin //遇到子目錄時確定是否查詢子目錄和是否將符合條件的子目錄加入查詢結果 if (SearchRec.Attr = faDirectory) and (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then begin if (AnsiCompareText(sFileName, SearchRec.Name) = 0) and not bFileOnly then FileList.Add(sRootDir + '\' + SearchRec.Name); if bRecurse then DoSearchFile(sFileName, sRootDir + '\' + SearchRec.Name, bFileOnly, bRecurse, FileList); end //找到符合條件的檔案時加入查詢結果 else if AnsiCompareText(sFileName, SearchRec.Name) = 0 then FileList.Add(sRootDir + '\' + SearchRec.Name); Found := FindNext(SearchRec); end; FindClose(SearchRec); end; var FileList: TStringList; begin FileList := TStringList.Create; FileList.Clear; DoSearchFile(sFileName, sRootDir, bFileOnly, bRecurse, FileList); Result := FileList; end; procedure TForm1.Button1Click(Sender: TObject); {按Button時進行查詢,結果顯示到ListBox中} begin ListBox1.Items.Assign(SearchFile('Project1.dpr', 'd:\', True, True)); end; end.