如题!

解决方案 »

  1.   

    //直接放在 implementation下//测试是不是目录
    function IsValidDir(SearchRec: TSearchRec): integer;
    begin
      if (SearchRec.Attr <> 16) and  (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then Result:=0
      else
        if (SearchRec.Attr = 16) and  (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then Result:=1
      else Result:=2;
    end;
    //搜索指定目录下的所有rtf文件
    //参数意义:
    //        MainPath 指定的搜索路径  FileName 文件名  FoundResult 搜索返回列表  Num 找到的文件数
    procedure SearchFile(MainPath, FileName: string;FoundResult: TStrings; var Num: integer);
    var
      i:integer;
      SubDir:TStrings;
      SearchRec:TsearchRec;
    begin
      if Trim(FileName)<>'' then
      begin
        if (FindFirst(mainpath+Filename, faAnyFile, SearchRec)=0) then
         Begin
          repeat
            Application.ProcessMessages;
            if IsValidDir(SearchRec)=0 then
              begin Inc(Num); foundresult.Add(MainPath+SearchRec.Name) end;
            application.ProcessMessages ;
          until (FindNext(SearchRec) <> 0);
         end;
        FindClose(SearchRec);
        //这是递归部分,查找各子目录。
        SubDir:=TStringList.Create;//字符串列表必须动态生成
        if (FindFirst(MainPath+'*.*', faDirectory, SearchRec)=0) then
        begin
         repeat
          if IsValidDir(SearchRec)=1 then  SubDir.Add(SearchRec.Name);
             Application.ProcessMessages ;
         until (FindNext(SearchRec) <> 0);
        end;
        FindClose(SearchRec);
        for i:=0 to SubDir.Count-1 do
            Searchfile(MainPath+SubDir.Strings[i]+'\',Filename,foundresult,Num);
        //资源释放并返回结果。
        SubDir.Free;
      end;
    end;
    //调用
    //调用函数查找指定目录下的所有rtf文件,并存放到slFileList对象中,数目存放在intFileCount中。
        SearchFile(sPath,'*.rtf',slFileList,intFileCount);