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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.19096 の関連記事表示

<< 0 >>
■19096  Re[2]: Processの標準出力をリアルタイム取得
□投稿者/ シャノン -(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 に置き換えて出力してくれるらしい。
記事No.19072 のレス /過去ログ37より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -