使用ghc::filesystem创建目录树权限受限,如何解决?
解决ghc::filesystem创建目录权限问题的方案
核心原因
ghc::filesystem::create_directories 默认使用的目录权限通常偏严格(比如0700,仅所有者拥有读写执行权限),或受系统默认umask影响进一步限制权限,导致后续删除、修改操作需要sudo。
解决方案:显式指定目录权限
调用create_directories时,通过第二个参数显式设置合适的权限,确保当前用户对目录拥有完整操作权限,同时兼顾安全性:
示例代码
#include <ghc/filesystem.hpp> #include <fstream> namespace fs = ghc::filesystem; int main() { // 目标目录树路径 fs::path target_dir = "./demo_dir/level1/level2"; // 显式设置权限:所有者读写执行,组和其他用户读执行(对应0755) fs::create_directories( target_dir, fs::perms::owner_all | fs::perms::group_read | fs::perms::group_exec | fs::perms::others_read | fs::perms::others_exec ); // 也可以直接用八进制数值指定(注意前缀0) // fs::create_directories(target_dir, static_cast<fs::perms>(0755)); // 后续写入文件示例 fs::path target_file = target_dir / "test.txt"; std::ofstream file(target_file); if (file.is_open()) { file << "Test content" << std::endl; file.close(); } return 0; }
关键说明
- 使用
fs::perms枚举组合权限更具可读性:owner_all:对应0700(所有者读、写、执行)group_read+group_exec:对应0050(组用户读、执行)others_read+others_exec:对应0005(其他用户读、执行)
- 若需允许同组用户写入目录,可添加
fs::perms::group_write,对应权限0775 - 避免使用过于宽松的
0777(所有用户都有读写执行权限),存在安全风险
额外处理:忽略系统umask影响
系统umask会过滤掉部分权限位,如果需要强制设置指定权限,可在创建目录后调用fs::permissions覆盖:
fs::create_directories(target_dir); // 强制设置权限,忽略umask fs::permissions( target_dir, fs::perms::owner_all | fs::perms::group_read | fs::perms::group_exec | fs::perms::others_read | fs::perms::others_exec, fs::perm_options::replace );
内容的提问来源于stack exchange,提问作者manasvb
相关产品推荐
相关产品推荐

