AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein faArchive, faSysFile is specific to a platform

faArchive, faSysFile is specific to a platform

Ein Thema von Rollo62 · begonnen am 18. Feb 2016 · letzter Beitrag vom 19. Feb 2016
Antwort Antwort
Seite 1 von 2  1 2   
Rollo62

Registriert seit: 15. Mär 2007
3.882 Beiträge
 
Delphi 12 Athens
 
#1

faArchive, faSysFile is specific to a platform

  Alt 18. Feb 2016, 16:25
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
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: faArchive, faSysFile is specific to a platform

  Alt 18. Feb 2016, 17:41
http://stackoverflow.com/questions/3...-to-a-platform

Gibt es eventuell plattformunabhängige Funktionen, die du verwenden kannst?
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.882 Beiträge
 
Delphi 12 Athens
 
#3

AW: faArchive, faSysFile is specific to a platform

  Alt 18. Feb 2016, 19:52
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#4

AW: faArchive, faSysFile is specific to a platform

  Alt 19. Feb 2016, 10:15
"blöd" ist halt, dass man bei platform nicht angeben kann, für was das gültig ist, damit die Warnung nur da kommt, wo nicht.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: faArchive, faSysFile is specific to a platform

  Alt 19. Feb 2016, 11:32
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (19. Feb 2016 um 11:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#6

AW: faArchive, faSysFile is specific to a platform

  Alt 19. Feb 2016, 12:11
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.

faArchive = $00000020 platform pfWin32 or pfWin64; so könnte man aber nur geziehlt das deaktivieren können {$WARN SYMBOL_PLATFORM_WIN32 OFF} , was für sein System uninteressant ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (19. Feb 2016 um 12:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: faArchive, faSysFile is specific to a platform

  Alt 19. Feb 2016, 12:37
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#8

AW: faArchive, faSysFile is specific to a platform

  Alt 19. Feb 2016, 12:44
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (19. Feb 2016 um 12:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: faArchive, faSysFile is specific to a platform

  Alt 19. Feb 2016, 12:51
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 faSymLink hilft dir noch nicht einmal das Merkmal Windows-Plattform.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (19. Feb 2016 um 12:54 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.882 Beiträge
 
Delphi 12 Athens
 
#10

AW: faArchive, faSysFile is specific to a platform

  Alt 19. Feb 2016, 15:19
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:01 Uhr.
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