我正在通过调用查看目录ReadDirectoryChangesW
同步地。当新文件可用时,我尝试立即访问它CreateFile
with GENERIC_READ
and FILE_SHARE_READ
,但这给了我ERROR_SHARING_VIOLATION
。当我尝试读取文件时,将文件放入监视目录的进程尚未完成写入。
有什么方法可以可靠地等待文件可供读取吗?我可以将该方法放入如下循环中,但我希望有更好的方法。
while ((hFile = CreateFile (path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)
{
if (GetLastError() == ERROR_SHARING_VIOLATION)
Sleep (500);
else
break; // some other error occurred
}
if (hFile == INVALID_HANDLE_VALUE)
{
// deal with other error
return 0;
}
ReadFile (...);
我认为没有针对您正在寻找的事件类型的通知,但作为一种改进,我建议逐步延迟。这样,您将获得对拖/放等操作的快速响应时间,并且如果用户在 Excel 中打开文件一个小时,也不会因紧密循环而占用 CPU。
int delay= 10;
while ((hFile = CreateFile (path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)
{
if (GetLastError() == ERROR_SHARING_VIOLATION) {
Sleep (delay);
if (delay<5120) // max delay approx 5.Sec
delay*= 2;
}
else
break; // some other error occurred
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)