我有一个应用程序,其中我正在使用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
,直到成功为止,但是它占用了资源,不是一个好的解决方案。
有什么办法可以在wait
上CloseHandle
,这样我就可以CreateFile
了,或者有什么办法我可以avoid the error code 32