ReadDirectoryChanges是否阻止写访问?

时间:2019-04-24 10:34:57

标签: visual-studio winapi

我有一个应用程序,可以跟踪目录中的更改并将其上载到服务器。

auto hdir = CreateFile(dir.c_str(), GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
for (;;)
{
    vector<char> d(16384);
    DWORD by = 0;
    ReadDirectoryChangesW(hdir, d.data(), 16384, false, FILE_NOTIFY_CHANGE_LAST_WRITE, &by, 0, 0); 
    ... // Process changes and upload them
}

但是,似乎ReadDirectoryChanges阻止了某些写访问。当Visual Studio在跟踪目录中启动项目时,它抱怨该目录需要管理员访问权限(但没有尝试写入任何内容,ReadDirectoryChanges()不会从我的应用程序返回)。

文件更新后,函数会正确返回并进行处理,但是我注意到有些时候Visual Studio在目录内创建了一个临时文件,可能是恢复文件。

此功能有什么问题?

1 个答案:

答案 0 :(得分:0)

打开目录时,您仅共享读取访问权限,而不共享写入访问权限。添加links = [item['href'] for item in soup.select('[href^=http]')] 标志:

FILE_SHARE_WRITE

而且,您根本不检查错误。

auto hdir = CreateFile(..., FILE_SHARE_READ | FILE_SHARE_WRITE, ...);