如果出现故障,C#关闭流并删除文件

时间:2010-11-24 06:55:04

标签: c# filestream

我正在使用C#中的文件流。它是一个存储缓存,因此如果写入文件(损坏的数据,......)出现问题,我需要删除文件重新抛出异常来报告问题。我正在考虑如何以最好的方式实现它。我的第一个尝试是:

Stream fileStream = null;
try
{
    fileStream = new FileStream(GetStorageFile(),
        FileMode.Create, FileAccess.Write, FileShare.Write);
    //write the file ...
}
catch (Exception ex)
{
    //Close the stream first
    if (fileStream != null)
    {
      fileStream.Close();
    }
    //Delete the file
    File.Delete(GetStorageFile());
    //Re-throw exception
    throw;
}
finally
{
    //Close stream for the normal case
    if (fileStream != null)
    {
      fileStream.Close();
    }
}

正如您将看到的,如果写入文件有问题,fileStream将关闭两次。我知道它有效,但我不认为这是最好的实现。

我认为我可以移除finally块,并关闭try块中的流,但我已在此处发布,因为你们是专家,我想听到一个声音专家。

先谢谢。

1 个答案:

答案 0 :(得分:12)

如果你把fileStream放在一个使用的块中,你不必担心关闭它,然后只是保持清理(删除catch块中的文件。

try 
{ 
    using (FileStream fileStream = new FileStream(GetStorageFile(), 
        FileMode.Create, FileAccess.Write, FileShare.Write))
    {
        //write the file ... 
    }
} 
catch (Exception ex) 
{ 
    File.Delete(GetStorageFile()); 
    //Re-throw exception 
    throw; 
}