首页 > 解决方案 > 如何在 MacOS (sierra-catalina) 上为分区获取可用空间

问题描述

试图获得每个分区的可用磁盘空间,我在网上找到了许多解决方案,不幸的是它们都不起作用。

问题是:如何以编程方式获取给定分区的可用(空闲)空间?

我尝试了什么:

#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.

标签: c++macosdisk

解决方案


这个std::filesyste::space参考

确定有关路径名 p 所在文件系统的信息

[强调我的]

这意味着您提供的路径必须是文件系统本身的文件或目录,而不是设备文件的路径。

例如,如果/dev/disk0s1安装为,/home那么您可以使用该安装路径本身(即std::filesystem::space("/home"))。

请注意,它的statvfs工作原理完全相同。


推荐阅读