如果StreamWriter.Dispose()抛出System.IO.IOException,我应该在意吗?

时间:2015-07-07 05:03:03

标签: .net

我使用StreamWriter通过网络(Samba)写入文件。

有时,网络条件不太好,导致我的写入失败。在这种情况下,我想清理并尝试启动一个新文件。

问题在于,即使我尝试清理(即在我的StreamWriter对象上调用Dispose()),我也会收到IOException,因为它无法刷新(因为网络状况不好,请记住),如下所示:

System.IO.IOException
An unexpected network error occurred.

   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.FlushWrite(Boolean calledFromFinalizer)
   at System.IO.FileStream.Flush(Boolean flushToDisk)
   at System.IO.StreamWriter.Dispose(Boolean disposing)
   at System.IO.TextWriter.Dispose()

我在乎这种情况吗?如果我捕获IOException,那么我是否应该尝试以其他方式完成清理?或者我只是忽略IOException并继续前进?

换句话说,我该怎么办?

try
{
    using (StreamWriter writer = new StreamWriter(some_network_file_path, /* ... */))
    {
        while (true)
        {
            /* append lines of csv-style data to the file. */
        }
    }
}
/* writer.Dispose() can throw an IOException as it fails to flush. */
catch (System.IO.IOException)
{
    /*
    What shall I do here, if anything at all?
    Suppose that my only concern is resource leak via the StreamWriter
    object.
    It's easy for me to clean up the data file later by discarding the last
    incomplete line.
    */
}

1 个答案:

答案 0 :(得分:0)

如果您,关心关于:

,您应该关心错误
  • 是否发生,
  • 它发生的事实。

首先要明确的是错误的原因以及它在您的应用程序中发生或未发生的影响。 < / p>

E.g。如果您的I / O失败,您会叹气并认为您的数据丢失了。但是,在连接关闭时(如果你的推论是正确的),再次尝试刷新,如果这次没有错误,你的数据实际上不会丢失。