日期:2014-05-19  浏览次数:21001 次

怎样重定向外部程序的标准输出到文件?怎样阻止外部程序的文件操作?

Process   p   =   new   Process();
p由我的程序启动
怎样把进程p的标准输出直接重定向到一个指定的文本文件?


怎样阻止p的所有文件操作?
或者监视也可以,最好能在操作实施前获取。

------解决方案--------------------
在dos命令下重定向输出到文件一般用 " > xxx.txt "参数
如: ipconfig > c:\output.txt

阻止p的所有文件操作可能要用到系统的API,请楼下继续。
------解决方案--------------------
UP~~~~!
------解决方案--------------------
进程P是否是你自己写的代码?理论上要阻止某个进程对文件的操作比较困难,你要有比较高的控制优先权。重定向的话直接用批处理文件就可以了。
------解决方案--------------------
友情帮顶

--------------------------------------------
专注于自动提交,如发贴机资源采集器等网络营销软件的开发及相关领域如验证码识别技术。
QQ群号:24733057
-----------------------
CSDN 论坛助手
http://china-csdn.cn/downfile/csdn.rar
------解决方案--------------------
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上查查