Считаем размер папки через std::filesystem!
Иногда нужно быстро понять, сколько места занимает директория. Например, перед очисткой, анализом или проверкой файлов.
В C++17 для обхода файловой системы есть std::filesystem.
Подключим нужные заголовки:
#include
#include
Для удобства заведём 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
Иногда нужно быстро понять, сколько места занимает директория. Например, перед очисткой, анализом или проверкой файлов.
В C++17 для обхода файловой системы есть std::filesystem.
Подключим нужные заголовки:
#include
#include
Для удобства заведём 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