Как перехватить вывод двоичного процесса в C # /. NET - PullRequest
3 голосов
/ 13 декабря 2010

Я хочу запустить внешнее приложение и записать его вывод. Это довольно просто, используя Diagnostics.Process и OutputStream.

Однако, процесс, который я сгенерировал двоичные данные, которые мне нужно записать как Stream, а не как текстовый StreamWriter

Есть ли способ получить базовый необработанный двоичный поток?

В настоящее время я взломал его, запустив командный файл, который выглядит следующим образом:

myapplication | socat stdin tcp-connect:localhost:12345

И в своем коде я создаю и слушаю на сокете TCP. хотя этот хак работает, он немного уродлив, и я предпочитаю использовать внешний процесс напрямую.

(Одна вещь, которую я не могу сделать, - это использовать локальные файлы, так как данные в реальном времени по своей природе)

Ответы [ 3 ]

3 голосов
/ 27 марта 2011

Как насчет p.StandardOutput.BaseStream?

1 голос
/ 27 марта 2011

Я использовал следующий код для чтения двоичных данных из стандартного вывода программы

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();
1 голос
/ 13 декабря 2010

Вы можете использовать именованный канал, похожий, но более углубленный, чем функциональность OutputStream в Process (который в основном слушает StandardOutput).Именованные каналы доступны с использованием потоков, без какого-либо предположения о том, что содержимое является символьными данными Unicode.Они также не связывают сетевые порты, если вы не хотите подключаться к каналу удаленно (что также возможно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...