Programowanie w języku Delphi » Artykuły

Wyszukiwanie plików

  • 2012-03-25 16:14
  • 2 komentarze
  • 2621 odsłon
  • Oceń ten tekst jako pierwszy
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:

faReadOnlyTylko do odczytu
faHiddenUkryty
faSysVolumePlik systemowy
faVolumeIDEtykieta woluminu
faDirectoryKatalog
faArchiveZarchiwizowany
faAnyFileDowolny plik


Ostatni parametr zawiera bardziej szczegółowe informacje o pliku:

dwFileAttributesAtrybut pliku. Wyczerpująca informacja na ten temat znajduje się w systemi pomocy pod hasłem: WIN32_FIND-DATA
ftCreationTimeCzas utworzenia pliku
ftLastWriteTimeCzas ostatniej modyfikacji pliku
ftLastAccessTimeCzas 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.

2 komentarze

TomRiddle 2012-03-25 15:55

Wypadałoby to sformatować.