2010-10-25 35 views
0

有沒有簡單的方法來啓動.NET中的進程並將其輸出重定向到文件? 我知道在Win API中,我可以將文件句柄傳遞給CreateProcess函數。 在.NET中我可以這樣做將std輸出從Process對象重定向到.net中的文件

startInfo.RedirectStandardOutput = true; 

然後用BeginOutputReadLineStandardOutput來獲取數據,並將其保存到一個文件中。但是與操作系統本身可以處理的東西相比,它似乎有點花銷。

感謝

回答

0

您可以運行文件​​3210

+0

恐怕我無法從.NET運行這個。我可以運行諸如「cmd.exe/c someApp.exe> file.txt」,但這仍然是一個解決方法。 – Elephantik 2010-10-25 14:43:43

+0

@Elephantik是的,它可能是必需的。你想要的基本上是解決方法。 – Andrey 2010-10-25 14:45:54

+0

我不同意OS支持的功能是解決方法;) – Elephantik 2010-10-25 15:04:18

2

晚了一點,但是這指給我一個更好的答案:Capturing binary output from 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

你的例子使用samtools(我今天一直在使用的東西=]的事實的獎勵要點) – JHubbard80 2016-07-13 00:42:15