比如搜索 windows目录下的Txt文件.

解决方案 »

  1.   

    1. 获取当前目录下的所有下一级子目录,2. 存入字符串列表中(Tstrings)。 其中,用到了几个API函数。 FindFirst是找出指定目录下第一个文件或目录。 FindNext一般和FindFirst配合使用,用来找出下一个文件或目录。 FindClose用来关闭查询。 (以上函数Delphi在线帮助中有详尽解释,在此不赘述); 3. 用FileExists函数查找当前目录,4. 寻找是否有满足条件的文件存在。 5. 依次使各个子目录成为当前目录,6. 递归调用本函数。 7. 释放资源,8. 返回查询结果。     代码如下: 1. 从搜索记录中判断是否是子目录。   function IsValidDir(SearchRec:TSearchRec):Boolean; begin 
    if (SearchRec.Attr=16) and (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then Result:=True else Result:=False; end; 2. 这是查询主体函数。 参数介绍: Mainpath: 指定的查询目录。 Filename: 欲查询的文件。 Foundresult: 返回的含完整路径的匹配文件(可能有多个)。 如果有匹配文件,函数返回True,否则,返回False;   function SearchFile(mainpath:string;filename:string; var foundresult:TStrings):Boolean; var i:integer; Found:Boolean; subdir1:TStrings; searchRec:TsearchRec; begin found:=false; if Trim(filename)<>'' then begin subdir1:=TStringList.Create;//字符串列表必须动态生成 //找出所有下级子目录。 if (FindFirst(mainpath+'*.*', faDirectory, SearchRec)=0) then begin if IsValidDir(SearchRec) then subdir1.Add(SearchRec.Name); while (FindNext(SearchRec) = 0) do begin if IsValidDir(SearchRec) then subdir1.Add(SearchRec.Name); end; end; FindClose(SearchRec); //查找当前目录。 if FileExists(mainpath+filename) then begin found:=true; foundresult.Add(mainpath+filename); end; //这是递归部分,查找各子目录。 for i:=0 to subdir1.Count-1 do found:=Searchfile(mainpath+subdir1.Strings[i]+ '\',Filename,foundresult)or found; //资源释放并返回结果。 subdir1.Free; end; result:=found; end;
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
       SearchRec:TSearchRec;
       ext,AppPath:string;
    begin
        listbox1.Items.Clear;
         AppPath:='d:\test\';
         ext:='*.txt';
         FindFirst(AppPath+ext,faAnyFile-faDirectory,SearchRec);
         listbox1.Items.Add(SearchRec.Name);
         while FindNext(SearchRec)=0 do
           listbox1.Items.Add(SearchRec.Name);
    end;
      

  3.   

    FindFirst
    FindNext
    FindClose
      

  4.   

    直接使用API函数FindFileInTree不就可以了
      

  5.   

    上面偶提到的这个函数是被抛弃的,已经不可用了
    还是用FindFirst吧