Является ли File.Delete () атомарным под .NET - PullRequest
7 голосов
/ 09 февраля 2010

Целевая ОС: Win2003

Как написано в других SO-вопросах об атомарности файловых операций, Win32 просто не был предназначен для транзакций. Тем не менее мне интересно, может ли удаление файла быть неатомарным. Ведь его либо удаляют, либо нет. Или файл может оставаться в любом другом промежуточном состоянии в файловой системе NTFS, вызванном сбоем системы или чем-то еще во время удаления?

Ответы [ 2 ]

12 голосов
/ 09 февраля 2010

NTFS - это журнализированная файловая система . Журнал в основном эквивалентен журналу транзакций в базе данных. Это обеспечит согласованность и целостность структур файловой системы, как это делает база данных для своих таблиц. Хотя File.Delete не имеет никакого транзакционного кода на высоком уровне, NTFS поддерживает целостность транзакций на уровне файловой системы. Это может быть неверно для других драйверов файловой системы.

5 голосов
/ 21 декабря 2010

Старый вопрос, но если бы я мог добавить к ответу @ Mehdrad, с несколько иной точки зрения ...

В Windows удаление файла часто даже не полностью синхронно, и даже неодна операция.В этом смысле он определенно не атомарный.

Если вы посмотрите на такие инструменты, как Process Monitor или посмотрите документацию MSFT для написания драйвера файловой системы, вы заметите, что для удаления файла в Windowsэто многоступенчатый процесс.Сначала вам нужен дескриптор файла.Затем вы устанавливаете его расположение на «удалено».Это переводит файл в состояние, в котором он имеет «ожидающий удаления».Файл даже не будет удален из вида, пока не будет закрыт последний дескриптор.Когда файл находится в этом состоянии, новые попытки открыть файл завершатся неудачно с STATUS_DELETE_PENDING.Этот статус больше относится к среде выполнения - если вы отключили или перезагрузили, файлы не останутся в этом состоянии.

Таким образом, это может иметь или не иметь отношение к тому, как выиспользование удалений, но важно помнить, что в Windows удаление не обязательно вступает в силу сразу же, и при одновременном доступе может заблокировать дальнейшие запросы на доступ к файлу.

...