确定文件是否正在C中的Windows上被删除

时间:2013-08-05 21:22:21

标签: c windows winapi

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

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

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

但我无法找到可以使用的内容,它会为我返回此代码。有谁知道我怎么能确定我的文件处于被删除的状态但是仍然有一个打开的句柄?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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