Zitat:
Trotz der impliziten Umwandlung in einen String akzeptiert die Format-Funktion diesen Record nicht als Parameter. Darum so:
Nja, da Format, bzw. das Open-Variant-Array "mehrere" Typen entgegennehmen kann, weiß der Compiler nicht, welchen Typen er nun genau nehmen soll (so intelligent, um nachzusehen, daß eigentlich nur der eine "String" möglich wäre, ist Delphi anscheinend leider nicht
)
War ja auch nur als Hinweis gedacht, damit sich niemand wundert
ExpandFileName/
GetFullPathName nimmt leider das aktuelle Arbeitsverzeichnis ... schön wäre es aber, wenn dein Code das Programmverzeichnis (der EXE) als Ausgangspunkt nutzen würde.
> also entweder selber Parsen
> oder das aktuelle Arbeitsverzeichnis ändern (danach natürlich wieder zurück)
- Es gibt leider nichts (zumindestens hab ich noch nichts gefunden),
welches wie GetFullPathName arbeitet und wo man selber einen Ausgangspfad angeben kann (es sei denn da wird ebenfalls geparst)
Wenn am Anfang 'A:\' bis 'Z:\' vorkommt, dann kannst du das GetCurrentDirectory/SetCurrentDirectory notfalls auch überspringen.
PS:
GetLongPathName und
GetShortPathName
Nee, eine Pfadangabe "..\Pfad\Datei.dat" bezieht sich immer und überall auf das aktuelle Arbeitsverzeichnis. Das Verhalten möchte ich nicht ändern. Finde ich immer komisch, wenn auf einem System die gleichen Parameter und Befehle ein anderes Ergebnis liefern.
Für einen relativen Bezug zum Anwendungsverzeichnis nimmt man halt
MyFileName := '$(app)\..\Pfad\Datei.dat';
Und dem Directory könnte man auch einen Enumerator verpassen, um dann voa For-In alle Dateien aufzulisten, bzw. mehrere Enumeratoren als Record-Funktion, für Dateien, Verzeichnisse und mit Parametern zur Auswahl.
das werde ich auf jeden Fall noch übernehmen
[add]
Operatoren, um _FileName und _DirName zu casten wären gut, damit dort die RAW-Werte übergeben werden und nicht über den String-Umweg diese Infos verloren gehn. Wobei man auch alles hätte in einen Typen packen können, um nicht casten zu müssen ... beim Zugriff auf Dir-Eigenschaften, bei einer Datei, einfach eine
Exception auslösen.
Öh, die sind doch drin
Delphi-Quellcode:
MyFileName := '$(app)\..\Pfad\Datei.txt';
MyDirName := MyFileName;
ShowMessage( MyDirName.Raw ); // -> $(app)\..\Pfad
MyFileName := 'Datei.txt';
MyFileName := MyDirName;
ShowMessage( MyFileName.Raw ); // -> $(app)\..\Pfad\Datei.txt
Allerdings nur bei der Record-Definition _DirName, was auch ausreicht
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)