C # закрыть поток и удалить файл, если что-то не удалось - PullRequest
3 голосов
/ 24 ноября 2010

Я работаю с потоком файлов в 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 Ответ

12 голосов
/ 24 ноября 2010

Если вы поместите fileStream в блок использования, вам не нужно беспокоиться о его закрытии, а затем просто оставьте очистку (удаление файла в блоке catch.

...