Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does .NET add an additional slash to the already existent slashes in a path?

I've noticed that C# adds additional slashes (\) to paths. Consider the path C:\Test. When I inspect the string with this path in the text visualiser, the actual string is C:\\Test.

Why is this? It confuses me, as sometimes I may want to split the path up (using string.Split()), but have to wonder which string to use (one or two slashes).

like image 215
GurdeepS Avatar asked Mar 28 '11 22:03

GurdeepS


2 Answers

The \\ is used because the \ is an escape character and is need to represent the a single \.

So it is saying treat the first \ as an escape character and then the second \ is taken as the actual value. If not the next character after the first \ would be parsed as an escaped character.

Here is a list of available escape characters:

\' - single quote, needed for character literals
\" - double quote, needed for string literals
\\ - backslash
\0 – Null 
\a - Alert 
\b - Backspace 
\f - Form feed 
\n - New line 
\r - Carriage return 
\t - Horizontal tab 
\v - Vertical quote 
\u - Unicode escape sequence for character 
\U - Unicode escape sequence for surrogate pairs. 
\x - Unicode escape sequence similar to "\u" except with variable length.

EDIT: To answer your question regarding Split, it should be no issue. Use Split as you would normally. The \\ will be treated as only the one character of \.

like image 70
Kelsey Avatar answered Sep 27 '22 23:09

Kelsey


.Net is not adding anything to your string here. What your seeing is an effect of how the debugger chooses to display strings. C# strings can be represented in 2 forms

  • Verbatim Strings: Prefixed with an @ sign and removes the need o escape \\ characters
  • Normal Strings: Standard C style strings where \\ characters need to escape themselves

The debugger will display a string literal as a normal string vs. a verbatim string. It's just an issue of display though, it doesn't affect it's underlying value.

like image 30
JaredPar Avatar answered Sep 27 '22 23:09

JaredPar