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?

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

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

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

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


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


Mais double "ne sont pas traités littéralement.
Ailier Sendon
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.