web-dev-qa-db-ja.com

文字列にバックスラッシュ(\)を書き込むにはどうすればよいですか?

textboxC:\Users\UserName\Documents\Tasksのようなものを書きたい:

txtPath.Text = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)+"\Tasks";

エラーが表示されます:

認識されないエスケープシーケンス。

文字列にバックスラッシュを書き込むにはどうすればよいですか?

51
user2509901

バックスラッシュ("\")文字は、改行(\n)、タブ(\t)、または引用符(\")などの他の特殊文字を示すために使用される特殊なエスケープ文字です。バックスラッシュ文字自体を含める場合は、2つのバックスラッシュが必要か、@の逐語的文字列を使用します:"\\Tasks"または@"\Tasks"

MSDN documentation/C#Specification を読んでください。バックスラッシュ文字を使用してエスケープされる文字と、逐語的な文字列リテラルの使用について説明しています。

一般的に言えば、ほとんどのC#.NET開発者は、ファイル/フォルダパスを作成するときに@逐語的文字列を使用することを好む傾向があります常にパスを直接コピー/貼り付けできるので、同じことをする習慣を身に付けることをお勧めします。


つまり、この場合、実際には、 @ lordkain's answer のようにPath.Combineユーティリティメソッドを使用することをお勧めします。そうすれば、バックスラッシュが既にパスに含まれているかどうかを心配する必要がなく、誤ってパスの一部を結合するときに、スラッシュを2倍にするか、完全に省略します。

84
Chris Sinclair

バックスラッシュをエスケープするには、次のように2つだけを使用します:\\

他のものをエスケープする必要がある場合、これが役立つかもしれません。

16
Kyle

このために作られた特別な関数があります Path.Combine()

var folder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var fullpath = path.Combine(folder,"Tasks");
4
lordkain

+ "\"を使用して"\\Tasks"をエスケープするか、@"\Tasks"のような逐語的文字列を使用します

2
Andre Lombaard

前の答えは正しいですが、この特定のケースでは、System.IO.Path.Combineメソッドを使用することをお勧めします。

詳細については、こちらをご覧ください: http://msdn.Microsoft.com/en-us/library/fyy7a5kt.aspx

2
Michael Moreno
txtPath.Text = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)+"\\\Tasks";

単一の円記号ではなく二重の円記号を入力してください...

2
Nil

この投稿はかなり古いですが、私の場合に役立つものを試しました。

以下の値を持つ文字列変数を作成したかった:

21541_12_1_13\":null

だから私のアプローチはそのようなものでした:

  • 逐語的に文字列を構築する

    string substring = @ "21541_12_1_13 \" "":null ";

  • そして、削除機能を使用して不要なバックスラッシュを削除します

    string newsubstring = substring.Remove(13、1);

それが役に立てば幸いです。乾杯

1
ksereis