由于SHARIN_VIOLATION,CreateFile失败,因为其他操作系统进程正在使用它

时间:2018-10-15 09:40:00

标签: c++ windows winapi

我有一个应用程序,其中我正在使用ReadDirectoryChanges来监视目录中的更改。如果有任何新文件被创建,修改或删除,我将收到通知。收到通知后,我将使用CreateFile API来打开带有标志OPEN_EXISTING的文件,并使用该句柄调用其他Windows API以获取文件属性。我打电话给CreateFile

的方式
CreateFile(path,GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL ,
NULL );

但是有时我会遇到Error 32,这违反了共享规范,即文件正在被其他进程使用,因此我的应用程序无法访问。

在调用api之前,我在sleep中添加了100ms,在此时其他进程已释放文件(或关闭的句柄)的情况下,它工作正常。但是我不想添加任何显式的睡眠,并且我不确定睡眠时间,在不同的环境下它可能会有所不同。这次是基于反复试验

我还尝试了连续轮询/调用CreateFile,直到成功为止,但是它占用了资源,不是一个好的解决方案。

有什么办法可以在waitCloseHandle,这样我就可以CreateFile了,或者有什么办法我可以avoid the error code 32

0 个答案:

没有答案