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


90

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

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

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

回答:


224

毎回二重の円記号を使用できます

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

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

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

これは、私が抱えていたHtml.TextBoxForの問題を解決するのにも役立ちました。正規表現の前に@を使用すると、二重の円記号が失敗した認識されないエスケープシーケンスが解決されました。
ジョシュア

27

これを試して:

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

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

\:をエスケープして解決することもできます。

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

4
FWIWおよびGooglebotを支援するために、@ ""の用語は「逐語的な文字列リテラル」です。単に「文字列リテラル」と呼ばれることも聞いたことがありますが、技術的には「」だけの「通常の文字列リテラル」が含まれます。msdn.microsoft.com/en-us/library/aa691090(VS.71).aspx
Mark Brackett

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

マイナーなメモとして、「」は「」のようにエスケープされます
flq 2009

9

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

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

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


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

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

@"Hello
world"

文字通りの改行を含めること。私はもっ​​と古い学校で、「\\」で「\」をエスケープすることを好みます


しかし、二重のは、 "文字通り扱われません。
ウィンガーSendon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.