加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:45:44 所属栏目:百科 来源:网络整理
导读:我需要关于如何让C#控制台应用程序通过标准输出向用户显示文本的建议,同时仍然可以访问它.我想实现的实际功能是在程序执行结束时将整个输出缓冲区转储到文本文件. 当我没有找到更清洁的方法时,我使用的解决方法是将TextWriter子类化覆盖写入方法,以便他们都
我需要关于如何让C#控制台应用程序通过标准输出向用户显示文本的建议,同时仍然可以访问它.我想实现的实际功能是在程序执行结束时将整个输出缓冲区转储到文本文件.

当我没有找到更清洁的方法时,我使用的解决方法是将TextWriter子类化覆盖写入方法,以便他们都可以写入文件并调用原始的stdout writer.这样的事情

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
    }
  }
}

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

另外,以上代码的借口不准确(不得不写得特别,抱歉).

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读