Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Alternative zur Funktion FileGetAttr? (https://www.delphipraxis.net/199675-alternative-zur-funktion-filegetattr.html)

Andreas L. 11. Feb 2019 11:58

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:
  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;
Das funktioniert auch wunderbar. Leider erhalte ich beim Kompilieren immer folgende Meldung:

Zitat:

[DCC Warnung] DataObjects.Core.Files.pas(250): W1002 Symbol 'FileGetAttr' ist plattformspezifisch
Auch wenn es die Funktionalität nicht beeinträchtigt nervt mich die Meldung.

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:
  {$WARNINGS OFF}
  Value := FileGetAttr(AFileName);
  {$WARNINGS ON}
Wie handhabt Ihr das?

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

jaenicke 11. Feb 2019 13:30

AW: Alternative zur Funktion FileGetAttr?
 
Dafür gibt es in der Unit System.IOUtils entsprechende plattformunabhängige Methoden. In diesem Fall:
TFile.GetAttributes

Andreas L. 11. Feb 2019 14:13

AW: Alternative zur Funktion FileGetAttr?
 
Zitat:

Zitat von jaenicke (Beitrag 1425262)
Dafür gibt es in der Unit System.IOUtils entsprechende plattformunabhängige Methoden. In diesem Fall:
TFile.GetAttributes

Das gibt es leider in Delphi 2009 noch nicht. Gibt es evtl. andere Funktionen die mehr Attribute auslesen können? z. B. WinAPI-Funktionen?

hoika 11. Feb 2019 14:52

AW: Alternative zur Funktion FileGetAttr?
 
Hallo,
schreib dir deine eigene Methode als Wrapper, also in etwa so:

Delphi-Quellcode:
function MyFileGetAttr(AFileName ...);
begin
{$WARNINGS OFF}
  Result:= FileGetAttr(AFileName);
{$WARNINGS ON}
Somit musst das Warning (heisst das nicht sogar PLATFORM ?)
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.

TiGü 11. Feb 2019 15:00

AW: Alternative zur Funktion FileGetAttr?
 
Zitat:

Zitat von Andreas L. (Beitrag 1425246)
Außerdem liefert die Funktion nur ein paar von vielen Datei-Attributen. Wie kann man die anderen ermitteln?
s

Wie gehabt und du es oben machst per AND.

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);

mjustin 11. Feb 2019 15:14

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.

Uwe Raabe 11. Feb 2019 15:31

AW: Alternative zur Funktion FileGetAttr?
 
Zitat:

Zitat von Andreas L. (Beitrag 1425269)
Das gibt es leider in Delphi 2009 noch nicht.

Zitat:

Zitat von hoika (Beitrag 1425276)
Wenn du unter Windows bleibst, könntest die die Plattform-Warnungen natürlich auch global ausschalten.

Für welche Plattformen kann man nochmal unter Delphi 2009 entwickeln :gruebel:

mjustin 11. Feb 2019 16:25

AW: Alternative zur Funktion FileGetAttr?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1425280)
Zitat:

Zitat von Andreas L. (Beitrag 1425269)
Das gibt es leider in Delphi 2009 noch nicht.

Zitat:

Zitat von hoika (Beitrag 1425276)
Wenn du unter Windows bleibst, könntest die die Plattform-Warnungen natürlich auch global ausschalten.

Für welche Plattformen kann man nochmal unter Delphi 2009 entwickeln :gruebel:

Vielleicht sind diese Warnungen eine Folge der .Net 'Bemühungen' in Delphi? Frage an die Delphi-Historiker ;-)

Hauptsache, das Ausschalten funktioniert - die Warnungen erscheinen bei mir standardmäßig auch und nach dem Abschalten nicht mehr.

Delphi.Narium 11. Feb 2019 16:31

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:
uses
{$IFDEF MSWINDOWS}
  Windows,
{$ENDIF}
{$IFDEF LINUX}
  Types,
{$ENDIF}
  ...
Warum sollte man das bei Delphi 2009 alles wieder rausgeschmissen haben?

(jaja: langlangistsher ;-))

Rollo62 12. Feb 2019 12:07

AW: Alternative zur Funktion FileGetAttr?
 
Das bestätigt mich in meiner Annahme das Delphi seiner Zeit schon immer weit vorraus war :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz