Как получить доступное свободное место для раздела на MacOS (sierra-catalina) - PullRequest
0 голосов
/ 10 января 2020

Пытаясь получить доступное дисковое пространство для каждого раздела, я нашел много решений в сети, но все они, к сожалению, не работают.

Вопрос в том, как программно получить доступное (свободное) пространство для данного раздел?

Что я пробовал:

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

1 Ответ

0 голосов
/ 10 января 2020

С это std::filesyste::space ссылка :

Определяет информацию о файловой системе , в которой находится путь p *

[Выделение мое]

Это означает, что вы должны указать путь к файлу или каталогу в самой файловой системе, а не путь к файлу устройства.

Например, если /dev/disk0s1 смонтирован как /home, вы можете использовать сам этот путь монтирования (т. Е. std::filesystem::space("/home")).

Обратите внимание, что statvfs работает точно так же.

...