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?

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";

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";

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";

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 #.


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 "\\"


Pero el doble "no se trata literalmente.
Winger Sendon
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.