Мне нужен совет о том, как заставить консольное приложение С# отображать текст пользователю через стандартный вывод, в то же время доступ к нему позже. Фактической функцией, которую я хотел бы реализовать, является сброс всего выходного буфера в текстовый файл в конце выполнения программы.
Обходной путь, который я использую, в то время как я не нахожу более чистого подхода, - это подкласс TextWriter
, переопределяющий методы записи, чтобы они как записывали в файл, так и вызывали оригинальную запись stdout. Что-то вроде этого:
public class DirtyWorkaround {
private class DirtyWriter : TextWriter {
private TextWriter stdoutWriter;
private StreamWriter fileWriter;
public DirtyWriter(string path, TextWriter stdoutWriter) {
this.stdoutWriter = stdoutWriter;
this.fileWriter = new StreamWriter(path);
}
override public void Write(string s) {
stdoutWriter.Write(s);
fileWriter.Write(s);
fileWriter.Flush();
}
// Same as above for WriteLine() and WriteLine(string),
// plus whatever methods I need to override to inherit
// from TextWriter (Encoding.Get I guess).
}
public static void Main(string[] args) {
using (DirtyWriter dw = new DirtyWriter("path", Console.Out)) {
Console.SetOut(dw);
// Teh codez
}
}
}
Смотрите, что он записывает и сбрасывает файл все время. Я бы хотел сделать это только в конце выполнения, но я не смог найти способ доступа к выходному буферу.
Кроме того, извините неточности с вышеуказанным кодом (пришлось написать его ad hoc, извините;).