繁体   English   中英

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

[英]why is TextWriter logging to file incomplete?

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

private TextWriter txtMirror = new StreamWriter("mirror.txt");

// Write text
private void Log(string strText)
{
    Console.WriteLine(strText);
    txtMirror.WriteLine(strText);
}

ps 我使用这个解决方案的原因是因为我在 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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM