1

我有一个使用 FILE_SHARE_DELETE 标志通过 Windows API CreateFile() 打开的文件,这样我就可以在文件句柄仍然打开时删除它。但是在第一个进程删除文件和进程结束之间的窗口中,我希望能够知道文件正在被删除,以便我可以进入重试循环。

我发现错误代码 303 看起来与我正在寻找的完全一样:

ERROR_DELETE_PENDING
    303 (0x12F)
    The file cannot be opened because it is in the process of being deleted.

但是我找不到可以为我返回此代码的东西。有谁知道我如何确定我的文件处于被删除状态但仍然有一个打开的句柄?

4

2 回答 2

4

在 Vista 和更高版本上,您可以使用CreateFile()(确保FILE_SHARE_DELETE指定标志以便打开成功) 打开文件,然后使用GetFileInformationByHandleEx()检索文件的FILE_STANDARD_INFO结构。它有一个BOOLEAN DeletePending数据成员,TRUE如果文件已被标记为删除。

于 2013-08-05T22:24:26.750 回答
1

要获取该错误代码,您需要在函数失败GetLastError后立即调用。当这种情况发生时,CreateFile它将返回ERROR_DELETE_PENDING(错误代码的常量)303

于 2013-08-05T21:27:12.170 回答