2013-02-18 157 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); 

一種解決方法是打開一個真正的文本文件,並刪除它。

相關問題