2011-12-06 85 views
11

Windows API函数CreateFile函数允许您指定所需的访问权限。有三个选项read, write and delete。如果你从CreateFile获得一个请求删除访问的句柄,那么你如何使用返回的句柄删除该文件? DeleteFile函数获取文件名称,而不是句柄。使用打开的句柄删除或重命名文件

大图: 保存时从我的应用程序写出一个临时文件文件,再删除“真正”的文件和临时文件重命名为本名。我已经开始看到搜索索引器或反病毒/间谍软件打开文件进行阅读但不允许删除的问题。这会导致我的保存在移动文件时失败。我已更改开放代码以请求删除访问权限,以确保在保存时可以删除该文件。

这一切工作正常,但我仍然有一个第三方应用程序可以抓住我的文件的差距。由于我有一个打开的临时文件和真实文件的句柄,我正在寻找一种方法来执行使用这些句柄的删除和重命名功能。我能找到的唯一选择是关闭句柄,然后调用DeleteFile和MoveFile函数。其实我目前正在使用ReplaceFile API函数来执行这些步骤,但它也有传入的文件名,并且不会工作,除非我先关闭我的手柄。

我仍然需要支持XP,并且无法开始使用新的事务文件功能。有没有办法保持文件锁定,仍然删除/重命名它们?

回答

6

在Windows Vista中有那个功能SetFileInformationByHandle,可以做你需要的。

在以前的Windows版本中没有这样的功能,但是你有等效的本地,不是很公共的功能NtSetInformationFile

我没有这些功能的经验,也没有Windows机器来测试它们,所以我不能告诉你代码,但这不应该那么困难。

当然,关于本机Windows功能的一般声明也适用。

+0

谢谢,这正是我所需要的。 –