DeleteFile
注:本文档由 vcvycy 翻译,小甲鱼校对。原文链接 -> 传送门
函数功能:
DeleteFile 函数用于删除一个已存在的文件。
若想将此操作实现为事务型操作,使用 DeleteFileTransacted 函数。
API 函数原型:
注释:_In_ 说明该参数是输入的,_opt_ 说明该参数是可选的
BOOL WINAPI DeleteFile(
_In_ LPCTSTR lpFileName
);
参数解析:
参数 含义
lpFileName1. 指向将执行删除操作的文件的文件名
2. 在此函数的 ANSI 版本中,文件名长度被限制为不超过 MAX_PATH 字节。若要将文件名长度扩展为 32767 个宽字符,请调用此函数的 Unicode 版本,且在文件路径中添加前缀 "\\?\"。更多信息,参见 Naming a File
3. 友情提示:在 Windows 10 的 1607 版本中使用此函数 Unicode 版本(DeleteFileW)时,你可以通过相关设置去移除文件名 MAX_PATH 个字符的限制,而不用添加前缀 "\\?\"。具体参见 Naming Files, Paths, and Namespaces 中的“Maximum Path Limitation”部分。
返回值:
1. 如果函数调用成功,返回值是非 0;
2. 如果函数调用失败,返回值是 0。
想获取具体错误信息,调用 GetLastError 函数。
备注:
1. 如果一个程序试图删除一个不存在的文件,则 DeleteFile 函数执行失败,返回错误信息 ERROR_FILE_NOT_FOUND 。如果文件是只读文件,则函数执行失败,返回错误信息 ERROR_ACCESS_DENIED 。
以下是关于文件删除、文件移动、文件关闭的一些技巧:
[*]若想删除一个只读文件,你必须先移除其只读属性
[*]若想删除或重命名文件,你必须要么拥有文件的删除权限,要么在其父目录上,拥有删除子文件的权限
[*]若想在一个文件夹中,递归地删除文件,调用 SHFileOperation 函数
[*]若想移除一个空目录,调用 RemoveDirectory 函数
[*]若想关闭一个打开的文件,调用 CloseHandle 函数
2. 当你创建一个目录时,如果你拥有此目录除了删除权限、删除子文件权限之外的所有权限,且新创建文件的访问控制列表(Access Control lists)继承自此目录,则此时你创建一个文件却没有权限删除它。另一方面,当你在创建一个文件时,对于所返回的文件句柄,你可以获取所有所需要的权限。
如果你在创建文件时,请求删除权限,你可以通过返回的文件句柄实现此文件的删除或者重命名,但却无法通过其他句柄实现此功能。更多信息,参见 File Security and Access Rights。
3. 当程序试图删除一个文件时,如果此文件已经被打开用于普通的 I/O 操作或者作为内存映射文件被使用,则 DeleteFile 函数调用失败(当有其他指向此文件的句柄被打开时,必须指定 FILE_SHARE_DELETE 标记位才能执行删除操作)。
4. DeleteFile 函数标记文件,使之在关闭时被删除。因此,在指向此文件的所有句柄都被关闭之前,文件删除操作不会发生。但是文件被标记之后,对此文件执行 CreateFile 函数将会失败,错误代码为 ERROR_ACCESS_DENIED。
5. 符号连接相关:
如果文件路径指向一个符号链接,则符号链接会被删除,而符号链接指向的文件则不会被删除。如果要删除符号链接指向的文件,你必须调用 CreateFile 函数且指定 FILE_FLAG_DELETE_ON_CLOSE 标记位。
6. 在 Windows 8 和 Windows Server 2012 中,此函数为以下技术所支持:
技术是否支持
Server Message Block (SMB) 3.0 protocol 是
SMB 3.0 Transparent Failover (TFO) 是
SMB 3.0 with Scale-out File Shares (SO) 是
Cluster Shared Volume File System (CsvFS) 是
Resilient File System (ReFS) 是
需求:
Minimum supported client Windows XP [仅桌面应用程序]
Minimum supported server Windows 2003 服务器版 [仅桌面应用程序]
Header FileAPI.h (包含于 Windows.h)
在 Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 和 Windows XP 系统上的 WinBase.h (包含于 Windows.h)
LibraryKernel32.lib
DLL Kernel32.dll
Unicode and ANSI namesDeleteFileW (Unicode) 和 DeleteFileA (ANSI)
【API档案】版权归鱼C工作室(www.fishc.com)所有,转载请注明来源。
页:
[1]