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

93

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

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

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

Kjensen
источник

Ответы:

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
Марк Брэкетт,
13
var foo = @"D:\Projects\Some\Kind\Of\Pathproblem\wuhoo.xml";
Петр Чапла
источник
Небольшое примечание: "затем экранируется как" "
flq
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"

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

Боб Кауфман
источник
Но «дубль» не воспринимается буквально.
Вингер Сендон