发信人: kingron(金龍)
整理人: kingron(2000-12-27 18:07:18), 站内信件
|
在程序设计中经常要查找某个目录下的某些文件,因此大家不得不写一些函数来查找,有没有可能写一个通用的查找文件的函数呢?答案是肯定的。下面就就是你要的:
这个函数支持回调
type
TFindCallBack=procedure (const filename:string;var bquit:boolean);
procedure findfile(var fileresult: Tstrings;var quit:boolean;const path: String;
const filename:string='*.*';const proc:TFindCallBack=nil;
const attr:integer=faanyfile;const bSub:boolean=true;
const bMsg:boolean=true);
var
fpath: String;
info: TsearchRec;
procedure ProcessAFile;
begin
if (info.Name<>'.') and (info.Name<>'..') and ((info.Attr and faDirectory)<>faDirectory) then
begin
fileresult.add(fpath+info.FindData.cFileName);
if assigned(proc) then
proc(fpath+info.FindData.cFileName,quit);
end;
end;
procedure ProcessADirectory;
begin
if (info.Name<>'.') and (info.Name<>'..') and ((info.attr and fadirectory)=fadirectory) then
findfile(fileresult,quit,fpath+info.Name,filename,proc,attr,bsub,bmsg);
end;
begin
if quit then exit;
if path[length(path)]<>'\' then
fpath:=path+'\'
else
fpath:=path;
if 0=findfirst(fpath+filename,attr and (not fadirectory),info) then
begin
ProcessAFile;
while findnext(info)=0 do
begin
if bmsg then application.ProcessMessages;
ProcessAFile;
if quit then
begin
findclose(info);
exit;
end;
end;
end;
findclose(info);
if bsub then
if findfirst(fpath+'*',fadirectory+fasysfile+fahidden,info)=0 then
begin
ProcessADirectory;
while findnext(info)=0 do
ProcessADirectory;
end;
findclose(info);
end;
调用例子:
procedure aaa(const filename:string;var quit:boolean);
begin
form1.listbox1.Items.Add(filename);
quit:=form1.qqq;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
aa,bb:tstrings;
// i:integer;
quit:boolean;
begin
listbox1.Clear;
qqq:=false;
button1.Enabled:=false;
aa:=tstringlist.Create;
bb:=tstringlist.Create;
quit:=false;
findfile(aa,quit,edit1.text,edit2.text,aaa,faanyfile,checkbox1.checked);
listbox1.Items:=aa;
showmessage(inttostr(listbox1.items.count));
button1.Enabled:=true;
aa.Free;
bb.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
qqq:=true;
end;
---- ██████
█┏━━┓█
█┃之金┃█ 访问Delphi版请点击这儿:Delphi版直达快车
█┃印龍┃█
█┗━━┛█
██████ |
|