Séquence d'échappement non reconnue pour la chaîne de chemin contenant des barres obliques inverses

90

Le code suivant génère une erreur du compilateur concernant une «séquence d'échappement non reconnue» pour chaque barre oblique inverse:

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

Je suppose que j'ai besoin d'échapper à la barre oblique inverse? Comment je fais ça?

Kjensen
la source

Réponses:

224

Vous pouvez soit utiliser une double barre oblique inverse à chaque fois

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

ou utilisez le symbole @

string foo = @"D:\Projects\Some\Kind\Of\Pathproblem\wuhoo.xml";
Brandon
la source
Cela a également aidé à résoudre un problème Html.TextBoxFor que j'avais. L'utilisation de @ avant l'expression régulière a résolu la séquence d'échappement non reconnue, où la double barre oblique inverse a échoué.
Joshua
27

Essaye ça:

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

Le problème est que dans une chaîne, a \est un caractère d'échappement. En utilisant le @signe, vous indiquez au compilateur d'ignorer les caractères d'échappement.

Vous pouvez également vous en sortir en échappant à \:

string foo = "D:\\Projects\\Some\\Kind\\Of\\Pathproblem\\wuhoo.xml";
Josh
la source
4
FWIW et pour aider Googlebot, le terme pour @ "" est un "littéral de chaîne verbatim". Bien que j'aie également entendu parler de "littéral de chaîne", cela inclut techniquement le "littéral de chaîne régulière" de "". 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
la source
Sur une note mineure, un "est alors échappé comme" "
flq
9

Si votre chaîne est un chemin de fichier, comme dans votre exemple, vous pouvez également utiliser des chemins de fichier de style Unix:

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

Mais les autres réponses ont les solutions plus générales à l'échappement de chaîne en C #.

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

Cela fonctionnera, ou les exemples précédents le seront aussi. @ "..." signifie traiter littéralement tout ce qui se trouve entre les guillemets, vous pouvez donc le faire

@"Hello
world"

Pour inclure une nouvelle ligne littérale. Je suis plutôt old school et préfère échapper à "\" avec "\\"

Bob Kaufman
la source
Mais double "ne sont pas traités littéralement.
Ailier Sendon