Как получить размер на диске каталога C ++ - PullRequest
0 голосов
/ 19 апреля 2020

Как получить размер на диске, используя код C ++, а не размер файла?

Я пытаюсь получить размер на диске в каталоге (папке), и сложение файлов только дает размеры фактический размер файла. Что мне нужно, это размер на диске, есть ли в любом случае, чтобы получить это?

Спасибо

#include <iostream> 
using namespace std;
#include <filesystem>
using namespace std::filesystem;
int main(size_t argc, char* argv[])
{
   if (argc == 1) {
        void rscan3(path const&, unsigned i = 0);
        rscan3(".");

    }
}
void rscan3(path const& f, unsigned i) {
    string indent(i, ' ');
    uintmax_t size = 0;
    for (auto d : directory_iterator(f)) {

        size += d.file_size();
        cout << indent << "Folder = " << absolute(f).string() << " SIZE: " << size << endl;
        if (is_directory(d.status())) 
            rscan3(d.path(), i + 2);

    }
}

1 Ответ

0 голосов
/ 20 апреля 2020

Поскольку вы указали в комментариях, вы спрашиваете о Windows:

Файл указывается записью в индексе файла или в таблице файлов (MFT для NTFS, FAT для файловой системы FAT). Эта таблица расположена в специальной позиции физической файловой системы (например, жесткого диска) и содержит адрес и метаданные каждого файла. Размер файла - это фактический объем пространства, занимаемого файлом; это может быть ноль или любой больший размер. Если в файле нет данных, он пуст (размер = 0).

В файловых системах Windows размер каталога - это общая сумма всех файлов (и файлов в подпапках) в нем. Итак, пустой каталог имеет нулевой размер.

Источник: Почему пустая папка имеет нулевые байты на Windows?

STL filesystem::file_size работает только для файлы, он выдает исключение для каталогов: filesystem error: cannot get file size: Is a directory [dir]. Почему? Поскольку каталог - это просто запись в индексе или таблице файла.

Вкл. Windows, когда вы проверяете каталог, содержащий много подкаталогов / файлов, вы можете заметить сообщение "размер на диске" на Свойства накапливаются постепенно; из этого следует, что система рекурсивно выполняет итерацию по подкаталогам / файлам для суммирования всех размеров файлов ... Вы можете провести эксперимент, чтобы проверить, действительно ли полный размер равен сумме всех отдельных файлов (за исключением каталогов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...