Winapi 使用打开的句柄删除或重命名文件

Winapi 使用打开的句柄删除或重命名文件,winapi,Winapi,Windows API函数允许您指定所需的访问。有三种选择。如果您从CreateFile获得请求删除访问的句柄,那么如何使用返回的句柄删除该文件?DeleteFile函数接受文件名,而不是句柄 大局: 在保存应用程序中的文件时,我首先将其写入临时文件,然后删除“真实”文件并将临时文件重命名为真实名称。我开始发现搜索索引器出现问题,或者反病毒/间谍软件打开文件进行读取,但不允许删除。这会导致在移动文件时保存失败。我已更改打开代码以请求删除访问权限,以确保在需要保存时可以删除该文件 这一切都很好,但

Windows API函数允许您指定所需的访问。有三种选择。如果您从CreateFile获得请求删除访问的句柄,那么如何使用返回的句柄删除该文件?DeleteFile函数接受文件名,而不是句柄

大局: 在保存应用程序中的文件时,我首先将其写入临时文件,然后删除“真实”文件并将临时文件重命名为真实名称。我开始发现搜索索引器出现问题,或者反病毒/间谍软件打开文件进行读取,但不允许删除。这会导致在移动文件时保存失败。我已更改打开代码以请求删除访问权限,以确保在需要保存时可以删除该文件

这一切都很好,但我仍然有一个差距,第三方应用程序可以抓取我的文件。因为我对临时文件和真实文件都有一个打开的句柄,所以我一直在寻找一种使用这些句柄执行删除和重命名功能的方法。我能找到的唯一选项是关闭句柄,然后调用DeleteFile和MoveFile函数。实际上,我目前正在使用replacefileapi函数来执行这些步骤,但它也传入了文件名,除非我先关闭句柄,否则它将无法工作


我仍然需要支持XP,无法开始使用新的事务文件功能。是否有任何方法可以锁定文件并仍然删除/重命名它们?

在Windows Vista中,有一个功能可以满足您的需要

在以前版本的Windows中没有这样的函数,但您有等效的本机函数,而不是完全公开的函数

我没有使用这些函数的经验,也没有Windows机器来测试它们,因此我无法向您展示代码,但这应该不会太难

当然,有关本机Windows功能的一般免责声明也适用