Иногда нужно быстро понять, сколько места занимает директория. Например, перед очисткой, анализом или проверкой файлов.
В C++17 для обхода файловой системы есть
std::filesystem.Подключим нужные заголовки:
#include <filesystem>
#include <iostream>
Для удобства заведём namespace:
namespace fs = std::filesystem;
Функция будет принимать путь к папке:
std::uintmax_t dir_size(const fs::path& root) {Сначала заведём счётчик байт:
std::uintmax_t total = 0;
Теперь рекурсивно обойдём директорию:
for (const auto& entry : fs::recursive_directory_iterator(root)) {Нас интересуют только обычные файлы. Папки и ссылки можно пропустить:
if (!entry.is_regular_file()) continue;
Размер файла добавляем в общий счётчик:
total += entry.file_size();
После обхода возвращаем результат:
return total;
}
Вызов может выглядеть так:
auto bytes = dir_size("logs");
std::cout << bytes << "\n";В реальном коде стоит помнить про права доступа. Если часть файлов нельзя прочитать, можно использовать перегрузки с
std::error_code, чтобы программа не падала на первом недоступном каталоге.

