1. 程式人生 > >delphi中查詢指定檔案的例程

delphi中查詢指定檔案的例程

程式碼如下:

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.