Strona g│≤wna

 

Wyszukiwanie plik≤w w Delphi

CzΩst▒ czynno╢ci▒ w Delphi jest wyszukiwanie jakiego╢ pliku. Chcesz np. zlokalizowaµ star▒ wersje programu - wtedy przydaje siΩ wyszukiwanie. W sumie nie jest to takie trudne. 
Wszystko opiera siΩ na rekordzie "TSearchRec" - zawiera on informacje o znalezionym pliku - jego nazwΩ, rozmiar, atrybuty itp.
Struktura tego rekordu przedstawia siΩ nastΩpuj▒co:

type 
TSearchRec = record
		Time: Integer;
		Size: Integer;
		Attr: Integer;
		Name: TFileName;
		ExcludeAttr: Integer;
		FindHandle: THandle;
		FindData: TWin32FindData;

Pierwszy atrybut zawiera informacje o czasie utworzenia pliku, kolejny to rozmiar utworzonego pliku. NastΩpny parametr to atrybut pliku. Mo┐liwe s▒ takie oto atrybuty:

 



Atrybut

Znaczenie



faReadOnly

Tylko do odczytu

faHidden

Ukryty

faSysVolume Plik systemowy
faVolumeID Etykieta woluminu
faDirectory Katalog
faArchive Zarchiwizowany

faAnyFile

Dowolny plik

Ostatni parametr zawiera bardziej szczeg≤│owe informacje o pliku:

 


Atrybut

Znaczenie



dwFileAttributes Atrybut pliku. Wyczerpuj▒ca informacja na ten temat znajduje siΩ w systemi pomocy pod has│em: WIN32_FIND-DATA
ftCreateionTime Czas utworzenia pliku;
ftLastWriteTime Czas ostatniej modyfikacji pliku;
ftLastAccessTime Czas ostatniego dostΩpu do pliku;

Tak jak powiedzia│em wszystko opiera siΩ na tym rekordzie.

Na pocz▒tku je┐eli chcesz znale╝µ jaki╢ plik nale┐y u┐yµ funkcji "FindFirst". Pierwszym jej parametrem musi byµ katalog oraz maska, w kt≤rym maj▒ byµ szukane pliki. Drugi parametr do atrybut szukanego pliku, a ostatni parametr to wskazanie na rekord "TSearchRec". Czyli powinno to wygl▒daµ tak:

var
  SR : TSearchRec;
begin
  FindFirst('C:\*.*', faAnyFile, SR);

To naturalnie nie wszystko bo nale┐y to wpakowaµ :) w pΩtle, kt≤ra bΩdzie wyszukiwaµ pliki z danej lokalizacji a┐ do wyczerpania ilo╢ci mog▒cych zostaµ znalezionych plik≤w. LiczbΩ znalezionych plik≤w mo┐e reprezentowaµ zmienna "Found" typu Integer. 

var
  SR : TSearchRec;
  Found : Integer; // liczba znalezionych plikow
begin
  Found := FindFirst('C:\*.*', faAnyFile, SR);

Kontynuowanie procesu przeszukiwania bΩdzie nastΩpowa│o za pomoc▒ polecenia:

Found := FindNext(SR);

Na podst. zdobytej wiedzy :) mo┐na napisaµ prost▒ procedurΩ odnajduj▒c▒ pliki w danym katalogu:

procedure TForm1.Button1Click(Sender: TObject);
var
  SR : TSearchRec;
  Found : Integer; // liczba znalezionych plikow
begin
  Found := FindFirst('C:\*.*', faAnyFile, SR); // odnajdz
  while (Found = 0) do // dopoki liczba znalezionych plikow nie 
// bedzie rowna 0
  begin
    Memo1.Lines.Add('C:\' + SR.Name); // dodaj do Memo znaleziony plik
    Found := FindNext(SR); // szukaj dalej
  end;
  FindClose(SR); // zakoncz wyszukowanie
end;

To jest oczywi╢cie najprostszy z mo┐liwych do zastosowania proces≤w przeszukiwania plik≤w, ale dzia│a :)) 

W naszym serwisie mo┐esz znale╝µ jeszcze wiele informacji dotycz▒cych poszukiwania plik≤w. 

  • Uzyskiwanie plik≤w w katalogu ( dzia│ "Algorytmy" ); [ Zobacz ]

Opr≤cz tego mo┐esz ╢ci▒gn▒µ dwa kody ╝r≤d│owe program≤w, kt≤re realizuj▒ przeszukiwanie plik≤w. Pierwszy tworzy jedynie liste znajduj▒cych siΩ w katalogu plik≤w, a drugi wyszukuje pliki o podanej przez Ciebie masce i dodaje ikonki szukanego pliku. ( zreszt▒ zobacz sam :)). Oba ╝r≤d│a s▒ dobrze skomentowane tak┐e nie powienine╢ mieµ k│opot≤w z ich zrozumieniem.

Search.zip ( 3 kB )
Searching.zip ( 3 kB )

Adam Boduch