[试图获得每个分区的可用磁盘空间,我发现许多在线解决方案,不幸的是,它们都无法使用。
问题是:如何以编程方式获取给定分区的可用(免费)空间?
我尝试过的事情:
#include <filesystem>
int main()
{
std::filesystem::path diskPath("/dev/disk0s1");
size_t space = std::filesystem::space(diskPath).available;
std::cout << "Free space for disk01: " << space << std::endl;
}
不幸的是,我收到以下编译错误:
'path' is unavailable: introduced in macOS 10.15
'path' has been explicitly marked unavailable here
我知道boost
中有一个类似的库,但如果可能,我想避免升压。
(目标10.12 +)
#include <sys/statvfs.h>
int main()
{
struct statvfs buf;
if (!statvfs("/dev/disk0s1", &buf))
{
size_t space = buf.f_bfree*buf.f_bsize;
std::cout << "Free space for disk01: " << space << std::endl;
}
else
{
std::cerr << "Error here" << std::endl;
}
}
[不幸的是,这检索了所有分区的0
。注意:f_bsize
之类的某些值已正确填写,但f_bfree
始终为0
。
来自this std::filesyste::space
reference:
确定有关文件系统的信息路径名p所在的位置
[[Emphasis mine]
这意味着您提供的路径必须是文件系统本身上的文件或目录。
例如,如果将std::filesyste::space
安装为/dev/disk0s1
,则需要提供诸如/home
之类的路径。