Перенаправление вывода std из объекта Process в файл в .net - PullRequest
0 голосов
/ 25 октября 2010

Есть ли простой способ, как запустить процесс в .NET и перенаправить его вывод (ы) в файл?Я знаю, что в Win API я могу передать дескриптор файла в функцию CreateProcess.В .NET я могу сделать что-то вроде

startInfo.RedirectStandardOutput = true;

, а затем использовать BeginOutputReadLine и StandardOutput, чтобы получить данные и сохранить их в файл.Но это кажется немного непосильным по сравнению с тем, что ОС может обрабатывать сама.

Спасибо

Ответы [ 2 ]

2 голосов
/ 30 января 2013

Немного поздно, но это указало мне на лучший ответ: Захват двоичного вывода из Process.StandardOutput

Process cmdProcess = new Process();
ProcessStartInfo cmdStartInfo = new ProcessStartInfo();
cmdStartInfo.FileName = "samtools";

cmdStartInfo.RedirectStandardError = true;
cmdStartInfo.RedirectStandardOutput = true;
cmdStartInfo.RedirectStandardInput = false;
cmdStartInfo.UseShellExecute = false;
cmdStartInfo.CreateNoWindow = true;

cmdStartInfo.Arguments = "view -u " + BamFileName + " " + chromosome + ":" + start + "-" + end;

cmdProcess.EnableRaisingEvents = true;
cmdProcess.StartInfo = cmdStartInfo;
cmdProcess.Start();

using (FileStream str = new FileStream(outputFilePath, FileMode.Create))
{
    cmdProcess.StandardOutput.BaseStream.CopyTo(str);
}

Если вы хотите сделать это асинхронно, вы можете вместо этого использовать CopyToAsync и либо дождаться возвращенной задачи, либо добавить ContinueWith для завершения. Это прекрасно работает для меня.

0 голосов
/ 25 октября 2010

вы можете запустить файл как someApp.exe >logfile.txt

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