2010-12-13 18 views
3

外部アプリケーションを起動し、その出力をキャプチャします。 Diagnostics.ProcessとそのOutputStreamを使用するとかなり簡単です。C#/。NETでバイナリプロセスの出力をキャプチャする方法

しかし、プロセスが私はしませんが、テキストStreamWriter

その基礎となる生のバイナリストリームを取得する方法として、私はStreamとしてキャプチャする必要バイナリデータを、生成していますか?

myapplication | socat stdin tcp-connect:localhost:12345

そして、私のコードでは、私が作成し、TCPソケットに聞く:

現在、私は次のようになり、バッチファイルを起動して、それをハック。このハックはうまくいくものの、少し醜いので、私は外部プロセスを直接使用することを好みます。

よりに似ていますが、より深い、あなたが名前付きパイプを使用することができ

答えて

1

を(私はを行うことができないことの一つは、データがその自然の中でリアルタイムでのように、ローカルファイルを使用しています) ProcessのOutputStream機能(これは基本的にStandardOutputのリスナーです)。名前付きパイプは、コンテンツをUnicode文字データとして想定することなく、Streamsを使用してアクセスできます。また、パイプにリモートで接続したい場合を除いて、ネットワークポートを接続しません(これも可能です)。

+1

しかし、パイプを使用するように子プロセスを変更する必要があります。そうしないと、パイプを子の標準出力ハンドルとして渡すためにp/invoke 'CreateProcess'が必要になります。 –

1

私はプログラム

ProcessStartInfo info = new ProcessStartInfo(); 
info.FileName = "yourProcess"; 
info.Arguments = "blah"; 
info.StandardOutputEncoding = System.Text.Encoding.GetEncoding("latin1");//important part 
info.RedirectStandardOutput = true; 
info.UseShellExecute = false; 
Process p = Process.Start(info); 
FileStream fs = new FileStream("outputfile.bin", FileMode.Create); 

while((val = p.StandardOutput.Read())!= -1){ 
    fs.WriteByte((byte)val); 
} 

p.WaitForExit(); 
fs.Close(); 
3

どうp.StandardOutput.BaseStream程度の標準出力からバイナリデータを読み取るためにfollwowingコードを使用?

+0

完全な答えはどうですか? – SerG

+1

@SerG:これは完全な答えです。尋ねられた唯一の質問は、「そこに基礎となる生のバイナリストリームを取得する方法はありましたか?」 –

関連する問題