Wyszukiwanie plików
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:
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:
Ostatni parametr zawiera bardziej szczegółowe informacje o pliku:
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:
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.
Kontynuowanie procesu przeszukiwania będzie następowało za pomocą polecenia:
Na podstawie zdobytej wiedzy można napisać prostą procedurę odnajdującą pliki w danym katalogu:
To jest oczywiście najprostszy z możliwych do zastosowania procesów przeszukiwania plików, ale działa.
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; end;
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:
| 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:
| dwFileAttributes | Atrybut pliku. Wyczerpująca informacja na ten temat znajduje się w systemi pomocy pod hasłem: WIN32_FIND-DATA |
| ftCreationTime | Czas utworzenia pliku |
| ftLastWriteTime | Czas ostatniej modyfikacji pliku |
| ftLastAccessTime | Czas ostatniego dostępu do pliku; |
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); end;
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); end;
Kontynuowanie procesu przeszukiwania będzie następowało za pomocą polecenia:
Found := FindNext(SR);
Na podstawie 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 wyszukiwanie end;
To jest oczywiście najprostszy z możliwych do zastosowania procesów przeszukiwania plików, ale działa.
nieaktualne