【发布时间】:2008-09-14 03:50:10
【问题描述】:
我需要有关如何让我的 C# 控制台应用程序通过标准输出向用户显示文本,同时以后仍然可以访问它的建议。我想要实现的实际功能是在程序执行结束时将整个输出缓冲区转储到文本文件中。
当我没有找到更简洁的方法时,我使用的解决方法是将TextWriter 子类化,覆盖写入方法,这样它们既可以写入文件,又可以调用原始的标准输出写入器。像这样的:
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
}
}
}
看到它一直在写入和刷新文件。我只想在执行结束时才这样做,但我找不到任何访问输出缓冲区的方法。
另外,请原谅上述代码的不准确之处(不得不写它临时,抱歉;)。
【问题讨论】: