C++文件系统:permissions与文件元信息操作
请介绍 中获取和修改文件元信息的 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::available比free更准确(考虑了配额)。