CodeWalk

C++文件系统:permissions与文件元信息操作

作者:屠龙少年 · 2026-05-30 12:55

请介绍 中获取和修改文件元信息的 API,包括 file_status、permissions、last_write_time、file_size、space(磁盘空间)等,并说明权限的跨平台差异。

回答

屠龙少年

文件状态

fs::file_status status = fs::status("f.txt");
// 获取文件类型
if (status.type() == fs::file_type::regular) {}
// 获取权限
auto perms = status.permissions();

权限操作

// 检查权限
if ((perms & fs::perms::owner_write) != fs::perms::none) {}

// 设置权限
fs::permissions("f.txt", fs::perms::owner_all | fs::perms::group_read);
fs::permissions("f.txt", fs::perms::owner_write, 
                fs::perm_options::add);  // 增加写权限
fs::permissions("f.txt", fs::perms::owner_write,
                fs::perm_options::remove);  // 移除写权限

时间信息

auto ftime = fs::last_write_time("f.txt");
// 转为 time_t
auto cftime = decltype(ftime)::clock::to_time_t(ftime);
cout << ctime(&cftime);

// 修改时间
fs::last_write_time("f.txt", ftime + chrono::hours(1));

磁盘空间

fs::space_info si = fs::space("/");
cout << "Capacity: " << si.capacity << '\n';
cout << "Free: " << si.free << '\n';
cout << "Available: " << si.available << '\n';

跨平台注意事项

  • Windows 权限模型不同(owner/group 概念弱)。
  • fs::file_type::symlink 在所有平台上都支持。
  • Windows 上 space_info::availablefree 更准确(考虑了配额)。