Procházení souborů pomocí FindFirstFile
Rubrika: Delphi
Již delší dobu používám v DELPHI pro procházení adresářové struktury funkce FindFirstFile a FindNextFile. Získané informace o souborech totiž obsahují jak alternativní název souboru (DOS jméno) tak i informace o datu vytvoření, posledního zápisu a data posledního přístupu k souboru.
Vlastní informace o souborech a adresářích jsou reprezentovány pomocí struktury WIN32_FIND_DATA. Obě funkce FindFirstFile a FindNextFile mají jako jeden z parametrů proměnnou této struktury. V Delphi je přístupná třída TWIN32FINDDATAA a _WIN32_FIND_DATAA která reprezentuje stejnou strukturu jako již zmiňovaný WIN32_FIND_DATA. Tato struktura je definovaná následujícím způsobem:
WIN32_FIND_DATAA = record dwFileAttributes: DWORD; ftCreationTime: TFileTime; ftLastAccessTime: TFileTime; ftLastWriteTime: TFileTime; nFileSizeHigh: DWORD; nFileSizeLow: DWORD; dwReserved0: DWORD; dwReserved1: DWORD; cFileName: array[0..MAX_PATH - 1] of AnsiChar; cAlternateFileName: array[0..13] of AnsiChar; end;
A nyní již názorný příklad toho jak funkce FindFirstFile a FindNextFile použít.
procedure TForm1.FindData(aPath:string); var aHandle : dword; konec : boolean; FileD : TWIN32FINDDATAA; p : PChar; FindPath : string; iStrLen : integer; Begin if aPath<>'' then begin if not(copy(aPath,Length(aPath),1)='\') then aPath := aPath + '\' ; FindPath := aPath + '*'; iStrLen := Length (FindPath)+2; GetMem (p, iStrLen); StrPCopy (p,FindPath); aHandle := FindFirstFile( p , FileD); konec := (aHandle = INVALID_HANDLE_VALUE); while (not konec) do Begin if ((StrPas(FileD.cFileName)<>'.') AND (StrPas(FileD.cFileName)<>'..') ) then Begin if ((FileD.dwFileAttributes AND FILE_ATTRIBUTE_DIRECTORY) =FILE_ATTRIBUTE_DIRECTORY) then begin // .... Našel adresář End else begin // .... Našel soubor end; End; Application.ProcessMessages; konec := not FindNextFile (aHandle,FileD); End; Windows.FindClose(aHandle); FreeMem (p, iStrLen); end; end;
Zajisté jste si všimli, že ve smyčce WHILE je volána procedura ProcessMessages. Toto volání není sice nezbytně nutné, ale pokud provádíte ve smyčce nějaké operace s vizuálními objekty na formuláři, tato funkce zajistí jejich správné fungování (překreslení atd.).
Datum vydání: 23.01.2008 | Zobrazeno: 10455
Permanentní odkaz: Procházení souborů pomocí FindFirstFile