Нераспознанная escape-последовательность для строки пути, содержащей обратную косую черту


93

Следующий код генерирует ошибку компилятора о «нераспознанной escape-последовательности» для каждой обратной косой черты:

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

Думаю, мне нужно избежать обратной косой черты? Как я могу это сделать?

Ответы:


227

Вы можете каждый раз использовать двойную обратную косую черту

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

или используйте символ @

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

Это также помогло решить возникшую у меня проблему с Html.TextBoxFor. Использование символа @ перед регулярным выражением разрешило нераспознанную escape-последовательность, где двойная обратная косая черта не удалась.
Джошуа

29

Попробуй это:

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

Проблема в том, что в строке a \- это escape-символ. Используя @знак, вы говорите компилятору игнорировать escape-символы.

Вы также можете обойтись экранированием \:

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

4
FWIW и, чтобы помочь роботу Googlebot, термин для @ "" является "дословным строковым литералом". Хотя я также слышал, что его называют просто «строковым литералом», технически он включает в себя «обычный строковый литерал» просто «». msdn.microsoft.com/en-us/library/aa691090(VS.71).aspx
Марк Брэкетт,


9

Если ваша строка является путем к файлу, как в вашем примере, вы также можете использовать пути к файлам в стиле Unix:

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

Но в других ответах есть более общие решения для экранирования строк в С #.


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

Это будет работать, или предыдущие примеры тоже. @ "..." означает буквально обрабатывать все, что находится между кавычками, так что вы можете

@"Hello
world"

Чтобы включить буквальный перевод строки. Я более олдскульный и предпочитаю убегать "\" с "\\"


Но «дубль» не воспринимается буквально.
Вингер Сендон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.