2013-02-18 125 views
1

App使用其他我的应用程序SubApp应用。 当App需要SubApp它正在创建过程与SubApp,把数据到SubAppstdin和读SubAppstdout标准输入/输出在C#过程

的问题是,SubApp是使用一些库,有时写到stdout

片段的SubApp代码:

OutsideLibrary.DoSomeInitialization(); // <-- this sometimes writes to stdout 
Stream input = Console.OpenStandardInput(); 
Stream output = Console.OpenStandardOutput(); 
data = (dataFormat)formatter.Deserialize(input); 
//do some job 
formatter.Serialize(output, result); 

有什么办法来防止代码,我没有从编写到标准输出?

回答

2

假设要禁用第三方分量输出和你有过的SubApp代码,你可以做以下伎俩剩下的控制:在应用引导标准输出重定向到零。当你需要写的东西到stdout临时设定的标准输出恢复正常,写,设置为再次空。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace stdio 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.SetOut(System.IO.TextWriter.Null); 
      Console.WriteLine("This will go to > null"); 
      WriteOutput("This is written to standard output"); 
      Console.WriteLine("This will also go to > null"); 
      Console.ReadKey(); 
     } 

     static void WriteOutput(String someString) 
     { 
      Console.SetOut(Console.Out); 
      Stream output = Console.OpenStandardOutput(); 
      StreamWriter sw = new StreamWriter(output); 
      sw.Write(someString); 
      sw.Flush(); 
      sw.Close(); 
      output.Close(); 
      Console.SetOut(System.IO.TextWriter.Null); 
     } 



    } 
} 
1

我已经试过这样:

StreamWriter sw = new StreamWriter(@"c:\nul"); 
Console.SetOut(sw); 
Console.WriteLine("hello!"); 

但将在新的StreamWriter异常()。

下可能工作(调用之前你的外部模块被激活):

StreamWriter sw = new StreamWriter(Stream.Null); 
Console.SetOut(sw); 

一种解决方法是打开一个真正的文本文件,并删除它。

相关问题