如何使用StreamWriter强制写入文件?

3
我通常使用streamwriter writer = new StreamWriter(file)来写入文件。问题在于,直到writer.close()才会实际写入文件。
如果在类创建和类关闭之间发生了什么错误(程序永远不会达到writer close),我将无法在文件中获取任何信息。如何强制在创建和关闭之间进行写操作?

我也需要帮助。下面的解决方案对我没有帮助,因为我想在程序仍在运行并且正在向文件写入内容时从文件中提取内容。 - Xonatron
2个回答

9
请确保您的代码被包含在using语句中:
using (var writer = new StreamWriter(file))
{
    // do your writing
}

这将帮助您“清理”通过自动处理流(包括刷新和关闭),例如在流实例化后抛出未处理的异常时Close()不会被调用的情况下。以上基本等同于:
{
    var writer = new StreamWriter(file);
    try
    {
        // do your writing
    }
    finally
    {
        if (writer != null)
            ((IDisposable)writer).Dispose();
    }
}

注意:任何实现 IDisposable 接口的内容都应该在 using 块内使用,以确保其被正确释放。

7
如果重要的话,在关闭写入器之前,您可以使用Flush确保任何待处理的写入实际上被写入磁盘。不过,说了这么多,听起来您真正的问题是在某些情况下没有在应该关闭写入器时关闭它。无论什么情况下,一旦完成写入操作(即使出现异常),您都应该关闭写入器。您可以使用using(或显式的try/finally块,如果您愿意)来确保始终关闭写入器。

我遇到了与OP相同的问题。即使在调试过程中停止,使用Flush仍会将内容写入文件。谢谢! - Justin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接