findfirst是被用来搜索某一指定文件,那有没有一个 function是被用来搜索某一指定文件夹的呢?
或既可搜索文件夹又可搜索文件?

解决方案 »

  1.   

    findfirst就可以搜索文件夹var sr: TSearchRec;FindFirst('c:\', faAnyFile , sr)if (sr.Attr and faDirectory ) = faDirectory then
      

  2.   

    这端代码可以实现搜索某一文件加下所有文件的功能
    unit unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Db, DBTables, StdCtrls, DBCtrls, Mask, ExtCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        Edit1: TEdit;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure search(dir:string);
    var
      targetpath:string;{目标路径名}
      sr:TsearchRec;
    begin
      {第一阶段:找出初始dir目录下的所有文件,
      其中dir变量值由edit1的Text属性确定}  targetpath:=extractfilepath(dir);{分解出目标路径名}
      if findfirst(dir,faanyfile,sr)=0 then
      repeat
       if((sr.name<>'.')and(sr.name<>'..'){排除父目录和本目录两个假文件}
       and((filegetattr(targetpath+sr.name)and fadirectory)<>fadirectory)){只取文件}
       then
         form1.memo1.Lines.Add(targetpath+sr.name);{在memo中添加找到的文件}
      until findnext(sr)<>0;  if findfirst(dir,faanyfile,sr)=0 then
      repeat
       if((sr.name<>'.')and(sr.name<>'..')){排除父目录和本目录两个假文件}
       and((filegetattr(targetpath+sr.name)and fadirectory)=fadirectory){排除文件}
       then
         search(targetpath+sr.name+'\*.*');{递归调用}
      until findnext(sr)<>0;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      memo1.Clear;{清除数据表memo字段内容}
      search(Edit1.Text);{调用Search()函数}
      MessageDlg('文件搜索完毕!',mtInformation,[mbOk],0);{结束提示}end;end.