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?

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

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

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

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


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


Mas o dobro "não é tratado literalmente.
Winger Sendon
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.