Подтвердить что ты не робот

Можно ли перехватить вывод консоли?

Я вызываю метод, скажем, FizzBuzz(), над которым я не контролирую. Этот метод выводит кучу вещей в Консоль с помощью Console.WriteLine.

Возможно ли, чтобы я перехватил вывод, сгенерированный методом FizzBuzz? Обратите внимание, что мое приложение - это приложение консоли.

4b9b3361

Ответ 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