DeleteFile2A 函数 (fileapi.h)

删除现有文件。 如果 lpFileName 的任何部分通过重新分析点或符号链接重定向,此函数将失败。

若要将此作作为事务处理作执行,请使用 DeleteFileTransacted 函数。

语法

BOOL DeleteFile2A(
  LPCSTR lpFileName,
  DWORD  Flags
);

参数

lpFileName

要删除的文件的名称。

默认情况下,名称限制为 MAX_PATH 个字符。 若要将此限制扩展到 32,767 宽字符,请将“\\?\”前面追加到路径。 有关详细信息,请参阅 命名文件、路径和命名空间

小提示

你可以选择加入以删除 MAX_PATH 限制,而无需追加“\\?\”。 有关详细信息,请参阅 命名文件、路径和命名空间 的“最大路径长度限制”部分。

Flags

用于指定如何处理正在删除的文件的标志。 此参数可以是以下值的组合之一:

价值 含义
FILE_FLAGS_DISALLOW_PATH_REDIRECTS
0x00000001
阻止重新分析点或符号链接重定向 lpFileName

返回值

如果函数成功,则返回值为非零。

如果函数失败,则返回值为零(0)。 若要获取扩展的错误信息,请调用 GetLastError。 可能的错误包括:

返回代码 说明
ERROR_PATH_REDIRECTED lpFileName 由重新分析点和/或符号链接重定向。

注解

如果应用程序尝试删除不存在的文件, DeleteFile2 函数将失败并 ERROR_FILE_NOT_FOUND。 如果文件是只读文件,则函数会失败并 ERROR_ACCESS_DENIED

以下列表标识了删除、删除或关闭文件的一些提示:

  • 若要删除只读文件,首先必须删除只读属性。
  • 若要删除或重命名文件,必须对文件具有删除权限,或者删除父目录中的子权限。
  • 若要以递归方式删除目录中的文件,请使用 SHFileOperation 函数。
  • 若要删除空目录,请使用 RemoveDirectory 函数。
  • 若要关闭打开的文件,请使用 CloseHandle 函数。

如果设置了除删除和删除子级以外的所有访问权限的目录,并且继承了新文件的访问控制列表(ACL),则可以创建一个文件,而无需删除它。 但是,可以创建一个文件,然后在创建文件时返回的句柄上获取请求的所有访问权限。

如果在创建文件时请求删除权限,则可以使用该句柄删除或重命名文件,但不能使用任何其他句柄来删除或重命名该文件。 有关详细信息,请参阅 文件安全性和访问权限

如果应用程序尝试删除其他句柄为正常 I/O 打开的文件或内存映射文件(在打开其他句柄时必须指定FILE_SHARE_DELETE),DeleteFile2 函数将失败。

DeleteFile2 函数在关闭时标记要删除的文件。 因此,在关闭文件的最后一个句柄之前,不会删除文件。 对 CreateFileCreateFile2CreateFile3 的后续调用失败, ERROR_ACCESS_DENIED

使用 POSIX 删除会导致文件在句柄保持打开状态时被删除。 后续调用 CreateFile 以打开文件失败, ERROR_FILE_NOT_FOUND

如果路径指向符号链接,则删除符号链接,而不是目标。 若要删除目标,必须调用 CreateFile 并指定 FILE_FLAG_DELETE_ON_CLOSE

以下技术支持此函数:

科技 支持
服务器消息块 (SMB) 3.0 协议 是的
SMB 3.0 透明故障转移 (TFO) 是的
具有横向扩展文件共享的 SMB 3.0 (SO) 是的
群集共享卷文件系统 (CsvFS) 是的
可复原文件系统 (ReFS) 是的

注释

标头 fileapi.hDeleteFile2 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

例子

有关示例,请参阅 “锁定和解锁文件中的字节范围”。

要求

要求 价值
最低支持的客户端 Windows 11 24H2 [桌面应用 |UWP 应用]
支持的最低服务器 Windows Server 2025 [桌面应用 |UWP 应用]
标头 fileapi.h (包括 Windows.h)
图书馆 Kernel32.lib
DLL Kernel32.dll

另请参阅

CreateDirectory2

CreateFile3

RemoveDirectory2