ProcessStartInfo psi = new ProcessStartInfo(filepath); psi.RedirectStandardOutput = true; Process p = Process.Start(psi); p.StandardOutput = yourConsole; // yourConsole is the StreamReader for your target input stream阻止一个外部程序的所有文件操作据我所知不可能,所以你不如将其输出重定向到自己的流中,想要log的话就让这个流导向文件,否则干脆满了就清空
不好意思,有点误导,这里的 p.StandardOutput = yourConsole; // yourConsole is the StreamReader for your target input stream 应该写成: StreamReader sr = p.StandardOutput; StreamWriter sw = new StreamWriter(logFilePath); sw.Write(sr.ReadToEnd()); sw.Close();以上只是此类代码的写法,我建议你的实际程序还是用多线程来做这种东西。一般情况下如果输出流被填满,子进程p会被阻塞直至父进程取走流中数据。小心引起死锁~ 更具体的东西可以到msdn上查查
如: ipconfig >c:\output.txt阻止p的所有文件操作可能要用到系统的API,请楼下继续。
psi.RedirectStandardOutput = true;
Process p = Process.Start(psi);
p.StandardOutput = yourConsole; // yourConsole is the StreamReader for your target input stream阻止一个外部程序的所有文件操作据我所知不可能,所以你不如将其输出重定向到自己的流中,想要log的话就让这个流导向文件,否则干脆满了就清空
p.StandardOutput = yourConsole; // yourConsole is the StreamReader for your target input stream
应该写成:
StreamReader sr = p.StandardOutput;
StreamWriter sw = new StreamWriter(logFilePath);
sw.Write(sr.ReadToEnd());
sw.Close();以上只是此类代码的写法,我建议你的实际程序还是用多线程来做这种东西。一般情况下如果输出流被填满,子进程p会被阻塞直至父进程取走流中数据。小心引起死锁~ 更具体的东西可以到msdn上查查