![]() |
Alternative zur Funktion FileGetAttr?
Hallo Leute,
ich verwende die Funktion FileGetAttr um (wie soll es sonst sein) die Attribute einer Datei zu ermitteln. Der Code ist einfach:
Delphi-Quellcode:
Das funktioniert auch wunderbar. Leider erhalte ich beim Kompilieren immer folgende Meldung:
Value := FileGetAttr(AFileName);
Result := Value <> -1; if not Result then Exit; FReadyOnly := (Value and faReadOnly) = faReadOnly; FArchive := (Value and faArchive) = faArchive; FHidden := (Value and faHidden) = faHidden; FSystem := (Value and faSysFile) = faSysFile; FNormal := (Value and faNormal) = faNormal; FTemporary := (Value and faTemporary) = faTemporary; Zitat:
Verwendet Ihr auch diese Funktion oder gibt es eine Alternative bei der die Meldung nicht erscheint? Oder soll ich einfach die Meldung mittels Compiler-Schalter unterdrücken?
Delphi-Quellcode:
Wie handhabt Ihr das?
{$WARNINGS OFF}
Value := FileGetAttr(AFileName); {$WARNINGS ON} Außerdem liefert die Funktion nur ein paar von vielen Datei-Attributen. Wie kann man die anderen ermitteln? Schöne Grüße und vielen Dank, Andreas |
AW: Alternative zur Funktion FileGetAttr?
Dafür gibt es in der Unit System.IOUtils entsprechende plattformunabhängige Methoden. In diesem Fall:
![]() |
AW: Alternative zur Funktion FileGetAttr?
Zitat:
|
AW: Alternative zur Funktion FileGetAttr?
Hallo,
schreib dir deine eigene Methode als Wrapper, also in etwa so:
Delphi-Quellcode:
Somit musst das Warning (heisst das nicht sogar PLATFORM ?)
function MyFileGetAttr(AFileName ...);
begin {$WARNINGS OFF} Result:= FileGetAttr(AFileName); {$WARNINGS ON} nicht an tausend Stellen machen und musst beim Umstieg auf eine neuere Version nur eine Stelle ändern. Wenn du unter Windows bleibst, könntest die die Plattform-Warnungen natürlich auch global ausschalten. |
AW: Alternative zur Funktion FileGetAttr?
Zitat:
Hier die anderen Werte aus Delphi Tokyo:
Delphi-Quellcode:
FILE_SHARE_READ = $00000001;
{$EXTERNALSYM FILE_SHARE_READ} FILE_SHARE_WRITE = $00000002; {$EXTERNALSYM FILE_SHARE_WRITE} FILE_SHARE_DELETE = $00000004; {$EXTERNALSYM FILE_SHARE_DELETE} FILE_ATTRIBUTE_READONLY = $00000001; {$EXTERNALSYM FILE_ATTRIBUTE_READONLY} FILE_ATTRIBUTE_HIDDEN = $00000002; {$EXTERNALSYM FILE_ATTRIBUTE_HIDDEN} FILE_ATTRIBUTE_SYSTEM = $00000004; {$EXTERNALSYM FILE_ATTRIBUTE_SYSTEM} FILE_ATTRIBUTE_DIRECTORY = $00000010; {$EXTERNALSYM FILE_ATTRIBUTE_DIRECTORY} FILE_ATTRIBUTE_ARCHIVE = $00000020; {$EXTERNALSYM FILE_ATTRIBUTE_ARCHIVE} FILE_ATTRIBUTE_DEVICE = $00000040; {$EXTERNALSYM FILE_ATTRIBUTE_DEVICE} FILE_ATTRIBUTE_NORMAL = $00000080; {$EXTERNALSYM FILE_ATTRIBUTE_NORMAL} FILE_ATTRIBUTE_TEMPORARY = $00000100; {$EXTERNALSYM FILE_ATTRIBUTE_TEMPORARY} FILE_ATTRIBUTE_SPARSE_FILE = $00000200; {$EXTERNALSYM FILE_ATTRIBUTE_SPARSE_FILE} FILE_ATTRIBUTE_REPARSE_POINT = $00000400; {$EXTERNALSYM FILE_ATTRIBUTE_REPARSE_POINT} FILE_ATTRIBUTE_COMPRESSED = $00000800; {$EXTERNALSYM FILE_ATTRIBUTE_COMPRESSED} FILE_ATTRIBUTE_OFFLINE = $00001000; {$EXTERNALSYM FILE_ATTRIBUTE_OFFLINE} FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = $00002000; {$EXTERNALSYM FILE_ATTRIBUTE_NOT_CONTENT_INDEXED} FILE_ATTRIBUTE_ENCRYPTED = $00004000; {$EXTERNALSYM FILE_ATTRIBUTE_ENCRYPTED} FILE_ATTRIBUTE_VIRTUAL = $00010000; {$EXTERNALSYM FILE_ATTRIBUTE_VIRTUAL} {$EXTERNALSYM INVALID_FILE_ATTRIBUTES} INVALID_FILE_ATTRIBUTES = DWORD($FFFFFFFF); |
AW: Alternative zur Funktion FileGetAttr?
Wenn man nur für eine Plattform entwickelt kann man im Projekt unter Hinweise und Warnungen die Warnungen für plattformspezifische Symbole und Units ausschalten.
|
AW: Alternative zur Funktion FileGetAttr?
Zitat:
Zitat:
|
AW: Alternative zur Funktion FileGetAttr?
Zitat:
Hauptsache, das Ausschalten funktioniert - die Warnungen erscheinen bei mir standardmäßig auch und nach dem Abschalten nicht mehr. |
AW: Alternative zur Funktion FileGetAttr?
Diese Meldungen bekommt man mit Delphi 7 auch schon, damit man ggfls. kompatibel mit Kylix für Unix programmieren kann.
Durch die Delphisoucen von Delphi 7 ziehen sich solche Konstrukte:
Delphi-Quellcode:
Warum sollte man das bei Delphi 2009 alles wieder rausgeschmissen haben?
uses
{$IFDEF MSWINDOWS} Windows, {$ENDIF} {$IFDEF LINUX} Types, {$ENDIF} ... (jaja: langlangistsher ;-)) |
AW: Alternative zur Funktion FileGetAttr?
Das bestätigt mich in meiner Annahme das Delphi seiner Zeit schon immer weit vorraus war :stupid:
|
AW: Alternative zur Funktion FileGetAttr?
Die Platform-Warnungen wurden mit Delphi 6 (wegen Kylix 1) eingeführt, zusammen mit:
|
AW: Alternative zur Funktion FileGetAttr?
Also es gibt noch zwei offizielle direkt windowsspezifische Versionen. Einmal mit
![]() ![]() ![]() Wenn du also bspw. ohnehin Dateien listest, bist du mit den letzten beiden am besten bedient. Bei GetFileAttributes wird es langsam, sobald man die Attribute vieler Dateien auflistet. Der Grund ist einfach: GetFileAttributes benutzt den Namen um zur Datei zu kommen. Bei FindFirstFile/FindNextFile hingegen wird das Elternverzeichnis bemüht und die Attribute sind ohnehin eigentlich immer dabei (siehe NtQueryDirectoryFile). Kommt halt auf die Ziele an. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz