【问题标题】:Is it possible to intercept Console output?是否可以拦截控制台输出?
【发布时间】:2011-08-26 19:41:25
【问题描述】:

我调用了一个方法,比如FizzBuzz(),我无法控制它。这个方法使用Console.WriteLine向控制台输出一堆东西。

我可以截取FizzBuzz 方法生成的输出吗? 请注意,我的应用程序本身就是一个控制台应用程序。

【问题讨论】:

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


    【解决方案1】:

    是的,很有可能:

    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,以便您可以恢复它。
    • @Rick:除非有人已经把它关掉了! :) Console.OpenStandardOutput() 将永远给你真正的。
    • @Porges: 如果FizzBuzz 有同样的观点,那我们就倒霉了:-)
    • @Teoman Soygul:值得注意的是,这仅在 FizzBu​​zz 在同一个应用程序域中执行时才有效。对于 OP 来说,这很可能不是问题,只是为了完整性。
    • 拦截彩色输出怎么样:即:var oldColor = Console.ForegroundColor; Console.ForegroundColor = color ?? oldColor; Console.Write(message); Console.ForegroundColor = oldColor;
    猜你喜欢
    • 2015-01-23
    • 2015-01-09
    • 2013-01-22
    • 1970-01-01
    • 2020-03-06
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    相关资源
    最近更新 更多