首页 新闻 搜索 专区 学院

如何获得C#控制台的打印信息

1
悬赏园豆:50 [已解决问题] 解决于 2011-12-02 09:17

一个比较大的c#应用程序源码,有很多的控制台打印信息,如何获得控制台输出的信息?比如把控制台的信息导出到一个文件中。

f110的主页 f110 | 初学一级 | 园豆:65
提问于:2011-12-01 13:26
< >
分享
最佳答案
1

重定向标准输出流。

标准输出流System.Console.Out是System.IO.TextWriter,所以重设另外一个TextWriter对象就好了。

System.Console.Out属性只提供了set接口,需要用System.Console.SetOut接口。

            TextWriter newOut = new StreamWriter("Redirect.txt");

System.Console.SetOut(newOut);
收获园豆:40
胡屯 | 小虾三级 |园豆:714 | 2011-12-01 14:13

谢谢大侠 我要的就是这东西, 我去试试, 看看能不能定向到socket的stream

f110 | 园豆:65 (初学一级) | 2011-12-01 14:31

大侠看看我的代码有问题吗?  为什么这样做了以后控制台上没输出了是OK的,但是文件里面什么也没写入啊。

 

           FileStream fs = new FileStream("D:\\testout.txt"FileMode.AppendFileAccess.WriteFileShare.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 | 园豆:65 (初学一级) | 2011-12-01 14:47

@f110: 

write的内容缓存在newOut 中,fs.Close();关闭了目标流当然就无法输出了。

           newOut.Flush();
胡屯 | 园豆:714 (小虾三级) | 2011-12-01 17:35

@胡屯:

while (true)

{

  ...

  Console.Out.WriteLine(_Num.ToString());   

  ...            

}

 

我是打印了10个数字后在关闭的啊  这时候输出完毕我要看结果了,所以要关闭啊。

f110 | 园豆:65 (初学一级) | 2011-12-01 17:53

@胡屯: 哦, 了解了,数据在newOut 中,  谢谢

f110 | 园豆:65 (初学一级) | 2011-12-01 17:57

@f110: 建议深入理解FileStream和StreamWriter两者之间的关系。

这里推荐一个网友的博文,文中讲的已经比较清楚了,我就不再赘述了。

http://hi.baidu.com/%D7%B7%C7%F3a%B5%CD%B5%F7/blog/item/582581ca57a09515bf09e686.html

胡屯 | 园豆:714 (小虾三级) | 2011-12-02 09:16

@胡屯: 谢谢大哥   我是C#新手,目前的项目要和它打交道,学习了月余wpf。

f110 | 园豆:65 (初学一级) | 2011-12-02 09:19

@f110: 弱弱的告诉你,我也是C#新手,共同学习。

但是最近发现用C#构建架构原型很快,这就是一门语言的一大优势。

胡屯 | 园豆:714 (小虾三级) | 2011-12-02 09:37
其他回答(2)
0

只能载取输出流,参考下面的方法:

          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();这个就是输出的内容
收获园豆:5
artwl | 园豆:16536 (专家六级) | 2011-12-01 13:38

这个是启动子进程来做吧, 我要启动哪个程序来做子进程?

支持(0) 反对(0) f110 | 园豆:65 (初学一级) | 2011-12-01 13:46

@f110: 我那个只是示例怎么获取控制台输出的内容,是要在源程序中写的,如果不改原程序想获取程序输出内容用楼下的方法吧

支持(0) 反对(0) artwl | 园豆:16536 (专家六级) | 2011-12-01 14:01
1

假设编译后的启动文件是test.exe,不要直接执行test.exe,执行

D:\test.exe > output.txt

就会把输出到console的输出到output.txt里了。

收获园豆:5
水牛刀刀 | 园豆:6350 (大侠五级) | 2011-12-01 13:54

......这个程序是最终用户的应用,不肯能用你说的方式启动啊。

支持(0) 反对(0) f110 | 园豆:65 (初学一级) | 2011-12-01 14:04

@f110: 你可以做一个批处理文件,比如 test.bat,里面的内容是

test.exe > output.txt

这样用户执行test.bat就可以了。

支持(0) 反对(0) 水牛刀刀 | 园豆:6350 (大侠五级) | 2011-12-01 14:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册