为什么TextWriter日志记录到文件不完整



我试图在这里遵循这个解决方案,将我的控制台输出也镜像到日志文件中,但是,我注意到到到文件的输出被切断了,所以整个控制台输出并没有完全输出到文件中。为什么?TextWriter是否仅限于一定数量的行?

private TextWriter txtMirror = new StreamWriter("mirror.txt");
// Write text
private void Log(string strText)
{
Console.WriteLine(strText);
txtMirror.WriteLine(strText);
}

p.s.我使用这个解决方案的原因是,我在main((中调用的函数中也有Console.Writeline。因此,如果我使用这个解决方案,我必须在所有有Console.WriteLine()的地方打开一个using语句。。。这似乎是多余的

您可以使用AutoFlush属性System_IO_StreamWriter_Flush

除非显式调用flush或Close,否则刷新流不会刷新其底层编码器。将AutoFlush设置为true意味着在每次写入操作后,数据将从缓冲区刷新到流,但编码器状态不会刷新。

顺便说一句,如果您多次实例化记录器类,那么您将拥有许多StreamWriter对象。确保按照文件处理它们

此类型实现IDisposable接口。使用完该类型后,应直接或间接处理它。若要直接处置该类型,请在try/catch块中调用其dispose方法。若要间接处理它,请使用诸如using(在C#中(或using(在Visual Basic中(之类的语言构造。有关更多信息,请参阅";使用实现IDisposable的对象";IDisposable接口主题中的部分。

处理对象,确保调用flush,并将任何缓冲的信息写入底层对象。

示例:

// Write text
private void Log(string strText)
{
Console.WriteLine(strText);
using (StreamWriter txtMirror = new StreamWriter("mirror.txt")) {
txtMirror.WriteLine(strText);
}
}

最新更新