Secuencia de escape no reconocida para la cadena de ruta que contiene barras invertidas

90

El siguiente código genera un error del compilador sobre una "secuencia de escape no reconocida" para cada barra invertida:

string foo = "D:\Projects\Some\Kind\Of\Pathproblem\wuhoo.xml";

¿Supongo que necesito escapar de la barra invertida? ¿Cómo puedo hacer eso?

Kjensen
fuente

Respuestas:

224

Puede usar una barra invertida doble cada vez

string foo = "D:\\Projects\\Some\\Kind\\Of\\Pathproblem\\wuhoo.xml";

o usa el símbolo @

string foo = @"D:\Projects\Some\Kind\Of\Pathproblem\wuhoo.xml";
Brandon
fuente
Esto también ayudó a resolver un problema de Html.TextBoxFor que estaba teniendo. El uso de @ antes de la expresión regular resolvió la secuencia de escape no reconocida, donde fallaba la doble barra invertida.
Joshua
27

Prueba esto:

string foo = @"D:\Projects\Some\Kind\Of\Pathproblem\wuhoo.xml";

El problema es que en una cadena, a \es un carácter de escape. Al usar el @signo, le dice al compilador que ignore los caracteres de escape.

También puede sobrevivir escapando de \:

string foo = "D:\\Projects\\Some\\Kind\\Of\\Pathproblem\\wuhoo.xml";
Josh
fuente
4
FWIW y para ayudar al robot de Google, el término para @ "" es un "literal de cadena literal". Aunque también he escuchado que se hace referencia a él simplemente como "literal de cadena", eso técnicamente incluye el "literal de cadena regular" de solo "". msdn.microsoft.com/en-us/library/aa691090(VS.71).aspx
Mark Brackett
13
var foo = @"D:\Projects\Some\Kind\Of\Pathproblem\wuhoo.xml";
Piotr Czapla
fuente
En una nota menor, un "luego se escapa como" "
flq
9

Si su cadena es una ruta de archivo, como en su ejemplo, también puede usar rutas de archivo de estilo Unix:

string foo = "D:/Projects/Some/Kind/Of/Pathproblem/wuhoo.xml";

Pero las otras respuestas tienen las soluciones más generales para el escape de cadenas en C #.

Scott Weinstein
fuente
5
string foo = "D:\\Projects\\Some\\Kind\\Of\\Pathproblem\\wuhoo.xml";

Esto funcionará, o los ejemplos anteriores también. @ "..." significa tratar todo lo que se encuentra entre las comillas literalmente, para que pueda hacer

@"Hello
world"

Para incluir una nueva línea literal. Soy más de la vieja escuela y prefiero escapar "\" con "\\"

Bob Kaufman
fuente
Pero el doble "no se trata literalmente.
Winger Sendon