使用Boost库递归获取文件名时/media目录读取异常如何解决
问题原因分析
/media是Linux系统默认的可移动介质挂载点,确实存在特殊的权限控制规则,这是你无法正常读取目录内容的核心原因:
/media目录的默认权限通常为drwxr-xr-x,所有者为root,所有用户都拥有读和执行权限,所以你可以遍历到下一层的用户名目录(即/media/username)/media/username目录的默认权限为drwxr-x---,所有者为对应用户、所属用户组为root,只有目录所有者和root用户有权限进入读取内容,其他用户没有访问权限,所以你直接遍历该目录时拿不到任何内容。
另外你现有使用的std::filesystem::recursive_directory_iterator默认会跳过无权限访问的目录、不会抛出异常,所以你看不到明确报错,只会返回能正常访问的路径,看起来就像目录无内容。你可以调整迭代器参数开启异常抛出方便排查问题:
std::filesystem::recursive_directory_iterator( "/media", // 如果你需要看到权限错误提示,将下面的参数改为std::filesystem::directory_options::none std::filesystem::directory_options::skip_permission_denied )
解决方案
- 方案1:以
/media/username对应的所有者用户身份运行你的程序,不要使用其他普通用户或错误的用户身份执行 - 方案2:如果必须跨用户访问,可以给程序添加对应
/media/username的访问ACL权限,或者以root身份运行程序(存在安全风险,不推荐) - 方案3:如果你是要访问固定插入的可移动介质,可以通过修改udev规则调整介质挂载后的目录权限,放开所有用户的访问权限。
内容的提问来源于stack exchange,提问作者Purgoufr
相关产品推荐
相关产品推荐

