![]() |
faArchive, faSysFile is specific to a platform
Hallo zusammen,
die Fileattribute sind Platformspezifisch, so wie so gut.
Delphi-Quellcode:
Aber wen kann die Kommentare ergänzen für die restlichen Attribute ?
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; 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:
Kennt sich vielleicht jemand damit aus und hat einen Tip wo man findet was "platform" wirklich bedeutet ?
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 Rollo |
AW: faArchive, faSysFile is specific to a platform
![]() Gibt es eventuell plattformunabhängige Funktionen, die du verwenden kannst? |
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 |
AW: faArchive, faSysFile is specific to a platform
"blöd" ist halt, dass man bei
Delphi-Quellcode:
nicht angeben kann, für was das gültig ist, damit die Warnung nur da kommt, wo nicht.
platform
|
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:
Will ich diese Warnung wegbekommen, dann schreibt man
var
aStr: AnsiString; uStr: UnicodeString; aStr := uStr; // <- Warnung
Delphi-Quellcode:
Jetzt sollte ich dem Compiler damit nicht gesagt haben
var
aStr: AnsiString; uStr: UnicodeString; aStr := AnsiString( uStr ); // <- keine Warnung Zitat:
Zitat:
Delphi-Quellcode:
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.
{$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} |
AW: faArchive, faSysFile is specific to a platform
Zitat:
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:
so könnte man aber nur geziehlt das deaktivieren können
faArchive = $00000020 platform pfWin32 or pfWin64;
Delphi-Quellcode:
, was für sein System uninteressant ist.
{$WARN SYMBOL_PLATFORM_WIN32 OFF}
|
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. |
AW: faArchive, faSysFile is specific to a platform
Zitat:
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. |
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:
hilft dir noch nicht einmal das Merkmal Windows-Plattform.
faSymLink
|
AW: faArchive, faSysFile is specific to a platform
Das Problem ist doch das
Delphi-Quellcode:
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.
, faSysFile // on POSIX system files are not regular files and not directories
{$IF DEFINED(MSWINDOWS)} , faVolumeID // not used in Win32 {$ENDIF DEFINED(MSWINDOWS)} 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 21:53 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 by Thomas Breitkreuz