全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

c++怎么使用std::filesystem获取磁盘空间_c++ space_info信息解析【实战】

std::filesystem::space() 返回的 space_info 包含 capacity(总容量)、free(非特权用户空闲字节数)和 available(进程实际可写入字节数),其中 available ≤ free,因后者扣除 root 保留空间、配额及文件系统开销。

std::filesystem::space() 返回的 space_info 到底包含什么

它返回一个 std::filesystem::space_info 结构体,含三个 uintmax_t 成员:capacity(总字节数)、free(非特权用户可用空闲字节数)、available(当前进程实际可写入的字节数)。注意:free ≠ available——后者会扣除 root 保留空间、配额限制、甚至某些文件系统(如 ext4)的 reserved blocks。

调用 std::filesystem::space() 的正确姿势

必须传入一个**有效路径**(不一定是文件,目录也行),且该路径需位于目标文件系统根下;否则可能抛出 std::filesystem::filesystem_error。常见错误是传入空字符串、不存在路径或跨挂载点路径(比如在 Linux 上对 /proc/sys 调用)。

  • 推荐用 std::filesystem::temp_directory_path()std::filesystem::current_path() 作为安全起点
  • Windows 下路径如 "C:/" 可用,但注意结尾斜杠不能少("C:" 是相对路径,行为未定义)
  • Linux/macOS 下建议用 "/" 获取根文件系统,或 "/home" 查看 home 所在分区
#include 
#include 

int main() {
    try {
        auto si = std::filesystem::space("/"); // ← 关键:必须是挂载点路径
        std::cout << "Capacity: " << si.capacity << " bytes\n";
        std::cout << "Free:     " << si.free << " bytes\n";
        std::cout << "Available:" << si.available << " bytes\n";
    } catch (const std::filesystem::filesystem_error& e) {
        std::cerr << "Error: " << e.what() << "\n";
    }
}

为什么 available 比 free 小?哪些场景会放大这个差值

差值主要来自三类限制:root reserved space(ext4 默认保留 5%)、user quotas(磁盘配额)、file system overhead(如 XFS 的 AG 管理块)。在容器或 CI 环境中尤其明显——Docker overlay2 层、GitHub Actions 的 runner 磁盘常设配额,导致 available 远低于 free

  • 检查是否启用配额:quota -u $USER(Linux)或 repquota -a
  • 查看 ext4 保留比例:tune2fs -l /dev/sda1 | grep "Reserved block count"
  • 生产代码中判断磁盘是否“够用”,应始终用 available,而非 freecapacity

Windows 和 Linux 下 behavior 差异与兼容性注意点

Windows(NTFS)通常不区分 freeavailable,二者值相等;而 Linux(ext4/xfs/btrfs)严格区分。C++20 标准未强制要求实现差异,所以依赖 available == free 会出问题。

  • 编译时确保开启 C++20:-std=c++20(GCC/Clang)或 /std:c++20(MSVC)
  • MSVC 需链接 Shlwapi.lib(已默认包含),但 MinGW-w64 某些旧版本需手动加 -lshlwapi
  • 交叉编译或嵌入式环境(如 musl libc)可能未完全实现 std::filesystem,建议先 #ifdef __cpp_lib_filesystem 检查
实际用的时候,别只看 free —— 写日志、解压包、生成缓存前,务必用 available 做容量预检,否则在配额受限的服务器上容易 runtime fail。


# linux  # git  # docker  # windows  # github  # 字节  # mac  # ai  # c++  # ios  # macos  # 解压  # count  # Filesystem  # 字符串  # 结构体  # 文件系统  # 不存在  # 而非  # 只看  # 则在  # 如在  # 也行  # 三类  # 抛出  # 不能少 


相关文章: 如何在Golang中使用replace替换模块_指定本地或远程路径  如何选择网络建站服务器?高效建站必看指南  如何通过虚拟主机快速搭建个人网站?  如何用景安虚拟主机手机版绑定域名建站?  威客平台建站流程解析:高效搭建教程与设计优化方案  英语简历制作免费网站推荐,如何将简历翻译成英文?  建站之星下载版如何获取与安装?  如何用低价快速搭建高质量网站?  如何在Windows环境下新建FTP站点并设置权限?  如何访问已购建站主机并解决登录问题?  黑客入侵网站服务器的常见手法有哪些?  建站之星安装后界面空白如何解决?  c# 服务器GC和工作站GC的区别和设置  建站主机核心功能解析:服务器选择与网站搭建流程指南  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  想学网站制作怎么学,建立一个网站要花费多少?  如何在阿里云服务器自主搭建网站?  建站之星后台密码遗忘或太弱?如何重置与强化?  如何在腾讯云服务器上快速搭建个人网站?  如何在企业微信快速生成手机电脑官网?  如何选择建站程序?包含哪些必备功能与类型?  安徽网站建设与外贸建站服务专业定制方案  开封网站制作公司,网络用语开封是什么意思?  如何挑选优质建站一级代理提升网站排名?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  建站主机功能解析:服务器选择与快速搭建指南  建站之星微信建站一键生成小程序+多端营销系统  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  制作农业网站的软件,比较好的农业网站推荐一下?  如何快速搭建高效可靠的建站解决方案?  建站之星免费版是否永久可用?  导航网站建站方案与优化指南:一站式高效搭建技巧解析  用v-html解决Vue.js渲染中html标签不被解析的问题  建站之星如何优化SEO以实现高效排名?  如何配置IIS站点权限与局域网访问?  如何通过VPS建站实现广告与增值服务盈利?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  建站主机服务器选型指南与性能优化方案解析  如何配置WinSCP新建站点的密钥验证步骤?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  网站制作公司,橙子建站是合法的吗?  如何通过二级域名建站提升品牌影响力?  广州商城建站系统开发成本与周期如何控制?  浅谈Javascript中的Label语句  如何设置并定期更换建站之星安全管理员密码?  建站之星安装路径如何正确选择及配置?  如何快速启动建站代理加盟业务?  在线制作视频的网站有哪些,电脑如何制作视频短片?  定制建站流程步骤详解:一站式方案设计与开发指南 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。