标准输入/输出在C#过程
问题描述:
我App
使用其他我的应用程序SubApp
应用。 当App
需要SubApp
它正在创建过程与SubApp
,把数据到SubApp
stdin
和读SubApp
stdout
。标准输入/输出在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);
有什么办法来防止代码,我没有从编写到标准输出?
答
假设要禁用第三方分量输出和你有过的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);
}
}
}
答
我已经试过这样:
StreamWriter sw = new StreamWriter(@"c:\nul");
Console.SetOut(sw);
Console.WriteLine("hello!");
但将在新的StreamWriter异常()。
下可能工作(调用之前你的外部模块被激活):
StreamWriter sw = new StreamWriter(Stream.Null);
Console.SetOut(sw);
一种解决方法是打开一个真正的文本文件,并删除它。