C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 37 を表示中)
■19173 / )  Re[4]: Processの標準出力をリアルタイム取得
□投稿者/ シャノン (441回)-(2008/05/20(Tue) 18:18:56)
2008/05/20(Tue) 18:19:31 編集(投稿者)

No19103 (れい さん) に返信
> ■No19096 (シャノン さん) に返信
>>これバグくさいなー。
>
> pingの、ですね。

ping にバグがあるとして、その出力を扱うこっち側のアプリはどうしますか?
ping は単一の改行のつもりで \r\n を書き出したところ、標準出力がテキストモードだったために \r\r\n になってしまうわけですが、Process.OutputDataReceived も Process.StandardOutput.ReadLine も、\r だけを有効な改行とみなすために、\r\r\n は2つの改行と認識されてしまうわけです。
これを、「そんなのは ping のバグだから俺の責任じゃない! 知らん!」と言うか、\r\r\n は単一の改行と認識するようにプログラムを組むか。
後者の場合、Process.StandardOutput.BaseStream からバイトデータとして読み取れば \r\r\n を受け取れるので処理できますが、Process.OutputDataReceived や Process.StandardOutput.ReadLine ではダメなんですよね(意図した空行かバグによる空行か判別できないため)。

もちろん、ことは ping に限ったことではなく、行末が \r\r\n になってしまうコンソールアプリは少なくないことは想定できます。
返信 編集キー/


管理者用

- Child Tree -