FindFirst
Misiekd
Zwracana wartość
Jeśli jakikolwiek plik zostanie znaleziony Funkcja zwraca wartość 0, w przeciwnym razie zwraca wartość niezerową.
FileMask
Zmienna FileMask może zawierać ścieżkę i/lub nazwę pliku. W nazwie można używać symboli wieloznacznych ? oraz
symbol ? zastępuje jeden znak
symbol zastępuje 0, 1 lub wiele znaków
Attributes
W zależności od wartości zmiennej Attributes wyszukiwane są tylko te pliki, które posiadają wymagane parametry.
Zmienna Attributes może przyjmować następujące wartości:
Nazwa stałej | Wartość | Opis |
---|---|---|
faReadOnly | $00000001 | pliki tylko do odczytu |
faHidden | $00000002 | pliki ukryte |
faSysFile | $00000004 | pliki systemowe |
faVolumeID | $00000008 | pliki Volume ID |
faDirectory | $00000010 | katalogi |
faArchive | $00000020 | pliki archiwalne |
faAnyFile | $0000003F | wszystkie plik |
SearchResult
SearchResult to rekord różniący się ilością i typem pól w zależności od systemu operacyjnego. Jego strukturę można zobaczyć poniżej
type
TFileName = type string;
TSearchRec = record
Time: Integer;
Size: Integer;
Attr: Integer;
Name: TFileName;
ExcludeAttr: Integer;
{$IFDEF MSWINDOWS}
FindHandle: THandle platform;
FindData: TWin32FindData platform;
{$ENDIF}
{$IFDEF LINUX}
Mode: mode_t platform;
FindHandle: Pointer platform;
PathOnly: String platform;
Pattern: String platform;
{$ENDIF}
end;
Opisze tylko część przeznaczoną dla systemu windows.
Nazwa | Opis |
---|---|
Time | czas i data ostatniej modyfikacji pliku. Może być przekonwertowany do typu [[Delphi/TDateTime|TDateTime]] funkcją [[Delphi/FileDateToDateTime]] |
Size | rozmiar pliku w bajtach |
Attr | atrybuty pliku (patrz opis zmiennej Attributes) |
Name | długa nazwa pliku wraz z rozszerzeniem |
ExcludeAttr | ?? |
FindHandle | wewnętrzny uchwyt wykorzystywany do śledzenia aktualnego stanu wyszukiwania |
FindData | to [[Delphi/record|rekord]] zawierający dodatkowe dane, takie jak czas stworzenia pliku, zas ostatniego dostępu do pliku oraz krótką (DOSową) oraz długą (Windowsową) nazwę pliku |
Po zakończeniu wyszukiwania (jeśli FindFirst zwróciła wartość 0) należy wywołać procedurę FindClose. Zwolni to zasoby zarezerwowane przez procedurę wyszukiwania
Jeśli FileMask nie zawiera informacji o ścieżce przeszukany zostanie aktualny katalog, który można zmienić np. procedurą ChDir
Przykład
//Wyszukiwanie plików tekstowych w bieżącym katalogu
procedure FindTXT;
var
SearchResult : TSearchRec;
begin
if FindFirst('*.txt', faAnyFile, SearchResult) = 0 then
begin
repeat
ShowMessage(SearchResult.Name);
until FindNext(SearchResult) <> 0;
FindClose(searchResult);
end;
end;
Zobacz też:
Funckje FindFirst i FindNext występują również w Turbo Pascalu, jednak różnią się one nieznacznie od swoich odpowiedników w delphi. Zdefiniowane są w module Dos.
Deklaracja:
procedure FindFirst(Path: PChar; Attr: Word; var F: TSearchRec);
gdzie zmienna Attr przyjmuje analogiczne nazwy jak delphi z tą różnicą, że nie są one poprzedzone prefiksem fa.
Nieco inne jest również podejście korzystania z owych procedur:
var
DirInfo: SearchRec;
begin
FindFirst('*.PAS', Archive, DirInfo);
while DosError = 0 do
begin
Writeln(DirInfo.Name);
FindNext(DirInfo);
end;
end.
a czego Ci brakuje???
Szkoda, że rekord TSearchRec nie został dokładnie opisany. Mam tu na myśli podrekord FindData.
Krótki i treściwy materiał. Na pewno będzie pomocny dla słabo znających angielski, a uzywających FindFirst/FindNext po raz pierwszy.