![]() |
Delphi-Version: 5
ExcludeTrailingPathDelimiter defekt
Wieso liefert ExcludeTrailingBackslash/ExcludeTrailingPathDelimiter seit Jahrzehnten ein falschs Ergebnis für Root-Verzeichnisse?
Delphi-Quellcode:
ExtractPath('D:\aaa\bbb') = 'D:\aaa\'
ExtractDir('D:\aaa\bbb') = 'D:\aaa' ExcludeTrailingPathDelimiter('D:\aaa\') = 'D:\aaa' ExtractPath('D:\aaa') = 'D:\' ExtractDir('D:\aaa') = 'D:\' ExcludeTrailingPathDelimiter('D:\') = 'D:' // So, nun ist das plötzlich ein relativer Pfad, obwohl er vorher absolut war. ExtractFileDir(IncludeTrailingPathDelimiter('D:\') + 'dummy') = 'D:\' // bescheuertste Lösung |
AW: ExcludeTrailingPathDelimiter defekt
Der liefert doch nicht das falsche Ergebnis ... sondern da passiert genau das, was der Name verspricht :stupid:
(Du erwartest da etwas anderes, das mag sein ... allerdings lässt der Name nicht hoffen, dass du hier mit deiner Erwartung richtig liegst) |
AW: ExcludeTrailingPathDelimiter defekt
Es geht auch andersrum zu Argumentieren.
* das Ding soll "nur" den "abschließenden" Delimiter entfernen, also den Letzten * der erste "Delimiter" ist aber kein Delimiter zwischen zwei Verzeichnisnamen, sondern er gibt die Relation an :stupid: und schon stimmt der Funktionsname dennoch. OK, beim alten ExcludeTrailingBackslash sah das noch anders aus.
Delphi-Quellcode:
?
ExcludeTrailingPathDelimiter(ExtractFilePath('C:\dir\dat.ei')) = ExtractFileDir('C:\dir\dat.ei')
|
AW: ExcludeTrailingPathDelimiter defekt
Der PathDelimiter ist der übergeordnete Begriff für Backslash - das ist der PathDelimiter unter Windows.
Also sollten beide unter Windows exakt gleich arbeiten. Wenn du
Delphi-Quellcode:
richtig deutest, dann sollte das mit
ExcludeTrailingBackslash
Delphi-Quellcode:
jetzt auch funktionieren :stupid:
ExcludeTrailingPathDelimiter
Oder mal anders gesagt: Diese Funktionen entfernen bei einem string das letzt Zeichen, wenn es sich hierbei um den PathDelimiter (Backslash) handelt. Mehr gibt die Bezeichnung auch nicht her. Da wird nichts weiter interpretiert.
Delphi-Quellcode:
bzw.
ExtractPath
Delphi-Quellcode:
interpretieren den Wert dagegen schon hinsichtlich des Root-Eintrags.
ExtractDir
|
AW: ExcludeTrailingPathDelimiter defekt
Zitat:
Unter Windows sind \ und / als Pfadtrennzeichen gleichberechtigt. z.B.: C:\DIR\DAT.EI wird von Windows genauso interpretiert wie: C:/DIR/DAT.EI oder auch C:\/////\\\\\DIR/////\/\DAT.EI |
AW: ExcludeTrailingPathDelimiter defekt
Das ist doch nicht schlimm ...
... Delphi hängt unter Windows den Backslash als PathDelimiter dran. |
AW: ExcludeTrailingPathDelimiter defekt
Das Problem ist halt, dass C:\DIR\DAT.EI nicht gleich C:DIR\DAT.EI ist, bzw. C: ist nicht C:\
Denn der erste "Pathdelimiter" hat halt eine etwas "andere" Funktion. Genau so, wie bei einer URL die ersten beiden // auch keine Pathdelimiter sind, bzw. die gehören nichtmal zum Pfad. (sind quasi die Trennzeichen zwischen Protokoll und Pfad/Daten) |
AW: ExcludeTrailingPathDelimiter defekt
Wenn man es ganz genau nimmt, dann gibt es ein (oder mehrere) Zeichen, die ein PathDelimiter sind.
Das ist einfach mal so. Jetzt gibt es aber für diese PathDelimiter innerhalb eines bestimmten Kontext unterschiedliche Bedeutungen. Diese Bedeutungen erschließen sich allerdings auch erst durch den Kontext und nicht einfach durch eine einzelne Betrachtung des Zeichens. Da
Delphi-Quellcode:
und
IncludeTrailingPathDelimiter
Delphi-Quellcode:
diesen Kontext nicht beachten du aber etwas benötigst, dass den Kontext beachtet gilt schon mal Folgendes:
IncludeTrailingBackslash
Zitat:
|
AW: ExcludeTrailingPathDelimiter defekt
Ich würde SirRufo zustimmen: Vom Namen her ist das Ding ist eine Stringfunktion, die nichts über Semantik weiß.
Der ![]() |
AW: ExcludeTrailingPathDelimiter defekt
Nun, eine Standardverwendung ist z.B. Zum Zusammenbauen eines Verzeichnis-Strings.
Wenn die Funktionen da nicht immer gleich funktionieren würden, kämen ggf. Verzeichnisse mit doppelten Pfadtrennzeichen usw. heraus. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 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-2025 by Thomas Breitkreuz