web-dev-qa-db-fra.com

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

Le code suivant génère une erreur de compilation 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?

81
Kjensen

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

Essaye ça:

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

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

Vous pouvez également vous en sortir en évitant le \:

string foo = "D:\\Projects\\Some\\Kind\\Of\\Pathproblem\\wuhoo.xml";
25
Josh
var foo = @"D:\Projects\Some\Kind\Of\Pathproblem\wuhoo.xml";
12
Piotr Czapla

Si votre chaîne est un chemin de fichier, comme dans votre exemple, vous pouvez également utiliser des chemins de fichiers 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 pour échapper une chaîne en C #.

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

Cela fonctionnera, ou les exemples précédents, aussi. @ "..." signifie traiter tout ce qui est entre les guillemets littéralement pour pouvoir le faire

@"Hello
world"

Pour inclure un retour à la ligne littéral. Je suis plus old school et préfère échapper à "\" avec "\\"

5
Bob Kaufman