Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   faArchive, faSysFile is specific to a platform (https://www.delphipraxis.net/188308-faarchive-fasysfile-specific-platform.html)

Rollo62 18. Feb 2016 15:25

faArchive, faSysFile is specific to a platform
 
Hallo zusammen,

die Fileattribute sind Platformspezifisch, so wie so gut.

Delphi-Quellcode:
  faInvalid    = -1;
  faReadOnly   = $00000001;
  faHidden     = $00000002 platform; // only a convention on POSIX
  faSysFile    = $00000004 platform; // on POSIX system files are not regular files and not directories
  faVolumeID   = $00000008 platform deprecated; // not used in Win32
  faDirectory  = $00000010;
  faArchive    = $00000020 platform;
  faNormal     = $00000080;
  faTemporary  = $00000100 platform;
  faSymLink    = $00000400 platform; // Available on POSIX and Vista and above
  faCompressed = $00000800 platform;
  faEncrypted  = $00004000 platform;
  faVirtual    = $00010000 platform;
  faAnyFile    = $000001FF;
Aber wen kann die Kommentare ergänzen für die restlichen Attribute ?
Bedeutet Platform immer MsWindows ?

Ich würde das gerne beim Aufruf auskommentieren, damit die blöden Warnings weg sind,
bin mir aber nicht sicher ob das nicht doch zuviel des Guten bei OSX, Android oder iOS etc. ist.

So in der Art:
Delphi-Quellcode:
  faInvalid
  , faReadOnly
{$IF   DEFINED(OSX) or DEFINED(ANDROID)} // ist ANDROID Posix ???
  , faHidden  // only a convention on POSIX
{$ENDIF DEFINED(OSX) or DEFINED(ANDROID)}
  , faSysFile // on POSIX system files are not regular files and not directories
{$IF   DEFINED(MSWINDOWS)}
  , faVolumeID // not used in Win32
{$ENDIF DEFINED(MSWINDOWS)}
  , faDirectory
{$IF   DEFINED(MSWINDOWS)}
  , faArchive
{$ENDIF DEFINED(MSWINDOWS)}
  , faNormal
  , faTemporary  //???
  , faSymLink    //???
  , faCompressed //???
  , faEncrypted  //???
  , faVirtual    //???
  , faAnyFile
Kennt sich vielleicht jemand damit aus und hat einen Tip wo man findet was "platform" wirklich bedeutet ?

Rollo

bra 18. Feb 2016 16:41

AW: faArchive, faSysFile is specific to a platform
 
http://stackoverflow.com/questions/3...-to-a-platform

Gibt es eventuell plattformunabhängige Funktionen, die du verwenden kannst?

Rollo62 18. Feb 2016 18:52

AW: faArchive, faSysFile is specific to a platform
 
Hallo bra,

ja dankesehr, Warnings ausschalten geht auch.

Ich hatte das schon gefunden aber so verstanden das es nur fürs ganze Unit geht.
Aber im StackOverflow sieht es so aus das man auch bestimmte Bereiche ausschalten kann.

Werds morgen mal ausprobieren.

Rollo

himitsu 19. Feb 2016 09:15

AW: faArchive, faSysFile is specific to a platform
 
"blöd" ist halt, dass man bei
Delphi-Quellcode:
platform
nicht angeben kann, für was das gültig ist, damit die Warnung nur da kommt, wo nicht.

Sir Rufo 19. Feb 2016 10:32

AW: faArchive, faSysFile is specific to a platform
 
Blöd ist es überhaupt nicht.

Es gibt so einige Dinge, die man im Code veranstalten kann, die aber unter bestimmten Umständen ein seltsames oder anderes Verhalten an den Tag legen.
Delphi-Quellcode:
var
  aStr: AnsiString;
  uStr: UnicodeString;

aStr := uStr; // <- Warnung
Will ich diese Warnung wegbekommen, dann schreibt man
Delphi-Quellcode:
var
  aStr: AnsiString;
  uStr: UnicodeString;

aStr := AnsiString( uStr ); // <- keine Warnung
Jetzt sollte ich dem Compiler damit nicht gesagt haben
Zitat:

LMAA
sondern
Zitat:

Ich bin mir völlig bewusst, dass es zu einem Datenverlust kommen könnte, aber ich kann gewährleisten, dass es nicht dazu kommt (alle Zeichen sind auch mit ANSI darstellbar), bzw. der Datenverlust ist hier unerheblich und wird die Funktion des Programms nicht beeinflussen.
Mit den FileAttributes verhält sich das genauso - nur muss man hier eben an der entsprechenden Codestelle die Warnung ab- und direkt danach wieder einschalten. In der Regel wird man das dann so implementieren
Delphi-Quellcode:
{$IFDEF MSWINDOWS}
{$WARN SYMBOL_PLATFORM OFF}

// Jetzt die entsprechenden Attribute verwenden

{$WARN SYMBOL_PLATFORM ON}
{$ELSE}
  raise ENotImplementedException.Create( 'Das soll wer anders machen :o)' );
{$ENDIF}
Dadurch dokumentiert man, dass man sich mit der Plattform Windows auseinander gesetzt hat. Alle anderen Plattformen sind nicht berücksichtigt und müssten (wenn die dort verwendet werden sollen) nochmal genau geprüft werden.

himitsu 19. Feb 2016 11:11

AW: faArchive, faSysFile is specific to a platform
 
Zitat:

Zitat von Sir Rufo (Beitrag 1330804)
Blöd ist es überhaupt nicht.

Doch.

Wenn ich nur z.B. (aktuell) für Windows programmiere, dann sind diese Meldungen vollkommen fehl am Platz, da sie "mein" System nicht betreffen.
"Warnungen" nun abzuschalten ist hier auch die falsche Lösung, denn dann bekomm ich da keine Meldungen mehr, wo sie mich betreffen.

Delphi-Quellcode:
faArchive = $00000020 platform pfWin32 or pfWin64;
so könnte man aber nur geziehlt das deaktivieren können
Delphi-Quellcode:
{$WARN SYMBOL_PLATFORM_WIN32 OFF}
, was für sein System uninteressant ist.

Sir Rufo 19. Feb 2016 11:37

AW: faArchive, faSysFile is specific to a platform
 
Das ist die Sichtweise, wenn man nur auf sich schaut "Ich mach doch nur für Windows!".

Delphi ist aber nun mal für Multi-Plattform ausgelegt. Und wenn ich Code einfach so schreibe, dann weist mich der Compiler an den entsprechenden Stellen darauf hin, dass ich mir hier gerade eine Plattform-Einschränkung ins Nest gesetzt habe.

Der Compiler kann nicht wissen, dass man diesen Teil des Codes nie niemals nicht auf einer anderen Plattform als der aktuell gewählten einsetzen wird.

Darum weist er einen darauf hin, darum kann man dem Compiler das mitteilen, indem man die Plattform einschränkt und darinnen dann die Warnung ausschaltet.

himitsu 19. Feb 2016 11:44

AW: faArchive, faSysFile is specific to a platform
 
Zitat:

Zitat von Sir Rufo (Beitrag 1330810)
Der Compiler kann nicht wissen

Der muß der auch nicht wissen.

Der Komponentenentwickler gibt bei seinem Code an wofür und ich bei meinem Code auch, im Prinzip jetzt auch schon, durch Auswahl der Zielplattform, aber wenn ich multiplatform arbeite, dann gebe ich alle Ziele an und würde dann erfahren, wenn der Code irgendwo zicken macht, aber eben nur da, wo es nötig ist.

Sir Rufo 19. Feb 2016 11:51

AW: faArchive, faSysFile is specific to a platform
 
Dann arbeitest du mit einem anderen Delphi als ich.

Bei mir wird nicht in jeder Unit automatisch mitgeführt für welche Plattform das geschrieben wurde. Ich muss da immer diese Compilerschalter setzen.

Wo gibt es deine Version?

BTW: bei
Delphi-Quellcode:
faSymLink
hilft dir noch nicht einmal das Merkmal Windows-Plattform.

Rollo62 19. Feb 2016 14:19

AW: faArchive, faSysFile is specific to a platform
 
Das Problem ist doch das

Delphi-Quellcode:
  , faSysFile // on POSIX system files are not regular files and not directories
{$IF   DEFINED(MSWINDOWS)}
  , faVolumeID // not used in Win32
{$ENDIF DEFINED(MSWINDOWS)}
es etwas unter Windows geben kann was es unter Posix gar nicht gibt und umgekehrt, und was sich womöglich in 3 Jahren auch mal wieder ändern kann.
Oder das Posix sich ander benimmt als Windows oder Android.

Weil mir zumindest nicht klar ist was wo verfügbar ist finde ich die Lösung alle Warnings abzuschalten gar nicht schlecht.
Dann kracht es zumindest wenn sich sonstwas ändert.

Wenn ich es aber wie obern mit IFDEF auskommentiere habe ich keine Chance einen echten Kompilererror zu bekommen
falls sich da mal was ändert.
Ich weiss die Wahrscheinlichkeit ist eher gering das sich was ändert, aber gerade deswegen
(da hatte nieeeeeemand dran gedacht das es jetzt eine VolumeID auch unter Windows gibt,
oder das wenn man fsSysFile oder SymLink unter Linux (kommt bald) benutzt kracht der ganze Rechner zusammen ...).

Nur bräuchte ich diese Hinweise das es eben irgendwie unsauber ist nicht ständig auf dem Schirm,
deswegen wollte ich das ja beim Aufruf per IFDEF ausklammern.

Vielleicht ist es auch einfach besser wenn Emba "platform" ganz wegzulassen würde, und es einfach nur die
richtigen, möglichen Zustände für die jeweilige Platform angeben würde.
Dann wüsste man auch gleich woran es liegt wenn was nicht geht.

Egal wie man es macht, ich könnte mir immer eine Situation vorstellen wie es in die Hose geht ...

Rollo


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 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