gpt4 book ai didi

c++ - boost::filesystem::recursive_directory_iterator 拒绝访问 C:\Users

转载 作者:行者123 更新时间:2023-11-30 03:26:46 26 4
gpt4 key购买 nike

我正在扫描整个 C 盘以查找 jpg 文件,代码如下:

std::string extensions[] = { ".jpg" };

recursive_directory_iterator dir("C:\\"), end;
while (dir != end)
{



if (dir->path() == "C:\\Windows" || dir->path() == "C:\\$Recycle.Bin" || dir->path() == "C:\\Program Files" || dir->path() == "C:\\build_static" || dir->path() == "C:\\Perl" || dir->path() == "C:\\Python" || dir->path() == "C:\\Python27" || dir->path() == "C:\\Qt" || dir->path() == "C:\\Qt-5.9.1" || dir->path() == "C:\\boost_1_65_1") //don't recurse in these directories
{
dir.no_push();// don't recurse into this directory.
}

else
{

auto it = std::find_if(begin(extensions), std::end(extensions),
[&](const std::string& s)
{return dir->path().string().find(s) != std::string::npos; });
if (it != std::end(extensions))
{

cout << dir->path() << endl;


}

}
try
{
++dir;
}
catch (boost::filesystem::filesystem_error& fex)
{
std::cout << fex.what() << std::endl; //display the error
cout << dir->path() << endl; //and where it gets stuck
dir.no_push();
++dir;

}
}
}

问题是,它几乎适用于磁盘上的每个文件夹,但它会在 C:\Users 文件夹上引发拒绝访问错误,但不会在 C:\Program Files(x86) 上引发错误(代码在没有管理员权限的情况下运行)。

所以它会递归到程序文件(需要管理员权限的地方)而不是 C:\Users(不需要管理员权限的地方)?为什么程序无法访问 Users 文件夹及其子目录?

几个月前在 Windows 7(家庭)上运行时代码曾经工作。我在 Windows 10 专业版上运行它,我得到这些错误...操作系统会是原因吗?P.S:我正在使用 boost 1.66(也尝试过 1.65,同样的问题)

最佳答案

问题如字面所述:您没有读取/遍历 C:\Users 的权限。

So it would recurse into program files (where admin rghts are needed)

谁说需要管理员权限?!要,是的,不要阅读遍历

and not in C:\Users (where admin rights aren't needed) ?

恰恰相反(你对你拥有的部分有写权限,比如你自己的个人资料)

Why can't the program access to Users folder and it's subdirectories ?

由于操作系统设置的访问控制

我建议阅读 NTFS ACL:http://www.ntfs.com/ntfs-permissions-acl-use.htm

关于c++ - boost::filesystem::recursive_directory_iterator 拒绝访问 C:\Users,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48051135/

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