如何保存控制台应用程序的输出

2023-11-27

我需要有关如何让我的 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
    }
  }
}

看到它始终写入并刷新文件。我只想在执行结束时执行此操作,但我找不到任何访问输出缓冲区的方法。

另外,请原谅上述代码的不准确之处(必须编写它ad hoc, 对不起 ;)。


完美的解决方案是使用log4net带有控制台附加器和文件附加器。还有许多其他附加程序可用。它还允许您在运行时关闭和打开不同的附加程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何保存控制台应用程序的输出 的相关文章

随机推荐