我现在用的遍历目录的过程是这样的procedure TForm1.Button1Click(Sender: TObject);
begin
Get('D:\','*.txt')
end;procedure TForm1.Get(path,fname:String);
begin
//遍历查找文件
end;问题来了,如果是查找多种文件类型时,这个代码效率就很慢了!不知各位有什么高招请指点一下!

解决方案 »

  1.   

    procedure DoIt(SourcePath: String);
    var
      sr: TSearchRec;
    begin
      SourcePath:=IncludeTrailingPathDelimiter(SourcePath);
      if FindFirst(SourcePath + '*.*', faAnyFile, sr) = 0 then
      begin
        repeat
          //处理这个文件,文件名是 sr.Name;
        until FindNext(sr) <> 0;
        FindClose(sr);
      end;
    end;
      

  2.   

    我的就是这样的,比如查找2种文件*.exe和*.txt那么用我那个代码的话,同一个目录就要搜索2次,不知会不会影响效率如果我要搜索的文件类型有N种,那么每个目录就要搜索N次,我感觉这样影响效率?
      

  3.   

    只知道这种方法了   :
    if FindFirst(SourcePath + '*.*', faAnyFile, sr) = 0 then
      begin
        repeat
          //处理这个文件,文件名是 sr.Name;
        until FindNext(sr) <> 0;
        FindClose(sr);
      end;
      

  4.   

    先找*.*
    然后通过 ExtractfileExt获取扩展名进行判断
      

  5.   

    to:Eastunfail谢谢,这个应该不错,不过我又想到,如何扩展名是这样*.e?e也就是扩张名包含通配符比较就是麻烦事了
      

  6.   

    var 
      myext = 'e?e';/?xe/ex?
      extchar : ayyay [0..2] of char;
      
      i := pos('?',myext );
      ext := ExtractfileExt(..);
      case i of
        1 : if  (ext[2] = myext[2]) and (ext[3] = myext[3]) then...
        2 : if  (ext[1] = myext[1]) and (ext[3] = myext[3]) then...
        3 : if  (ext[1] = myext[1]) and (ext[2] = myext[2]) then... 
      

  7.   

    var 
      myext = 'e?e';/?xe/ex?
      
      i := pos('?',myext );
      ext := ExtractfileExt(..);
      case i of
        1 : if  (ext[2] = myext[2]) and (ext[3] = myext[3]) then...
        2 : if  (ext[1] = myext[1]) and (ext[3] = myext[3]) then...
        3 : if  (ext[1] = myext[1]) and (ext[2] = myext[2]) then...
      else
        if ext = myext then ...
      end;