Ich habe mich über den Unterschied zwischen \
und /
in Dateipfaden gewundert. Mir ist aufgefallen, dass manchmal ein Pfad enthält /
und manchmal mit \
.
Es wäre toll , wenn jemand erklären kann , wenn verwenden \
und /
.
Ich habe mich über den Unterschied zwischen \
und /
in Dateipfaden gewundert. Mir ist aufgefallen, dass manchmal ein Pfad enthält /
und manchmal mit \
.
Es wäre toll , wenn jemand erklären kann , wenn verwenden \
und /
.
Antworten:
/
ist das Pfadtrennzeichen auf Unix- und Unix-ähnlichen Systemen. Moderne Windows können im Allgemeinen sowohl \
als auch verwenden/
austauschbar für Dateipfade verwenden, aber Microsoft befürwortet \
seit Jahrzehnten die Verwendung als Pfadtrennzeichen .
Dies geschieht aus historischen Gründen, die bis in die 1970er Jahre zurückreichen und mehr als ein Jahrzehnt vor Windows liegen. Am Anfang unterstützte MS-DOS (die Grundlage für frühes Windows) keine Verzeichnisse. Unix hatte von /
Anfang an Verzeichnisunterstützung mit dem Zeichen. Als jedoch Verzeichnisse in MS-DOS 2.0 hinzugefügt wurden, verwendeten Microsoft und IBM das /
Zeichen bereits für Befehlsschalter , und aufgrund des leichten Parsers von DOS (der von QDOS abstammt und für die Ausführung auf Hardware der unteren Preisklasse ausgelegt ist) konnten sie keine finden Machbare Möglichkeit, den /
Charakter zu verwenden, ohne die Kompatibilität mit den vorhandenen Anwendungen zu beeinträchtigen.
Um Fehler beim "Überspringen eines Schalters" oder "ungültigen Schalter" beim Übergeben von Dateipfaden als Argumente an Befehle wie diese zu vermeiden:
cd/ <---- no switch specified
dir folder1/folder2 <---- /folder2 is not a switch for dir
Es wurde beschlossen, \
stattdessen das Zeichen zu verwenden, damit Sie diese Befehle wie folgt schreiben können
cd\
dir folder1\folder2
ohne Fehler.
Später arbeiteten Microsoft und IBM an einem Betriebssystem zusammen, das nicht mit DOS zusammenhängt und OS / 2 heißt . OS / 2 konnte beide Trennzeichen verwenden, um wahrscheinlich mehr Unix-Entwickler anzulocken. Als sich Microsoft und IBM 1990 trennten , nahm Microsoft den Code, den sie hatten, und erstellte Windows NT , auf dem alle modernen Windows-Versionen basieren, mit diesem Trennzeichen-Agnostizismus.
Da die Abwärtskompatibilität für Microsoft bei allen wichtigen Betriebssystemübergängen (DOS zu Win16 / DOS, zu Win16 / Win32, zu Win32 / WinNT) das A und O war, blieb diese Besonderheit wahrscheinlich bestehen existieren schon eine Weile.
Aus diesem Grund besteht diese Diskrepanz. Es sollte wirklich keine Auswirkung auf das haben, was Sie tun, da WinAPI sie, wie gesagt, im Allgemeinen austauschbar verwenden kann. Anwendungen von Drittanbietern werden jedoch wahrscheinlich unterbrochen, wenn Sie eine übergeben, /
wenn sie einen \
zwischen Verzeichnisnamen erwarten . Wenn Sie Windows verwenden, bleiben Sie bei \
. Wenn Sie Unix oder URIs verwenden (die ihre Grundlage in Unix-Pfaden haben, aber das ist eine ganz andere Geschichte), verwenden Sie /
.
Im Zusammenhang mit C #: Es sollte beachtet werden, da dies ist technisch gesehen eine C # Frage, dass , wenn Sie wollen mehr „tragbar“ C # -Code zu schreiben , dass die Arbeiten sowohl auf Unix und Windows (auch wenn C # überwiegend eine Windows - Sprache ist), Sie Möglicherweise möchten Sie das Path.DirectorySeparatorChar
Feld verwenden, damit Ihr Code das bevorzugte Trennzeichen auf diesem System verwendet und Path.Combine()
Pfade ordnungsgemäß anfügt.
Path.Combine
.
foo.exe /bar
dies als Befehlszeilenschalter interpretiert werden, während es sich foo.exe \bar
möglicherweise auf eine Datei / einen Ordner bezieht, die / bar
der sich im Stammverzeichnis \
des aktuellen "Laufwerks" befindet, wie C:\
zum Beispiel.
/
bis \
in der Win32-kompatiblen Schicht erfolgt, was bedeutet, dass es einen Unterschied gibt, wenn Sie sie umgehen. Das bekannteste Beispiel hierfür sind Pfade mit erweiterter Länge: \\?\C:\
Funktioniert unter NTFS wie erwartet, jedoch \\?\C:/
nicht.
/
als auch ` is not entirely true. For network path you have to use
`(z. B. \\ <Servername> Bot nicht // <Servername>)
MS-DOS 1.0 die Zeichenkonvention für Befehlszeilenoptionen (oder Schalter) von '/' von CP / M beibehalten. Zu diesem Zeitpunkt gab es keine Verzeichnisstruktur im Dateisystem und keinen Konflikt.
Als Microsoft die Unix-ähnliche Umgebung mit MS-DOS (und PC-DOS) 2.0 entwickelte, mussten sie das Pfadtrennzeichen mit etwas darstellen, das nicht mit den vorhandenen Befehlszeilenoptionen in Konflikt stand. Intern funktioniert das System mit '/' oder '\' gleich gut. Der Befehlsprozessor (und viele Anwendungen) verwendeten weiterhin das '/' als Schaltzeichen.
Ein CONFIG.SYS
Eintrag SWITCHAR=-
könnte verwendet werden, um das zu überschreiben/
Standardeinstellung zu und die Unix-Kompatibilität zu verbessern. Dadurch verwenden integrierte Befehle und Standarddienstprogramme das alternative Zeichen. Das Unix-Pfadtrennzeichen könnte dann eindeutig für Datei- und Verzeichnisnamen verwendet werden. Dieser Eintrag wurde in späteren Versionen entfernt, aber ein DOS-Aufruf wurde dokumentiert, um den Wert nach dem Booten festzulegen.
Dies wurde wenig genutzt und die meisten Tools von Drittanbietern blieben unverändert. Die Verwirrung bleibt bestehen. Viele Ports von Unix-Tools behalten den Schaltercharakter '-' bei, während einige beide Konventionen unterstützen.
Der nachfolgende PowerShell-Befehlsprozessor implementiert strenge Escape- und Switch-Parameter und vermeidet die Verwirrung weitgehend, außer wenn ältere Tools verwendet werden.
Weder die Frage noch die Antwort beziehen sich auf C #.
/
eines Optionseinführers in verschiedenen PDP-11-Betriebssystemen wie RSTS (1970) und RSX (1972) der in CP / M (1973) voraus.
Auf Unix-basierten Systemen \
ist ein Escape-Zeichen, das \
dem Parser mitteilt, dass dies ein Leerzeichen und nicht das Ende der Anweisung ist. Auf Unix-Systemen/
ist das Verzeichnistrennzeichen.
Unter Windows \
ist das Verzeichnistrennzeichen, das /
jedoch nicht in Datei- oder Verzeichnisnamen verwendet werden kann.
\
und /
(sowie mehrere andere Symbole) können nicht in Dateinamen verwendet werden, da DOS nicht den gleichen komplexen Parser hatte, den Unix-Benutzer so gewohnt sind. Das Fehlen eines guten Parsers war das Ergebnis einer Abstammung von MS-DOS von QDOS ("Quick and Dirty Operating System"). Es sollte die Dinge schnell und auf begrenzter Hardware zum Laufen bringen. All dies existiert natürlich noch heute aus Gründen der Abwärtskompatibilität.
/
als "Alternate_Directory_Separator" hinzugefügt wurde
\
ist in einem Windows-Dateipfad /
korrekt und in einem URI korrekt.Dies kann eine relevante Ressource sein.
\
um /
automatisch. In meinem Buch heißt das "funktioniert nahtlos".
Neben den gegebenen Antworten ist zu erwähnen, dass diese \
häufig für Sonderzeichen (z. B. \n
\t
) in Programmiersprachen, Texteditoren und allgemeinen Systemen verwendet werden, die lexikalische Analysen anwenden.
Wenn Sie beispielsweise programmieren, ist es manchmal unpraktisch, sogar einen Backslash mit einem anderen ( \\
) zu umgehen, um ihn ordnungsgemäß zu verwenden - oder Escape- Zeichenfolgen wie C # zu verwenden @"\test"
.
Wie bereits erwähnt, verwenden Web-URIs standardmäßig Schrägstriche Beide Schrägstriche funktionieren jedoch in den neuesten und gebräuchlichsten Befehlszeilentools.
UPDATE: Nach einigem Suchen scheint die ganze Geschichte zwischen /
und \
in der "Computergeschichte", im Zeitalter von DOS und den Unix-basierten Systemen zu dieser Zeit, zurück zu gehen. HowToGeek hat einen interessanten Artikel über diese Geschichte.
Kurz gesagt, DOS 1.0 wurde ursprünglich von IBM ohne Verzeichnisunterstützung veröffentlicht und /
für eine andere ("Switching") Befehlsfunktionalität verwendet. Als Verzeichnisse in der Version 2.0 eingeführt wurden, /
wurde sie bereits verwendet, sodass IBM das visuell am nächsten liegende Symbol auswählte \
. Auf der anderen Seite wird Unix standardmäßig /
für Verzeichnisse verwendet.
Als Benutzer anfingen, viele verschiedene Systeme zu verwenden, wurden sie verwirrt und veranlassten die Betriebssystementwickler, in beiden Fällen zu versuchen, die Systeme zum Laufen zu bringen. Dies gilt sogar für URLs, da einige Browser den http: \\ www.test unterstützen. com \ go Format. Dies hatte zwar im Allgemeinen Nachteile, aber das Ganze steht heute noch aus Gründen der Abwärtskompartibilität, mit dem Versuch, beide Schrägstriche unter Windows zu unterstützen, obwohl sie nicht mehr auf DOS basieren.
` as well as many
make`-Shells verwenden ... Sie haben Recht, dass Windows kürzlich die Umgebungsvariable ALTERNATE_PATH_SEPARATOR definiert hat, die standardmäßig verwendet wird, sodass /
Windows wahrscheinlich beide akzeptieren kann.
/
Pfaden überall im System - natürlich konnten Anwendungen diese Pfade nach Belieben missverstehen, sodass sie nicht zu häufig verwendet wurden. Nicht-CLI-Anwendungen, die nicht versucht haben, ihre eigene (fehlerhafte) Validierung von Pfaden durchzuführen, funktionierten von Anfang an einwandfrei.
Sie sollten auch nicht in C # verwenden. Sie sollten immer die Path
Klasse verwenden . Diese enthält eine Methode namens Path.Combine
, mit der Pfade erstellt werden können, ohne das Trennzeichen selbst anzugeben.
Anwendungsbeispiel:
string fullPath = System.IO.Path.Combine("C:", "Folder1", "Folder2", "file.txt");
\
wird für lokale Windows-Dateipfade und Netzwerkpfade wie folgt verwendet:
C:\Windows\Temp\
oder \\NetworkSharedDisk\Documents\Archive\
/
ist das, was von Standard-URIs wie folgt verlangt wird:
/
in Pfaden (mindestens 7).
/
in Standard-URIs zu veranschaulichen, wie ich in der Antwort angegeben habe.