РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
517 of 815 menu

Класс directory_iterator

Класс directory_iterator предназначен для последовательного перебора элементов директории. Он является итератором и позволяет пройтись по всем файлам и поддиректориям, содержащимся в указанной директории. В первом параметре конструктору мы передаем путь к директории, которую нужно обойти, а второй параметр (необязательный) задает поведение при обходе - например, пропуск ошибок доступа.

При разыменовании итератора возвращается объект directory_entry, через который можно получить путь, имя файла, расширение и другую информацию об элементе директории. Итератор становится равным конечному итератору, когда все элементы перебраны.

Синтаксис

#include <filesystem> std::filesystem::directory_iterator it(path); std::filesystem::directory_iterator end;

Пример

Давайте переберем все элементы директории /tmp/test и выведем путь к каждому из них:

#include <iostream> #include <filesystem> using namespace std; namespace fs = std::filesystem; int main() { fs::directory_iterator it("/tmp/test"); fs::directory_iterator end; for (; it != end; ++it) { cout << it->path() << endl; } return 0; }

Результат выполнения кода:

"/tmp/test/a.txt" "/tmp/test/b.txt" "/tmp/test/subdir"

Пример

Давайте воспользуемся range-based циклом for для перебора элементов директории и выведем имя каждого файла через метод filename:

#include <iostream> #include <filesystem> using namespace std; namespace fs = std::filesystem; int main() { for (const auto& entry : fs::directory_iterator("/tmp/test")) { cout << entry.path().filename().string() << endl; } return 0; }

Результат выполнения кода:

"a.txt" "b.txt" "subdir"

Пример

Давайте переберем только обычные файлы директории, пропуская поддиректории, с помощью метода is_regular_file:

#include <iostream> #include <filesystem> using namespace std; namespace fs = std::filesystem; int main() { for (const auto& entry : fs::directory_iterator("/tmp/test")) { if (entry.is_regular_file()) { cout << entry.path().filename().string() << endl; } } return 0; }

Результат выполнения кода:

"a.txt" "b.txt"

Смотрите также

  • класс recursive_directory_iterator,
    который рекурсивно обходит директорию
  • класс directory_entry,
    который представляет элемент директории
  • класс path,
    который представляет путь к файлу или директории
  • метод filename,
    который возвращает имя файла из пути
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить