当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何保存控制台应用程序的输出》经验,为你挑选了1个好方法。

我需要有关如何让我的C#控制台应用程序通过标准输出向用户显示文本的建议,同时仍然可以在以后访问它.我想实现的实际功能是在程序执行结束时将整个输出缓冲区转储到文本文件中.

我使用的解决方法,虽然我找不到更清晰的方法是子类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
    }
  }
}

看到它一直写入并刷新文件.我只想在执行结束时才这样做,但我找不到任何方法来访问输出缓冲区.

另外,请原谅上述代码的不准确之处(不得不临时写,抱歉;).



1> Mike Schall..:

对此的完美解决方案是将log4net与控制台appender和文件追加器一起使用.还有许多其他appender也可用.它还允许您在运行时关闭和打开不同的appender.


我同意log4net是一个相当重要的依赖.
我认为在这种情况下,使用第三方库可能会有些过分,因为只需要少量工作就可以为系统添加必要的功能.
推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有