我正在通过同步调用ReadDirectoryChangesW来查看目录。当有新文件可用时,我会尝试用CreateFile、GENERIC_READ和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 (...);发布于 2009-11-17 13:39:24
据我所知,在关闭的文件上没有用户模式的通知API。您提出的循环可能真的是最好的方法。你唯一能做的就是在一个过滤器驱动程序和进程监视器中观察CloseFile,但是讨厌……
https://stackoverflow.com/questions/1746781
复制相似问题