function BrowseFolder:string;  //浏览文件夹函数
var
  Info:TBrowseInfo;         
  Dir:array[0..260] of char;
  ItemId:PItemIDList;
begin
  with Info do
  begin
    hwndOwner:=MainForm1.Handle; 
    pidlRoot:=nil;
    pszDisplayName:=nil;
    lpszTitle:='Select files folder:';
    ulFlags:=0;
    lpfn:=nil;
    lParam:=0;
    iImage:=0;
  end;
  ItemId:=SHBrowseForFolder(Info);
  if ItemId<>nil then
  begin
    SHGetPathFromIDList(ItemId,@Dir);
    Result:=string(Dir);
  end;
end;
function TMainForm1.Getdir(dir: string);string;  //对路径加'\'
begin 
  if dir[length(dir)] <> '\' then
  result := dir + '\' 
  else
  result := dir;
end;procedure TMainForm1.FindFiles(path: string; filename: string);
 var
  findresult: integer;
  frec, drec: Tsearchrec;  function DirChild (cdir: string): Boolean;  //是否为子目录
  begin
    result := (cdir = '.') or (cdir = '..');
  end;
begin  path := Getdir(path);
  findresult := findfirst(path + filename, faanyfile + fahidden + fasysfile + fareadonly, frec);
  try    while findresult = 0 do
    begin
  
      list1.Items.Add(lowercase(path + frec.Name));
      findresult := findnext(frec);
 
    end;    findresult := findfirst(path + '*.*', fadirectory, drec);
    while findresult = 0 do
    begin
      if ((drec.Attr and fadirectory) = fadirectory) and not DirChild(drec.Name) then      findfiles(path + drec.Name);   //------------不能编译------------      findresult := findnext(drec);
    end;
  
  finally
    findclose(frec);
  end;
end;procedure TMainForm1.Action1Execute(Sender: TObject);
var                                                           
  Dir: String;
begin
  screen.Cursor := crhourglass;
  try
    Dir := BrowseFolder;
    FindFiles(Dir,' *.exe');
  finally
    screen.Cursor := crdefault;
  end;
end;end.

解决方案 »

  1.   

    Maple119(枫叶) 贴出来又如何呢
      

  2.   

    给你一个例子看:★★★查找指定扩展名的所有文件;
    function FindAllFiles(Path, Filter: string; AList: TStrings): Integer;
    //查找指定目录下指定扩展名的所有文件;Path:以'\'结尾的路径名;
    //Filter:指定扩展名,为空时查找所有文件;
      function HasExt(A, B: string): Boolean;
      begin
        Result := (B = '')
          or (UpperCase(ExtractFileExt(A)) = UpperCase(ExtractFileExt(B)));
      end;var
      F: TSearchRec;
      Ret: Integer;
    begin
      Result := 0;
      Ret := FindFirst(Path + '*', faAnyFile, F);
      while Ret = 0 do
      begin
        if F.Attr = faDirectory then
        begin
          if (F.Name <> '.') and (F.Name <> '..') then
            Result := Result + FindAllFiles(Path + F.Name + '\', Filter, AList);
        end
        else if HasExt(F.Name, Filter) then
        begin
          AList.Add(Path + F.Name);
          Inc(Result);
        end;
        Ret := FindNext(F);
      end;
      FindClose(F);
    end;
      

  3.   

    FINDFIRST
    FINDNEXT
    两个API搞定..
      

  4.   

    FINDFIRST
    FINDNEXT
    两个API搞定..
      

  5.   

    用Pascal时代的FindFirst、FindNext也可以!