是否可以拦截控制台输出?

时间:2011-05-16 22:29:48

标签: c# .net .net-3.5 console

我称之为FizzBuzz()的方法,我无法控制。此方法使用Console.WriteLine向控制台输出大量内容。

我是否可以拦截FizzBuzz方法生成的输出? 请注意,我的应用程序本身就是Console应用程序。

1 个答案:

答案 0 :(得分:63)

是的,非常可能:

var consoleOut = new StringWriter();
Console.SetOut(consoleOut);
Console.WriteLine("This is intercepted."); // This is not written to console
File.WriteAllText("ConsoleOutput.txt", consoleOut.ToString());

如果您想要停止拦截控制台输出,请稍后使用以下修改:

var stdOut = Console.Out;
// Above interceptor code here..
Console.SetOut(stdOut); // Now all output start going back to console window

OpenStandardOutput执行相同操作而无需先保存标准流:

// Above interceptor code here..
var standardOutput = new StreamWriter(Console.OpenStandardOutput());
standardOutput.AutoFlush = true;
Console.SetOut(standardOutput); // Now all output starts flowing back to console