Фильтруем файлы по расширению через std::filesystem! Иногда нужно… — C/C++ Ready | Программирование — TG.ME

Фильтруем файлы по расширению через std::filesystem!

Иногда нужно быстро пройтись по папке и выбрать только нужные файлы. Например, найти все .log, .json, .txt или .cpp файлы для дальнейшей обработки.

Для этого удобно использовать std::filesystem. Он даёт нормальные типы для путей, директорий и файлов без ручной склейки строк.

Сначала зададим директорию и нужное расширение:
namespace fs = std::filesystem;

fs::path root = "logs";
std::string ext = ".log";


Теперь можно пройти по директории рекурсивно:
for (const auto& entry : fs::recursive_directory_iterator(root)) {
// проверяем каждый элемент
}


Важно не обрабатывать директории как файлы. Поэтому сначала проверяем тип элемента:
if (!entry.is_regular_file()) {
continue;
}


После этого сравниваем расширение через path::extension:
if (entry.path().extension() == ext) {
std::cout << entry.path() << "\n";
}


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

Можно легко заменить действие внутри if. Вместо вывода в консоль файл можно прочитать, добавить в список, посчитать размер или передать в другую функцию.

📣 C++ Ready | #практика
❤2👍2🔥2
September 1, 2026 523 6