2011-04-16 77 views
25

私は設定ファイルmyapp.exe.configを持っています。 ファイルには、値としてフルパスファイル名を持つ属性があります。設定ファイルでバックスラッシュをエスケープする必要がありますか?

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

1つまたは2つのバックスラッシュを使用するとうまくいくようです。つまり、

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

も同様です。これを行う正しい方法は何ですか?

答えて

21

これは必要ありません。属性値内の文字データはすべて文字データです。

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

とにかく、あなたはC#はあなたがコード内のリテラルパスを使用する場合にバックスラッシュをエスケープする必要がないことを意味し、逐語的文字列を宣言する@オペレータを持っていることを知りたいかもしれません:

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

このような文字列を設定している場合、どのような方法が正しいと思います。string m_path = ConfigurationManager.AppSettings ["InfoFile"]。ToString();その時点で「@」を追加することはできません。 – smoore4

+0

@SQLDBAなぜあなたはそのような結論を持っていますか? :/ –

+0

質問は「私は設定ファイルを持っています...」と始まるので、あなたはこれを行うことができるのですか? そうは思わない。もちろん、あなたが直接コードビハインドで言っていることをすることはできますが、OPがやっているapp.configからそれを読んでいるのであれば、それは実際には単一のスラッシュで、ダブルではありません。 – smoore4

0

私は最高のだろうと思いますちょうど2つのバックスラッシュを防ぐためですが、それがなぜ機能するのかを変更してください。あなたのアプリケーションに設定値を読み込むときに、 "\\"を "\"に置き換えてください。

1

基本的にURLまたはURIにはスラッシュが1つしかありません\したがって、スラッシュを使用する方が良いです。この問題はコードの作成中に発生しますが、XMLでは単一スラッシュを使用する上で問題はありません。

15

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

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

二重バックスラッシュでも動作するのは、ファイルシステムが寛大であるためです。 c:\\temp\\info.txtのパスを使用してc:\temp\info.txtというファイルにアクセスできます。

+0

ファイルシステムは許されません。 \あなたが好きなだけ多くを持つことができます。コマンドラインで試してみてください。ヘックにもURLのサポート!試してみてくださいhttp://stackoverflow.com///////////////QSTions///////////5685344 – leppie

+15

@leppie:あなたのポイントは何ですか? ?あなたは自分自身と矛盾しています。 – Guffa

関連する問題