Wyszukiwanie plików
Adam Boduch
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;
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
Wypadałoby to sformatować.