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?
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";
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 \
.
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
.
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.
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.