删除现有空目录。 如果 lpPathName 的任何部分通过重新分析点或符号链接重定向,则此函数将失败。
若要将此作作为事务处理作执行,请使用 RemoveDirectoryTransacted 函数。
语法
BOOL RemoveDirectory2A(
LPCSTR lpPathName,
DIRECTORY_FLAGS DirectoryFlags
);
参数
lpPathName
要删除的目录的路径。 此路径必须指定一个空目录,调用过程必须具有对目录的删除访问权限。
默认情况下,名称限制为 MAX_PATH 个字符。 若要将此限制扩展到 32,767 宽字符,请将“\\?\”前面追加到路径。 有关详细信息,请参阅 命名文件、路径和命名空间。
小提示
你可以选择加入以删除 MAX_PATH 限制,而无需追加“\\?\”。 有关详细信息,请参阅 命名文件、路径和命名空间 的“最大路径长度限制”部分。
DirectoryFlags
指定如何删除目录的标志。 此参数可以是以下值的组合:
价值 | 含义 |
---|---|
DIRECTORY_FLAGS_DISALLOW_PATH_REDIRECTS0x00000001 |
阻止重新分析点或符号链接重定向 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 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 11 24H2 [桌面应用 |UWP 应用] |
支持的最低服务器 | Windows Server 2025 [桌面应用 |UWP 应用] |
标头 | fileapi.h (包括 Windows.h) |
图书馆 | Kernel32.lib |
DLL | Kernel32.dll |