Datei-Attribute ermitteln |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
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:
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.
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.
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;