내 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
}
}
}
항상 파일에 쓰고 플러시한다는 것을 확인하십시오. 나는 실행의 끝에서만 그것을하고 싶지만 출력 버퍼에 접근하는 방법을 찾을 수 없었다.
또한 위 코드를 사용하여 부정확성을 설명하십시오 (ad hoc, 죄송합니다.).
아주 좋은 아이디어! 실제로 필요한 것은 로거입니다. 그렇게하면 사용자에게 표시되는 것보다 훨씬 많은 정보를 저장할 수 있습니다 (버그는 훨씬 적습니다). 여러 방면에서 가장 좋은 해결책은 문제의 외부인으로부터 오는 다른 접근 방식에서 비롯된 것입니다. –
필자는이 경우 시스템에 필요한 기능을 추가하기 위해 작업량이 적을 때 타사 라이브러리를 사용하는 것이 과도하다고 생각합니다. – Wedge
나는 log4net이 여기에 걸릴 상당한 의존성에 동의한다. –