鱼C论坛

 找回密码
 立即注册
查看: 3858|回复: 0

[API档案] DeleteFile

[复制链接]
发表于 2016-7-28 04:26:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
注:本文档由 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)所有,转载请注明来源。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 16:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表