Wie schreibe ich einen Backslash (\) in eine Zeichenfolge?

72

Ich möchte so etwas schreiben C:\Users\UserName\Documents\Tasks in textbox:

txtPath.Text = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)+"\Tasks";

Ich bekomme den Fehler:

Nicht erkannte Escape-Sequenz.

Wie schreibe ich einen Backslash in eine Zeichenfolge?

TylerH
quelle
10
Verwenden Sie Double Backslash \\ oder setzen Sie @ am Anfang Ihrer Zeichenfolge
Andrew
2
@ Precious1tj: Ich würde vermuten, dass sie dich herabgestimmt haben, denn wenn du "C # Unrecognized Escape Sequence" gegoogelt hättest, hättest du leicht eine Antwort gefunden, ohne eine Frage stellen zu müssen.
Chris Sinclair
@ Precious1tj Vielleicht, weil das Googeln Ihres Fragentitels Sie zu einer Antwort geführt hätte? Ich habe nicht abgelehnt, also weiß ich es nicht genau.
Nolonar
3
@ Precious1tj: Ich habe nicht deinen Titel gesagt, sondern deine Fehlermeldung . Aber zu Ihrer Information, für zukünftige Googeln, stellen Sie sicher, dass Sie "C #" in Ihre Suche einbeziehen. Zum Beispiel ergibt das erste Ergebnis, wenn Sie Ihren Titel mit "C #" googeln, dies
Chris Sinclair

Antworten:

109

Das Backslash ( "\") -Zeichen ist ein spezielles Escape-Zeichen, das andere Sonderzeichen wie neue Zeilen ( \n), Tabulatoren ( \t) oder Anführungszeichen ( \") kennzeichnet .

Wenn Sie ein Backslash-Zeichen selbst einfügen möchten, benötigen Sie zwei Backslashes oder verwenden Sie die @wörtliche Zeichenfolge:

var s = "\\Tasks";
// or 
var s = @"\Tasks";

Lesen Sie die MSDN-Dokumentation / C # -Spezifikation, in der die Zeichen erläutert werden, die mit dem Backslash-Zeichen und der Verwendung des wörtlichen Zeichenfolgenliteral maskiert werden.

Im Allgemeinen bevorzugen die meisten C # .NET-Entwickler die Verwendung der @wörtlichen Zeichenfolgen beim Erstellen von Datei- / Ordnerpfaden, da sie nicht ständig doppelte Backslashes schreiben müssen und den Pfad direkt kopieren / einfügen können. Ich würde Ihnen daher empfehlen Gewöhnen Sie sich an, dasselbe zu tun.


In diesem Fall würde ich Ihnen jedoch empfehlen, die Path.CombineDienstprogrammmethode wie in der Antwort von @ lordkain zu verwenden, da Sie sich dann keine Gedanken darüber machen müssen, ob Backslashes bereits in den Pfaden enthalten sind, und die Schrägstriche versehentlich verdoppeln oder weglassen Insgesamt beim Kombinieren von Teilen von Pfaden.

Chris Sinclair
quelle
4
@MattyAB: Wie inspizierst du die resultierende Zeichenfolge? Wenn Sie es im Visual Studio-Debugger auschecken, wird es mit hinzugefügten Escape-Zeichen angezeigt.
Chris Sinclair
Darüber hinaus ist die Verwendung Path.Combinebetriebssystemunabhängig, sodass dieser Code sowohl auf * nix- als auch auf Windows-Computern ausgeführt werden kann
Stephen Wigginton,
5

Für diesen Path.Combine () wurde eine spezielle Funktion erstellt.

var folder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var fullpath = path.Combine(folder,"Tasks");
Lordkain
quelle
3

Die vorherige Antwort ist richtig, aber in diesem speziellen Fall würde ich die Verwendung von System.IO.Path.Combine empfehlen Methode .

Weitere Informationen finden Sie hier: http://msdn.microsoft.com/en-us/library/fyy7a5kt.aspx

Michael Moreno
quelle
3

Entfliehen Sie einfach "\"mit + "\\Tasks"oder verwenden Sie eine wörtliche Zeichenfolge wie@"\Tasks"

Andre Lombaard
quelle
2
txtPath.Text = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)+"\\\Tasks";

Setzen Sie einen doppelten Backslash anstelle eines einzelnen Backslashs ...

Null
quelle
1

Obwohl dieser Beitrag ziemlich alt ist, habe ich etwas ausprobiert, das für meinen Fall funktioniert hat.

Ich wollte eine Stringvariable mit dem folgenden Wert erstellen:

21541_12_1_13\":null

Mein Ansatz war also so:

  • Erstellen Sie den String wörtlich

    string substring = @ "21541_12_1_13" ": null";

  • und entfernen Sie dann die unerwünschten Backslashes mit der Funktion Entfernen

    string newsubstring = substring.Remove (13, 1);

Hoffentlich hilft das. Prost

ksereis
quelle