Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Одновременный вывод в консоль и в файл

#c_sharp #net


Есть ли в .NET'e способ писать поток вывода в два стрима одновременно?

То есть сделать Console.SetOut() и для Console.Out и для StringWriter например.
    


Ответы

Ответ 1



Если решать задачу "в лоб", можно сделать небольшую обёртку, которая будет это делать. Например: public class MultiWriter : TextWriter { private readonly List _writers; public MultiWriter(params TextWriter[] writers) { _writers = new List(writers); } public override void Write(char value) { _writers.ForEach(_ => _.Write(value)); } public override Encoding Encoding { get { return Encoding.UTF8; } } } Пример использования: var stringWriter = new StringWriter(); var consoleWriter = Console.Out; // Перенаправляем вывод в наш writer и пишем в консоль тестовую строку Console.SetOut(new MultiWriter(stringWriter, consoleWriter)); Console.WriteLine("Lorem ipsum dolor sit amet, consectetur adipiscing elit."); // Возвращаем на место стандартный writer Console.SetOut(consoleWriter); // ...и проверяем результат Console.WriteLine(stringWriter.ToString()); Console.ReadLine();

Комментариев нет:

Отправить комментарий