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

Ang*_*ker 41 .net c# console .net-3.5

我称之为一种方法,FizzBuzz()我无法控制.这个方法使用输出一堆东西到Console Console.WriteLine.

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

Teo*_*gul 66

是的,非常可能:

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

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

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

或者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
Run Code Online (Sandbox Code Playgroud)

  • 在执行此操作之前,请不要忘记保存`Console.Out`,以便您可以恢复它. (5认同)
  • @Rick:除非有人已经把它关掉了!:)`Console.OpenStandardOutput()`总能给你真实的. (3认同)
  • @Teoman Soygul:值得注意的是,这只适用于FizzBu​​zz在同一appdomain中执行的情况.对于完整性而言,OP很可能不是一个问题,只需注意. (2认同)
  • 截取彩色输出怎么样:ie:`var oldColor = Console.ForegroundColor; Console.ForegroundColor = color ?? oldColor; Console.Write(消息); Console.ForegroundColor = oldColor;` (2认同)