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 两个更深的子目录则不查找,如何实现呢?   

解决方案 »

  1.   

    //对指定文件夹下所有满足条件的文件进行处理
    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;
      

  2.   

    楼上的pro,是什么类型呀???function FindAll(Path:String;Level:int);
    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\ 的当前层,及下两层
      

  3.   

    楼上的pro,是什么类型呀???
    =========================
    过程类型,可以传入一个过程进去,找到文件后执行这个过程。