necesito consejos sobre cómo tener mi C# aplicación de consola de visualización de texto al usuario a través de la salida estándar sin dejar de ser capaz de acceder más tarde. La característica real que me gustaría implementar es descargar todo el buffer de salida a un archivo de texto al final de la ejecución del programa.Cómo guardar la salida de una aplicación de consola
La solución alternativa que uso mientras no encuentro un enfoque más limpio es la subclase TextWriter
anulando los métodos de escritura para que ambos escriban en un archivo y llamen al escritor original de stdout. Algo como esto:
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
}
}
}
ver que se escribe en el archivo y elimina todo el tiempo. Me encantaría hacerlo solo al final de la ejecución, pero no pude encontrar ninguna forma de acceder al buffer de salida.
Además, excuse las imprecisiones con el código anterior (tuvo que escribirlo ad hoc, lo siento;).
¡Muy buena idea! De hecho, lo que necesito es un registrador. De esa manera puedo almacenar mucha más información que la que se muestra simplemente al usuario (y le molesto mucho menos). Muchas veces la mejor solución proviene de un enfoque diferente, proveniente de alguien externo al problema. –
Creo que en este caso puede ser excesivo usar una biblioteca de terceros cuando puede requerir solo una pequeña cantidad de trabajo agregar la funcionalidad necesaria al sistema. – Wedge
Acepto que log4net es una dependencia bastante pesada para tomar aquí. –