一个比较大的c#应用程序源码,有很多的控制台打印信息,如何获得控制台输出的信息?比如把控制台的信息导出到一个文件中。
重定向标准输出流。
标准输出流System.Console.Out是System.IO.TextWriter,所以重设另外一个TextWriter对象就好了。
System.Console.Out属性只提供了set接口,需要用System.Console.SetOut接口。
TextWriter newOut = new StreamWriter("Redirect.txt");
System.Console.SetOut(newOut);
谢谢大侠 我要的就是这东西, 我去试试, 看看能不能定向到socket的stream
大侠看看我的代码有问题吗? 为什么这样做了以后控制台上没输出了是OK的,但是文件里面什么也没写入啊。
FileStream fs = new FileStream("D:\\testout.txt", FileMode.Append, FileAccess.Write, FileShare.None);
TextWriter newOut = new StreamWriter(fs);
System.Console.SetOut(newOut);
while (true)
{
_Num++;
Console.Out.WriteLine(_Num.ToString());
Thread.Sleep(100);
if (_Num == 10)
{
_Num = 0;
break;
}
}
fs.Flush();
fs.Close();
@f110:
write的内容缓存在newOut 中,fs.Close();关闭了目标流当然就无法输出了。
newOut.Flush();
@胡屯:
while (true)
{
...
Console.Out.WriteLine(_Num.ToString());
...
}
我是打印了10个数字后在关闭的啊 这时候输出完毕我要看结果了,所以要关闭啊。
@胡屯: 哦, 了解了,数据在newOut 中, 谢谢
@f110: 建议深入理解FileStream和StreamWriter两者之间的关系。
这里推荐一个网友的博文,文中讲的已经比较清楚了,我就不再赘述了。
http://hi.baidu.com/%D7%B7%C7%F3a%B5%CD%B5%F7/blog/item/582581ca57a09515bf09e686.html
@胡屯: 谢谢大哥 我是C#新手,目前的项目要和它打交道,学习了月余wpf。
@f110: 弱弱的告诉你,我也是C#新手,共同学习。
但是最近发现用C#构建架构原型很快,这就是一门语言的一大优势。
控制台上 没有输出了, 想控制台上显示,还能获取到控制台的内容,怎么破。 大神?
有AddOut方法吗?
只能载取输出流,参考下面的方法:
private void excuteCommand( string strFile, string args)
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = new System.Diagnostics.ProcessStartInfo();
p.StartInfo.FileName = strFile;
p.StartInfo.Arguments = args;
p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
p.StartInfo.RedirectStandardOutput = true ;
p.StartInfo.UseShellExecute = false ;
p.StartInfo.CreateNoWindow = true ;
p.Start();
System.IO.StreamReader reader = p.StandardOutput; // 截取输出流
string line = reader.ReadLine(); // 每次读取一行
while ( ! reader.EndOfStream)
{
line = reader.ReadLine();
}
p.WaitForExit();
}
line = reader.ReadLine();这个就是输出的内容
这个是启动子进程来做吧, 我要启动哪个程序来做子进程?
@f110: 我那个只是示例怎么获取控制台输出的内容,是要在源程序中写的,如果不改原程序想获取程序输出内容用楼下的方法吧
假设编译后的启动文件是test.exe,不要直接执行test.exe,执行
D:\test.exe > output.txt
就会把输出到console的输出到output.txt里了。
......这个程序是最终用户的应用,不肯能用你说的方式启动啊。
@f110: 你可以做一个批处理文件,比如 test.bat,里面的内容是
test.exe > output.txt
这样用户执行test.bat就可以了。