std::filesystem::space() 返回的 space_info 包含 capacity(总容量)、free(非特权用户空闲字节数)和 available(进程实际可写入字节数),其中 available ≤ free,因后者扣除 root 保留空间、配额及文件系统开销。
它返回一个 std::filesystem::space_info 结构体,含三个 uintmax_t 成员:capacity(总字节数)、free(非特权用户可用空闲字节数)、available(当前进程实际可写入的字节数)。注意:free ≠ available——后者会扣除 root 保
留空间、配额限制、甚至某些文件系统(如 ext4)的 reserved blocks。
必须传入一个**有效路径**(不一定是文件,目录也行),且该路径需位于目标文件系统根下;否则可能抛出 std::filesystem::filesystem_error。常见错误是传入空字符串、不存在路径或跨挂载点路径(比如在 Linux 上对 /proc 或 /sys 调用)。
std::filesystem::temp_directory_path() 或 std::filesystem::current_path() 作为安全起点"C:/" 可用,但注意结尾斜杠不能少("C:" 是相对路径,行为未定义)"/" 获取根文件系统,或 "/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"; } }
差值主要来自三类限制: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
tune2fs -l /dev/sda1 | grep "Reserved block count"
available,而非 free 或 capacity
Windows(NTFS)通常不区分 free 和 available,二者值相等;而 Linux(ext4/xfs/btrfs)严格区分。C++20 标准未强制要求实现差异,所以依赖 available == free 会出问题。
-std=c++20(GCC/Clang)或 /std:c++20(MSVC)Shlwapi.lib(已默认包含),但 MinGW-w64 某些旧版本需手动加 -lshlwapi
std::filesystem,建议先 #ifdef __cpp_lib_filesystem 检查free —— 写日志、解压包、生成缓存前,务必用 available 做容量预检,否则在配额受限的服务器上容易 runtime fail。
# linux
# git
# docker
# windows
# github
# 字节
# mac
# ai
# c++
# ios
# macos
# 解压
# count
# Filesystem
# 字符串
# 结构体
# 文件系统
# 不存在
# 而非
# 只看
# 则在
# 如在
# 也行
# 三类
# 抛出
# 不能少
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
Win11怎么更改默认打开方式_Win11关联文件格式教程【详解】
php订单日志怎么在swoole写_php协程swoole写订单日志教程【教程】
Python对象生命周期管理_创建销毁解析【教程】
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
Mac如何修复应用程序权限问题_Mac磁盘工具修复权限【教程】
PHP cURL GET请求:正确设置请求头与身份认证的完整教程
如何用::实现工具类方法调用_php静态工具类设计技巧【技巧】
Windows10如何更改盘符名称_Win10重命名硬盘分区卷标
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
如何使用Golang安装依赖库_管理模块和第三方包
Win11怎么设置右键刷新选项_Windows11显示更多选项技巧
如何使用Golang指针与接口结合_实现方法调用和动态类型
Win10 BitLocker加密教程 Win10给磁盘驱动器上锁【安全】
如何使用正则表达式批量替换重复的星号-短横模式为固定字符串
Win11怎么关闭透明效果_Windows11个性化颜色关闭透明
mac本地php环境如何开启curl_curl扩展启用与测试步骤详解【汇总】
Win11如何设置系统语言_Win11系统语言切换教程【攻略】
如何使用Golang实现RPC序列化与反序列化_Golang RPC数据编码与解码方法
php转exe用什么工具打包快_高效打包软件推荐【汇总】
Win10如何更改电脑休眠时间_Windows10电源和睡眠选项调整
Bpmn 2.0的XML文件怎么画流程图
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
Win11文件夹预览图不显示怎么办_Win11缩略图缓存重建修复【教程】
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
Win11任务栏天气怎么关闭 Win11隐藏天气小组件图标【设置】
Mac上的iMovie如何剪辑视频?(新手入门教程)
Win11怎么开启剪贴板历史记录_Windows11 Win+V键使用技巧
VSC怎样在Linux运行PHP_Ubuntu系统配置步骤【操作】
Windows 11怎么设置默认解压软件_Windows 11为ZIP/RAR文件指定默认打开程序
php删除数据怎么加限制_带where条件删除避免全删【指南】
如何解决Windows时间不准的问题?(自动同步设置)
Python字符串处理进阶_切片方法解析【指导】
php订单日志怎么按状态筛选_php筛选不同状态订单日志教程【教程】
Win11怎么设置任务栏大小_Windows11注册表修改TaskbarSi值
Linux如何安装Golang环境_Linux下Go语言开发包配置【方法】
C++中的协变与逆变是什么?C++函数指针与返回类型详解【类型系统】
Mac如何整理桌面文件_Mac使用堆栈功能一键整理
php8.4如何调用com组件_php8.4windows下com操作指南【教程】
Python lxml的etree和ElementTree有什么区别
php怎么下载安装后设置默认字符集_utf8配置步骤【详解】
c++中的Tag Dispatching是什么_c++利用标签分发优化函数重载【元编程】
Win11怎么关闭触摸键盘图标_Windows11任务栏系统托盘设置
Win11怎么用设置清理回收站_Win11设置清理回收站技巧【步骤】
Win11笔记本怎么看电池健康度_Win11电池报告生成命令【详解】
Python性能剖析高级教程_cProfileLineProfiler优化案例解析
如何使用Golang写入二进制文件_Golang io Write二进制写入示例
Linux如何安装JDK11_Linux环境变量配置与Java开发环境搭建【教程】
Win11任务栏怎么调到左边_Win11开始菜单居左设置教程【步骤】
Win11任务栏颜色怎么改_Win11自定义任务栏配色设置【美化】
2025-12-31
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。