Поделиться через


Функция RemoveDirectory2A (fileapi.h)

Удаляет существующий пустой каталог. Эта функция завершится ошибкой, если какая-либо часть lpPathName перенаправляется через точку повторного определения или символьную ссылку.

Чтобы выполнить эту операцию как транзакцию, используйте функцию RemoveDirectoryTransacted .

Синтаксис

BOOL RemoveDirectory2A(
  LPCSTR          lpPathName,
  DIRECTORY_FLAGS DirectoryFlags
);

Параметры

lpPathName

Путь к каталогу, который нужно удалить. Этот путь должен указать пустой каталог, и вызывающий процесс должен иметь доступ к каталогу.

По умолчанию имя ограничено MAX_PATH символами. Чтобы расширить это ограничение до 32 767 расширенных символов, добавьте "\\?\" в путь. Дополнительные сведения см. в разделе Именование файлов, путей и пространств имен.

Подсказка

Вы можете отказаться от ограничения MAX_PATH без предварительного добавления "\\?\". Дополнительные сведения см. в разделе "Ограничение максимальной длины пути" именования файлов, путей и пространств имен .

DirectoryFlags

Флаги, указывающие способ удаления каталога. Этот параметр может быть сочетанием следующих значений:

Ценность Значение
DIRECTORY_FLAGS_DISALLOW_PATH_REDIRECTS
0x00000001
Запрет перенаправления lpPathName с помощью точек повторного анализа или символьных ссылок.

Возвращаемое значение

Если функция выполнена успешно, возвращаемое значение ненулевое.

Если функция завершается ошибкой, возвращаемое значение равно нулю. Чтобы получить расширенные сведения об ошибке, вызовите GetLastError.

Замечания

Функция RemoveDirectory2 помечает каталог для удаления при закрытии. Поэтому каталог не удаляется до закрытия последнего дескриптора каталога.

Чтобы рекурсивно удалить файлы в каталоге, используйте функцию SHFileOperation .

RemoveDirectory2 можно использовать для удаления соединения каталогов. Так как целевой каталог и его содержимое останутся доступными через его канонический путь, сам целевой каталог не затрагивается путем удаления соединения, который предназначен для него. По этой причине, если lpPathName ссылается на соединение каталогов, RemoveDirectory2 удаляет указанную ссылку независимо от того, является ли целевой каталог пустым или нет. Дополнительные сведения о соединениях см. в разделе "Жесткие связи" и "Соединения".

Использование удаления POSIX приводит к удалению каталога, пока дескриптор остается открытым. Последующие вызовы CreateDirectory или CreateDirectory2, чтобы открыть каталог сбоем с ERROR_FILE_NOT_FOUND.

Эта функция поддерживается следующими технологиями:

Технология Поддерживается
Протокол SMB 3.0 Да
Отработка отказа SMB 3.0 (TFO) Да
SMB 3.0 с масштабируемыми общими папками (SO) Да
Файловая система общего тома кластера (CSVFS) Да
Отказоустойчивая файловая система (ReFS) Да

Примечание.

Заголовок fileapi.h определяет RemoveDirectory2 как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
Минимально поддерживаемый клиент Windows 11 24H2 [классические приложения | Приложения UWP]
минимальный поддерживаемый сервер Windows Server 2025 [классические приложения | Приложения UWP]
Заголовок fileapi.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

CreateDirectory2

создание и удаление каталогов

функций управления каталогами

RemoveDirectoryTransacted