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