Можно ли перехватить вывод консоли?
Я называю метод, скажем, FizzBuzz()
, который я не могу контролировать. Этот метод выводит кучу вещей на консоль, используя Console.WriteLine
,
Могу ли я перехватить вывод, генерируемый FizzBuzz
метод? Обратите внимание, что мое приложение является консольным приложением.
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