Пытаясь получить доступное дисковое пространство для каждого раздела, я нашел много решений в сети, но все они, к сожалению, не работают.
Вопрос в том, как программно получить доступное (свободное) пространство для данного раздел?
Что я пробовал:
#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
.