web-dev-qa-db-fra.com

Dois-je échapper une barre oblique inverse dans un fichier de configuration?

J'ai un fichier de configuration, myapp.exe.config. Dans le fichier, j'ai un attribut avec un nom de fichier chemin complet comme valeur.

<add key="InfoFile" value="c:\temp\info.txt" />

Cela semble fonctionner si j'utilise une simple ou double barre oblique inversée. C'est,

<add key="InfoFile" value="c:\\temp\\info.txt" />

fonctionne aussi. Quelle est la bonne façon de faire cela?

28
RogerS

Tu n'as pas besoin de ça. Tout ce qui est dans une valeur d'attribut est une donnée de caractère.

Puisque vous lisez ces valeurs en C #, elles seront échappées comme si elles constituaient une chaîne de chemin littéral dans le code.

Quoi qu'il en soit, vous voudrez peut-être savoir que C # a l'opérateur @ pour déclarer des chaînes entières, ce qui signifie qu'il n'est pas nécessaire d'échapper des barres obliques inverses lors de l'utilisation de chemins littéraux dans le code:

string somePath = @"C:\blah\blih\bluh.txt";
24

Une barre oblique inverse n'a pas de signification particulière dans XML, vous ne devez donc pas y échapper.

De plus, si vous échappiez les barres obliques inverses XML, vous n'utiliseriez pas \\, mais &#92;.

La raison pour laquelle cela fonctionne avec les doubles barres obliques inverses est également que le système de fichiers est indulgent. Vous pouvez utiliser le chemin c:\\temp\\info.txt pour accéder au fichier c:\temp\info.txt.

16
Guffa

Fondamentalement, URL ou URI contient une seule barre oblique \; il est donc préférable d’utiliser une seule barre oblique. Le problème survient lors de l'écriture de code, mais en XML, l'utilisation d'un simple slash ne pose aucun problème. 

2
Javed Akram

Je pense que le mieux serait d'éviter le double backslash au cas où, mais si cela fonctionne, pourquoi le changer. Peut-être remplacer "\\" par "\" lorsque vous lirez la valeur de configuration dans votre application.

0
Ryan Gunn