问题描述
boost::system::error_code ec;
boost::filesystem::space_info si =
boost::filesystem::space(path,ec);
if (ec.value() == 0) {
cout << si.capacity - si.available;
}
但是上面的代码片段似乎给出了整个磁盘大小而不是磁盘上的特定目录大小,因为我向上面传递了 2 个不同的目录路径,但它们都给出了相同的答案。有人可以帮我找出这有什么问题,或者给我另一种在 C++ 中获取目录大小的替代方法吗? TIA!
解决方法
Boost Reference 声明:
space_info
对象的值是通过使用 ISO/IEC 9945 statvfs()
获得 ISO/IEC 9945 struct statvfs
来确定的。
statvfs()
函数将获取有关包含以路径命名的文件的文件系统的信息。
man page 声明:
函数 statvfs()
返回有关已安装文件系统的信息。 path
是挂载的文件系统中任何文件的路径名。
根据您的评论:
看看std::filesystem::directory_entry::file_size
的例子
或者更好:Overview of Filesystem library
如果还不清楚:
- 遍历目录
- 如果您对条目感兴趣,请将大小添加到总金额中
- 如果条目是另一个目录,递归枚举大小(提示:std::filesystem::recursive_directory_iterator)