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
}
}
}
ファイルへの書き込みとフラッシュが常に行われていることを確認してください。実行の最後にのみ実行したいのですが、出力バッファにアクセスする方法が見つかりませんでした。
また、上記のコードの不正確さを許してください (その場しのぎに書く必要がありました。申し訳ありません;)。