2010-01-01 8 views
15

Beim Schreiben von Dateipfaden in C# habe ich festgestellt, dass ich entweder "C: \" oder "C: /" schreiben kann und den gleichen Pfad bekomme. Welcher wird empfohlen? Ich habe irgendwo gehört, dass die Verwendung eines einzelnen/mehr empfohlen wurde als die Verwendung von \ (mit \ als Escape-Sequenz).Verwenden von/oder \ für Ordnerpfade in C#

+0

Vielen Dank an John Saunders für den Hinweis, dass dies ein Windows-Problem ist. Ich habe gehört/ist besser für Cross-Kompatibilität, die hier nicht so wichtig ist, da ich auf Windows ausgerichtet bin. – DMan

+0

Fehler im Titel: sollte "/ oder \\" sein, nicht "// oder". – sblom

+0

@ sblom- Nicht sicher der genaue Unterschied, aber behoben, da es funktioniert: p – DMan

Antwort

24

Windows unterstützt beide Pfadtrennzeichen, also funktionieren beide, zumindest für lokale Pfade (/ funktioniert nicht für Netzwerkpfade). Die Sache ist die, dass es kein tatsächlicher Nutzen ist die Arbeitsweise verwenden, aber nicht Standard Pfadseparator (/) unter Windows, vor allem, weil Sie wörtliche die wörtlich Zeichenfolge verwenden:

string path = @"C:\" //Look ma, no escape 

Der einzige Fall, in dem ich einen Nutzen sehen konnte Wenn Sie mit dem/separator arbeiten, arbeiten Sie nur mit relativen Pfaden und verwenden den Code in Windows und Linux. Dann können Sie "../foo/bar/baz" auf das gleiche Verzeichnis zeigen. Aber selbst in diesem Fall ist es besser, den Namespace System.IO (Path.DirectorySeparatorChar, Path.Combine) zu belassen, um solche Probleme zu beheben.

+4

Was Sie "Raw-String-Operator" nennen, ist wirklich "wörtlich String-Literal". –

+0

Danke für die Antwort! – DMan

+0

@Jay: "Verbatim String-Literal-Operator"? oder einfach "Verbatim String Literal"? –

4

Ich schreibe Pfade in C# wie folgt aus:

@ "C: \ My \ Path"

Das Zeichen @ dreht \ Flucht aus.

1

Dies ist kein C# -Problem - es ist ein Windows-Problem. Pfade in Windows werden normalerweise mit einem Backslash angezeigt: C :. Meiner Meinung nach sollte das in C# verwendet werden. Verwenden Sie @ "C: \", um eine spezielle Behandlung von Backslaash-Zeichen zu verhindern.

8

Verwenden Sie Path.Combine und Sie brauchen sich keine Sorgen über solche Semantik zu machen.

+0

Es ist schade, dass Path.Combine nur 2 Parameter dauert. –

+1

@MikeCole seit .NET 4.0, eine Überladung nimmt eine beliebige Anzahl von Parametern über 'Params' Schlüsselwort. – nawfal

21

Bitte verwenden Sie Path.DirectorySeparatorChar ODER besser, wie Poita schlug vor, Verwendung Path.Combine.

+1

'Path.PathSeparator' ist ein Zeichen zum Aufteilen von Pfaden in der PATH-Umgebungsvariablen. Unter Windows ist es ';'. Ich habe diese Antwort aktualisiert, um auf 'DirectorySeparatorChar' zu verweisen. –

+0

Hoppla. Danke für die Korrektur, ich wollte über DirectorySeparatorChar posten. – SolutionYogi

+0

Dies ist die richtige Lösung. –

Verwandte Themen