Я думаю, что вы действительно ищете возможность совершить сделку. Поскольку диск может записывать только один сектор за раз, вы можете удалять файлы только по одному за раз. Что вам нужно, это возможность откатить предыдущие удаления, если одно из удалений не произошло успешно. Такие задачи обычно зарезервированы для баз данных. Может ли ваша файловая система выполнять транзакции, зависит от того, какую файловую систему и ОС вы используете. NTFS в Windows Vista поддерживает Транзакционный NTFS . Я не слишком уверен в том, как это работает, но это может быть полезно.
Также для Windows существует нечто, называемое shadow copy , которое в мире Linux называется LVM Snapshot . По сути, это моментальный снимок диска. Вы можете сделать моментальный снимок непосредственно перед выполнением удаления, и, если он окажется неудачным, скопируйте файлы обратно из моментального снимка. Я создал теневые копии с использованием WMI в VBScript, я уверен, что аналогичные API существуют и для C / C ++.
Одна вещь о Shadow Copy и LVM Snapsots. Работа на весь раздел. Таким образом, вы не можете сделать снимок только одного каталога. Однако создание снимка всего диска занимает всего пару секунд. Таким образом, вы бы сделать снимок. Удалите файлы, а затем, в случае неудачи, скопируйте файлы обратно из снимка. Это будет медленно, но в зависимости от того, как часто вы планируете откат, это может быть приемлемо. Другая идея - восстановить весь снимок. Это может или не может быть хорошо, так как это откатит все изменения на всем диске. Не хорошо, если ваша ОС или другие важные файлы находятся там. Если этот раздел содержит только файлы, которые вы хотите удалить, восстановление всего снимка может быть проще и быстрее.