Уже есть принятый ответ, но, возможно, кто-то найдет это полезным (или посмеется над этим, если я снова пропустил что-то очевидное и полностью потратил свое время)
У меня сложилось впечатление, что File.Delete
либо удалитфайл и затем возвращать, или иначе генерировать исключение - пока я не прочитаю эту ветку.
Windows API упоминает, что при вызове DeleteFile
файл «помечается для удаления при закрытии», поскольку он позволяет вызывать удаление пооткрытый файл.После того, как файл помечен для удаления, попытка открыть его завершится с ошибкой «Доступ запрещен».Когда последний дескриптор этого файла закрыт, файл фактически удаляется.
Если Windows действительно удаляет файл перед возвратом после последнего вызова CloseHandle
файла, теоретически этот код гарантирует, что файлудаляется ниже блока using
:
using (File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Delete))
{
File.Delete(path);
}
Сбой File.Open
произойдет, если другой процесс в данный момент откроет файл.
Обратите внимание на то, что File.Delete
даже успешно выполняется, если файл не существует (если каталог не существует).