And*_*lla 10 .net c# console stdout
我需要有关如何让我的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
}
}
}
Run Code Online (Sandbox Code Playgroud)
看到它一直写入并刷新文件.我只想在执行结束时才这样做,但我找不到任何方法来访问输出缓冲区.
另外,请原谅上述代码的不准确之处(不得不临时写,抱歉;).
我不认为你的做法有什么问题。
如果您想要可重用的代码,请考虑实现一个名为MultiWriter或类似的类,该类将两个(或 N?)个流作为输入TextWriter,并将所有命令、刷新等分发到这些流。然后你可以做这个文件/控制台的事情,但你也可以轻松地分割任何输出流。有用!
| 归档时间: |
|
| 查看次数: |
6836 次 |
| 最近记录: |