web-dev-qa-db-ja.com

バックスラッシュを含むパス文字列の認識されないエスケープシーケンス

次のコードは、各バックスラッシュの「認識されないエスケープシーケンス」に関するコンパイラエラーを生成します。

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

バックスラッシュをエスケープする必要があると思いますか?それ、どうやったら出来るの?

81
Kjensen

毎回二重バックスラッシュを使用できます

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

または@記号を使用します

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

これを試して:

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

問題は、文字列では、\がエスケープ文字であるということです。 @記号を使用すると、エスケープ文字を無視するようコンパイラーに指示できます。

\をエスケープして取得することもできます:

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

例のように文字列がファイルパスの場合、Unixスタイルのファイルパスも使用できます。

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

しかし、他の答えには、C#での文字列エスケープのより一般的な解決策があります。

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

これは機能するか、前の例も機能します。 @ "..."は、引用符の間のすべてを文字通り処理することを意味します。

@"Hello
world"

リテラル改行を含めるため。私はもっ​​と古い学校で、「\\」で「\」をエスケープしたい

5
Bob Kaufman