【发布时间】:2011-08-26 19:41:25
【问题描述】:
我调用了一个方法,比如FizzBuzz(),我无法控制它。这个方法使用Console.WriteLine向控制台输出一堆东西。
我可以截取FizzBuzz 方法生成的输出吗?
请注意,我的应用程序本身就是一个控制台应用程序。
【问题讨论】:
我调用了一个方法,比如FizzBuzz(),我无法控制它。这个方法使用Console.WriteLine向控制台输出一堆东西。
我可以截取FizzBuzz 方法生成的输出吗?
请注意,我的应用程序本身就是一个控制台应用程序。
【问题讨论】:
是的,很有可能:
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
【讨论】:
Console.Out,以便您可以恢复它。
Console.OpenStandardOutput() 将永远给你真正的。
FizzBuzz 有同样的观点,那我们就倒霉了:-)
var oldColor = Console.ForegroundColor; Console.ForegroundColor = color ?? oldColor; Console.Write(message); Console.ForegroundColor = oldColor;