FileGetAttr

Adam Boduch
FileGetAttr
Moduł: SysUtils
```delphi function FileGetAttr(const FileName: string): Integer; ``` [[Delphi/Funkcje|Funkcja]] pobiera atrybuty pliku podanego w parametrze FileName. Atrybuty zwracane są jako ciąg bitów, więc sposób ich odczytu jest dość "specyficzny" (patrz przykład poniżej). Do ustawiania atrybutów danego pliku służy funkcja [[Delphi/FileSetAttr]].

Przykład odczytu atrybutów wskazanego pliku:

program Foo;

{$APPTYPE CONSOLE}

uses
  SysUtils, Dialogs;

var
  FileName : String;
  Attr : Integer;
begin
  if PromptForFileName(FileName) then
  begin
    Attr := FileGetAttr(FileName);

    Writeln('faReadOnly: ', (Attr and faReadOnly) = faReadOnly);
    Writeln('faArchive: ', (Attr and faArchive) = faArchive);
    Writeln('faSysFile: ', (Attr and faSysFile) = faSysFile);
    Writeln('faHidden: ', (Attr and faHidden) = faHidden);
    Writeln('faDirectory: ', (Attr and faDirectory) = faDirectory);
    Readln;
  end;
end.

Stałe takie jak np. faReadOnly zadeklarowane są w module SysUtils, ich pełna lista znajuje się w tabeli poniżej.

Nazwa stałejWartośćOpis
faReadOnly1Pliki tylko do oczytu
faHidden2Ukryte pliki
faSysFile4Pliki systemowe
faDirectory16Katalogi
faArchive32Plik archiwalny
faSymLink64Link symboliczny
faAnyFile64Dowolny plik

Zobacz też:

2 komentarzy

No racja. Trzeba to uaktualnić zwłaszcze że w Delphi 2010 dalej jest błąd z faAnyFile. Zamiast stosować faAnyFile można użyć wartości #FFFFFF. Wtedy przy szukaniu plików pod Vistą, procka będzie zwracać wszystkie pliki.

Nie wiem jak jest pod Windows XP ale pod Windows 98 atrybut Dowolny plik ma wartość 0 a nie 64. Sprawdziłem i miałem ustawiony tylko atrybut Tylko do odczytu i używając SetFileAttributes(PChar(FileName),64) nie udało mi się usunąć tego atrybutu. Pomogło dopiero
SetFileAttributes(PChar(FileName),0); Jeśli mam rację to niech ktoś wyedytuje artykuł (ja się za to nie zabieram bo nie wiem jak jest pod Windows XP).