Discussion:
Slash vs Backslash
(zu alt für eine Antwort)
Lothar Planitzer
2016-07-25 10:50:50 UTC
Permalink
Hallo,

gerade habe ich durch Zufall festgestellt, dass Die Funktion SysUtils.Fileexists
auch dann true zurückgibt (Delphi 4), wenn der Filename Slash ('/') anstatt
Backslash ('\') als 'DirSeparator' enthält, und zwar auch dann, wenn beide in
einem Pfadnamen gemischt auftreten. Ist dieses Verhalten irgendwo dokumentiert?
Ich hatte bisher immer gedacht, dass der Slash unter DOS/Windows als 'forbidden
character' in Filenamen gilt.

Gruß Lothar
Hans-Peter Diettrich
2016-07-25 12:32:38 UTC
Permalink
Post by Lothar Planitzer
Hallo,
gerade habe ich durch Zufall festgestellt, dass Die Funktion
SysUtils.Fileexists auch dann true zurückgibt (Delphi 4), wenn der
Filename Slash ('/') anstatt Backslash ('\') als 'DirSeparator' enthält,
und zwar auch dann, wenn beide in einem Pfadnamen gemischt auftreten.
Das ist richtig.
Post by Lothar Planitzer
Ist dieses Verhalten irgendwo dokumentiert?
Vermutlich ja ;-)
Post by Lothar Planitzer
Ich hatte bisher immer
gedacht, dass der Slash unter DOS/Windows als 'forbidden character' in
Filenamen gilt.
Eine Pfadangabe *ist kein* Dateiname, sie *enthält* nur einen
Dateinamen, und zwar das ist der Teil, der auf den letzten '\' oder '/'
folgt. Wenn also der Dateiname einen '/' enthalten würde, dann könnte
der Anfang des Dateinamens nicht mehr richtig gefunden werden.

Technisch gesehen gibt es keinen Unterschied zwischen Datei- und
Verzeichnisnamen, beide werden in der Verzeichnisstruktur auf einem
Datenträger gleich gespeichert, ohne Separatoren. Die Separatoren werden
erst dann benötigt, wenn jemand einen Zugriffspfad aus Verzeichnis- und
Dateinamen zusammensetzt. Entsprechend muß so eine Pfadangabe auch
wieder zerlegt werden, wenn sich das System durch eine
Verzeichnisstruktur über alle Verzeichnis-Einträge bis zum Datei-Eintrag
durchhangeln soll.


Die Verwirrung um Slash und Backslash resultiert aus dem mißlungenen
Versuch von Microsoft, einen eigenen Standard für
Verzeichnis-Separatoren einzuführen. Da sich insbesondere das Internet
nicht daran gehalten hat, mußte die ursprüngliche Beschränkung auf den
Backslash wieder aufgehoben werden, und beim Parsen einer Pfadangabe
zähneknirschend auf beide Separator-Zeichen Rücksicht genommen werden :-]

DoDi
Lothar Planitzer
2016-07-25 16:13:06 UTC
Permalink
Eine Pfadangabe *ist kein* Dateiname, sie *enthält* nur einen Dateinamen, und
zwar das ist der Teil, der auf den letzten '\' oder '/' folgt. Wenn also der
Dateiname einen '/' enthalten würde, dann könnte der Anfang des Dateinamens
nicht mehr richtig gefunden werden.
Technisch gesehen gibt es keinen Unterschied zwischen Datei- und
Verzeichnisnamen, beide werden in der Verzeichnisstruktur auf einem Datenträger
gleich gespeichert, ohne Separatoren. Die Separatoren werden erst dann benötigt,
wenn jemand einen Zugriffspfad aus Verzeichnis- und Dateinamen zusammensetzt.
Entsprechend muß so eine Pfadangabe auch wieder zerlegt werden, wenn sich das
System durch eine Verzeichnisstruktur über alle Verzeichnis-Einträge bis zum
Datei-Eintrag durchhangeln soll.
Die Verwirrung um Slash und Backslash resultiert aus dem mißlungenen Versuch von
Microsoft, einen eigenen Standard für Verzeichnis-Separatoren einzuführen. Da
sich insbesondere das Internet nicht daran gehalten hat, mußte die ursprüngliche
Beschränkung auf den Backslash wieder aufgehoben werden, und beim Parsen einer
Pfadangabe zähneknirschend auf beide Separator-Zeichen Rücksicht genommen werden
Hallo,

das alles ist durchaus nachvollziehbar und einleuchtend. Leider ist Delphi
(zumindest mein altes Delphi 4) hier ziemlich inkonsequent. ExtractFileName,
ExtractFilePath und ExtractFileDir funktionieren nur mit dem Backslash. Der
'normale' Slash wird nicht als Separator erkannt :-(

Gruß Lothar

Loading...