Что означает код NTSTATUS 0xC0000101 (STATUS_DIRECTORY_NOT_EMPTY)?

 
Предыдущий Следующий
STATUS_VARIABLE_NOT_FOUND STATUS_FILE_CORRUPT_ERROR

STATUS_DIRECTORY_NOT_EMPTY

STATUS_DIRECTORY_NOT_EMPTY возвращается, когда операция удаления направлена на каталог, в котором ещё есть записи. Удаление каталога отличается от рекурсивного удаления дерева: перед окончательным удалением каталог должен быть пуст.

Что требуется для «пустого» каталога

Вызывающий код должен учитывать обычные файлы и дочерние каталоги, а также параллельную активность. Другой процесс может создать новую запись между перечислением и удалением, а дескриптор может удерживать каталог в использовании, пока очистка ещё продолжается. Документация Windows указывает, что удаление каталога завершается после закрытия соответствующих дескрипторов, поэтому жизненный цикл и правила совместного доступа могут быть так же важны, как видимое содержимое.

Надёжная стратегия очистки

  • Явно перечисляйте и удаляйте дочерние записи; не ожидайте, что RemoveDirectory выполнит рекурсию.
  • Обрабатывайте точки повторного анализа и символические ссылки в соответствии с требуемой политикой, а не переходите по ним случайно.
  • Повторно перечислите содержимое перед окончательным удалением, если другой процесс может изменять дерево.
  • Регистрируйте имена оставшихся записей и создавшую их операцию; общий повтор скрывает причину непустого каталога.

При пользовательской очистке отличайте реальное наличие содержимого от проблемы доступа или совместного использования. Для непустого каталога требуется иное исправление, чем для каталога, заблокированного разрешениями или несовместимым открытым дескриптором.

См. Создание и удаление каталогов и RemoveDirectory.


Нужно найти другой код? Найти другой код состояния или ошибки.