是否可以拦截控制台输出

本文关键字:控制台 输出 是否 | 更新日期: 2023-09-27 17:56:31

我调用一种方法,比如说,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