Sequência de escape não reconhecida para string de caminho contendo barras invertidas

89

O código a seguir gera um erro do compilador sobre uma "sequência de escape não reconhecida" para cada barra invertida:

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

Eu acho que preciso escapar da barra invertida? Como faço isso?

Kjensen
fonte

Respostas:

221

Você pode usar uma barra invertida dupla a cada vez

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

ou use o símbolo @

string foo = @"D:\Projects\Some\Kind\Of\Pathproblem\wuhoo.xml";
Brandon
fonte
Isso também ajudou a resolver um problema de Html.TextBoxFor que eu estava tendo. O uso de @ antes da expressão regular resolveu a sequência de escape não reconhecida, onde a barra invertida dupla falhou.
Joshua
27

Experimente isto:

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

O problema é que em uma string, um \ é um caractere de escape. Ao usar o @sinal, você diz ao compilador para ignorar os caracteres de escape.

Você também pode escapar de \:

string foo = "D:\\Projects\\Some\\Kind\\Of\\Pathproblem\\wuhoo.xml";
Josh
fonte
4
FWIW e para ajudar o Googlebot, o termo para @ "" é um "literal de string literal". Embora eu também tenha ouvido falar apenas de "literal de string", que tecnicamente inclui o "literal de string regular" de apenas "". 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
fonte
Em uma nota secundária, um "é então escapado como" "
flq
9

Se sua string for um caminho de arquivo, como em seu exemplo, você também pode usar caminhos de arquivo no estilo Unix:

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

Mas as outras respostas têm as soluções mais gerais para o escape de string em C #.

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

Isso funcionará, ou os exemplos anteriores também. @ "..." significa tratar tudo entre aspas literalmente, para que você possa fazer

@"Hello
world"

Para incluir uma nova linha literal. Eu sou mais da velha escola e prefiro escapar "\" com "\\"

Bob Kaufman
fonte
Mas o dobro "não é tratado literalmente.
Winger Sendon