C#メモ exeのコマンドライン引数で”(ダブルクォーテーション)で囲まれたコマンドライン引数の値がうまく取れないのは¥(エンマーク)がエスケープシーケンスと認識されていることを確認してみる

C#

ハマったのでメモ。

C#のコマンドラインは"(ダブルクォーテーション)でくくられた文字列は1つの引数として認識してくれるけど…なぜか認識してくれず引数がくっついてしまった。
原因が何なのか分からなかったんだけど、結局文字列の末尾に¥(エンマーク)があるとエスケープシーケンスとして認識されるってことだった。

その違いを試したコードはこんなん。

///
/// エントリーポイント
///

///コマンドライン引数
static void Main(string[] astrArguments)
{
	// コマンドライン引数の内容をコンソールに出力する
	foreach (string strArgument in astrArguments)
	{
		Console.WriteLine(strArgument);
	}
}

ダメだったときの引数はこんな感じ。

"C:\aaa\" "bbb"

実行するとこんな感じ。
1つ目の引数の末尾にある¥(エンマーク)がエスケープシーケンスとして認識されて"(ダブルクォーテーション)がなかったことになり…2つの引数のはずがくっついて1つの引数になっちゃってる…。

C:\aaa" bbb

よかったときの引数はこんな感じ。

"C:\aaa" "bbb"

んで、実行するとこんな感じ。
ちゃんと2つの引数として認識されてとる。

C:\aaa
bbb

ちゅーことで引数は¥(エスケープシーケンス)を認識しちゃうってとこに気をつけにゃならん。

どう対処するかはまた今度。
とりあえず、忘れないうちにメモってことで。

[amazonjs asin="4822298477″ locale="JP" title="C#実践開発手法 (マイクロソフト公式解説書)"]