gpt4 book ai didi

c++ - 尝试打开目录进行读取时,CreateFile 总是返回错误 5(访问被拒绝)

转载 作者:行者123 更新时间:2023-11-28 04:14:22 27 4
gpt4 key购买 nike

我想打开目录句柄,以便我可以查看该目录的文件更改。我已经在 winapi 上编写了一个简单的类包装器,这就是我在启动 watch 之前设置目录路径的方式:

bool SetDirectory(const std::string& dirname)
{
HANDLE dirHandleNew = CreateFile(
dirname.c_str(),
// Just normal reading
FILE_GENERIC_READ,
// Share all, do not lock the file
FILE_SHARE_READ | FILE_SHARE_DELETE | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);

if (INVALID_HANDLE_VALUE != dirHandleNew)
{
_dirHandle = dirHandleNew;
return true;
}
else
{
_dirHandle = 0;
RLog("Cannot open directory %s for filesystem watching. Win error: %d (%s)", dirname.c_str(), GetLastError(), GetLastErrorAsString().c_str());
return false;
}
}

错误总是:

Cannot open directory D:\tools for filesystem watching. Win error: 5 (Access is denied.)

我尝试了不同卷上的不同文件夹以查看这是否是一个真正的权限问题,但它看起来不像。 D:\tools 在我的 PC 中是一个普通文件夹,所有用户都可以访问。但正如我所说,我也尝试了其他文件夹,错误总是一样。

我还尝试使用 FILE_LIST_DIRECTORY(我只需要目录列表)和 GENERIC_READ 打开。错误还是一样。

可能CreateFile参数有误?

最佳答案

不要使用 FILE_ATTRIBUTE_NORMAL!

要使用 CreateFile 打开目录,请使用 FILE_FLAG_BACKUP_SEMANTICS 而不是 FILE_ATTRIBUTE_NORMAL

您应该在 dwFlagsAndAttributes 参数中指定 FILE_FLAG_BACKUP_SEMANTICS

现在应该可以了。

关于c++ - 尝试打开目录进行读取时,CreateFile 总是返回错误 5(访问被拒绝),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56987026/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com