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

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

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

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

Ответы [ 5 ]

197 голосов
/ 20 августа 2009

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

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

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

string foo = @"D:\Projects\Some\Kind\Of\Pathproblem\wuhoo.xml";
24 голосов
/ 20 августа 2009

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

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

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

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

string foo = "D:\\Projects\\Some\\Kind\\Of\\Pathproblem\\wuhoo.xml";
11 голосов
/ 20 августа 2009
var foo = @"D:\Projects\Some\Kind\Of\Pathproblem\wuhoo.xml";
8 голосов
/ 20 августа 2009

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

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

Но другие ответы имеют более общие решения для экранирования строк в C #.

5 голосов
/ 20 августа 2009
string foo = "D:\\Projects\\Some\\Kind\\Of\\Pathproblem\\wuhoo.xml";

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

@"Hello
world"

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

...