Delphi » FAQ

Jak wyszukac wszystkie pliki o rozszerzeniach *.pas; *.dpr itd.

lofix
procedure TForm1.FileSearch(const PathName, FileName : string; const InDir : boolean);
var Rec  : TSearchRec;
  Path, CurFile, AllFiles : string;
  i: integer;
begin
Path := IncludeTrailingBackslash(PathName);
AllFiles:=FileName;
while AllFiles<>'' do begin
 i:=pos(';', AllFiles);
 if i=0 then begin
    CurFile:=Trim(AllFiles);
    AllFiles:='';
 end else begin
    CurFile:=Trim(Copy(AllFiles, 1, i-1));
    Delete(AllFiles, 1, i);
 end;
 if FindFirst(Path + CurFile, faAnyFile - faDirectory, Rec) = 0 then
 try
   repeat
     ListBox1.Items.Add(Path + Rec.Name);
   until FindNext(Rec) <> 0;
 finally
   FindClose(Rec);
 end;
end;

If not InDir then Exit;

if FindFirst(Path + '*.*', faDirectory, Rec) = 0 then
try
 repeat
 if {(Rec.Attr and faDirectory) and} (Rec.Name <> '.') and (Rec.Name <> '..') then
   FileSearch(Path + Rec.Name, FileName, True);
 until FindNext(Rec) <> 0;
finally
 FindClose(Rec);
end;
end; //procedure FileSearch - .  

Oto przykład:

FileSearch('C:\\mojfolder', '*.pas', CheckBox1.State in [cbChecked]);

//Zaczerpnięte z Experts-Exchange

FAQ

5 komentarzy

No dobra, ale to zwykłe wyszukiwane plików, a to już chyba gdzieś jest?

chyba powinno być:
Path := IncludeTrailingBackslash(PathName);
albo nawet:
Path := IncludeTrailingPathDelimiter(PathName);
według zaleceń Delphi Help.

a jak dodac podwojne slashe ??

Wystarczy wyszukiwać wszystkie (.) a potem w pętli sprawdzić, czy rozszerzenie tego pliku nie jest zgodne z którymś wyszukiwanym.

Ewentualnie można puścić dwa niezależne wyszukiwania.

a ja mam pytanie jak wyszukać równocześnie na przykład ".pas; .dpr" za jednym razem? To działa, gdy zrobimy to w Wyszukaj w systemowej wyszukiwarce, ale gdy to zrobię w Pańskim przykładzie nie znajduje mi żadnego poliku. Czy ktoś wie dlaczego??