fr:=FindFirst(Path,faAnyFile,sr);
while fr=0 do
begin
if (sr.Attr=faDirectory)and(sr.Name<>'.')and(sr.Name<>'..') then
FindAll(path+sr.Name)
else
begin
showmessage(sr.name);
end;
fr:=FindNext(sr);
end;
FindClose(sr);比如说,目录结构为d:\a\b\c\d\ 现在我选定path 为d:\a\ 那么函数将查找d:\a\ 及 d:\a\b\下的所有文件,对c 及 d 两个更深的子目录则不查找,如何实现呢?
while fr=0 do
begin
if (sr.Attr=faDirectory)and(sr.Name<>'.')and(sr.Name<>'..') then
FindAll(path+sr.Name)
else
begin
showmessage(sr.name);
end;
fr:=FindNext(sr);
end;
FindClose(sr);比如说,目录结构为d:\a\b\c\d\ 现在我选定path 为d:\a\ 那么函数将查找d:\a\ 及 d:\a\b\下的所有文件,对c 及 d 两个更深的子目录则不查找,如何实现呢?
function TtmpFileCls.searchFile(path, fileMask: string;
pro: PPro): integer;
var sr:Tsearchrec; ch:char;
begin
ch:=path[length(path)];
if (ch<>'\')and(ch<>'/') then path:=path+'\';
if FindFirst(path+fileMask, faAnyFile , sr) = 0 then
begin
repeat
pro(path+sr.Name);
until FindNext(sr) <> 0;
FindClose(sr);
end;
end;
var
sr:Tsearchrec;
ch:char;
beginfr:=FindFirst(Path,faAnyFile,sr);
while fr=0 do
begin
if (sr.Attr=faDirectory)and(sr.Name<>'.')and(sr.Name<>'..') then
begin
if (Level>=0) then
FindAll(path+sr.Name,Level-1);//下一层:
end
else
begin
showmessage(sr.name);
end;
fr:=FindNext(sr);
end;
FindClose(sr);
end;可以这样调用:
FindAll('d:\a\',1);//查询d:\a\ 的当前层,及下一层
//FindAll('d:\a\',2);//查询d:\a\ 的当前层,及下两层
=========================
过程类型,可以传入一个过程进去,找到文件后执行这个过程。