Home » Tipps & Tricks » Dateien/Verzeichnisse » Dateieigenschaften » Datei-Attribute ermitteln

Datei-Attribute ermitteln

Der Typ TSearchRec enthält nach Verwendung von FindFirst einige Dateiinformationen, so auch die Dateiattribute. Da eine Datei nicht nur ein einziges Attribut enthalten kann, sondern auch eine Kombination (z.B. schreibgeschützt und Systemdatei), legen wir einen Mengentyp aller möglichen Attribute an:

type
  TFileAttributes = set of (ReadOnly, Hidden, SysFile, VolumeId, Directory, Archive, AnyFile);

Folgende Funktion liest nun die Attribute aus der angegebenen Datei aus und erstellt eine Ergebnismenge.

function GetFileAttributes(const FileName: string): TFileAttributes;
var srec: TSearchRec;
begin
  result:=[];
  if FindFirst(FileName, faAnyFile, srec) = 0 then begin
    try
      if (srec.Attr and faReadOnly)>0 then result:=result+[ReadOnly]; //Schreibgesch. Datei
      if (srec.Attr and faHidden)>0 then result:=result+[Hidden]; //Verborgene Datei
      if (srec.Attr and faSysFile)>0 then result:=result+[SysFile]; //Systemdatei
      if (srec.Attr and faVolumeId)>0 then result:=result+[VolumeId]; //Laufwerks-ID
      if (srec.Attr and faDirectory)>0 then result:=result+[Directory]; //Verzeichnis
      if (srec.Attr and faArchive)>0 then result:=result+[Archive]; //Archivdatei
      if (srec.Attr and faAnyFile)>0 then result:=result+[AnyFile]; //Beliebige Datei
    finally
      FindClose(srec);
    end;
  end;
end;

Aufrufbeispiel:
Durch den Aufruf der obigen Funktion bekommen wir eine Menge vom Typ TFileAttributes zurück. Mit dem Operator ‚in‘ können wir nun prüfen, welche Elemente sich in der Menge befinden. Im Folgenden wird geprüft, ob die Datei schreibgeschützt ist oder nicht. Beim Aufruf ist zu beachten, dass die Win32-API ebenfalls eine Funktion mit dem Namen GetFileAttributes beinhaltet. Die Namensbereiche dürfen sich also nicht in die Quere kommen. Im Zweifelsfall benennen Sie obige Funktion um.

procedure TForm1.Button1Click(Sender: TObject);
var fa: TFileAttributes;
begin
  fa:=GetFileAttributes('d:\temp\test.bmp');
  if readonly in fa then
    ShowMessage('Datei ist schreibgeschützt')
  else
    ShowMessage('Datei ist NICHT schreibgeschützt');
end;