web-dev-qa-db-ja.com

構成ファイルでバックスラッシュをエスケープする必要がありますか?

設定ファイルmyapp.exe.configがあります。ファイルには、フルパスのファイル名を値として持つ属性があります。

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

シングルまたはダブルのバックスラッシュを使用するとうまくいくようです。あれは、

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

また働きます。これを行う正しい方法は何ですか?

28
RogerS

あなたはそれを必要としません。属性値内のすべてが文字データです。

C#を使用してこれらの値を読み取っているので、コード内のリテラルパス文字列であるかのようにエスケープされます。

とにかく、C#に@演算子。逐語的文字列を宣言します。つまり、コードでリテラルパスを使用する場合、バックスラッシュをエスケープする必要はありません。

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

バックスラッシュはXMLでは特別な意味がないため、エスケープしないでください。

さらに、XMLでバックスラッシュをエスケープする場合は、\\を使用せず、&#92;を使用します。

二重のバックスラッシュで機能する理由は、ファイルシステムが許容するためでもあります。パスc:\\temp\\info.txtを使用して、ファイルc:\temp\info.txtにアクセスできます。

17
Guffa

基本的に、URLまたはURIは単一のスラッシュ\を保持するため、単一のスラッシュを使用することをお勧めします。問題はコードの作成中に発生しますが、XMLでは単一のスラッシュを使用しても問題はありません。

2
Javed Akram

念のため、二重のバックスラッシュを防ぐのが最善だと思いますが、もしそれがうまくいくなら、なぜそれを変更するのでしょうか。おそらく、アプリケーションに構成値を読み込むときに、「\\」を「\」に置き換えてください。

0
Ryan Gunn