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

わんくま同盟

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

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


(過去ログ 37 を表示中)
■19096 / )  Re[2]: Processの標準出力をリアルタイム取得
□投稿者/ シャノン (432回)-(2008/05/20(Tue) 11:40:56)
No19076 (シャノン さん) に返信
> が、DataReceivedEventArgs.Data には時折空文字列が来るようで、
> string.IsNullOrEmpty を外すと、数行の空行が出てしまいますが、
> 排除すると、コマンドプロンプトから叩いた時の出るべき空行も排除してしまうので、
> そのままの出力を再現することはできませんでした。

これバグくさいなー。
Framework のソースを追ってみたけど、BeginOutputReadLine の内部では、やっぱり StandardOutput.BaseStream.BeginRead を使って出力を読み取っている。
それを文字列に整形する際に、バッファの中から \r と \n を探して、そこまでを1行として返すような処理をしている(AsyncStreamReader.GetLinesFromStringBuilder)。
が、ステップ実行してみると、改行文字が \r\r\n と続く場合があり、このときは空行が2行連続してしまう。
C でコンソールアプリを組んだとき、改行文字に \n ではなく \r\n を使ったプログラムを、コマンドプロンプトからテキストファイルにリダイレクトするとこういう現象が起こる。
リダイレクトする際に \n を \r\n に置き換えて出力してくれるらしい。
返信 編集キー/


管理者用

- Child Tree -