Namespaces
Variants

std::experimental::filesystem:: recursive_directory_iterator

From cppreference.net
Определено в заголовочном файле <experimental/filesystem>
class recursive_directory_iterator ;
(filesystem TS)

recursive_directory_iterator является LegacyInputIterator , который выполняет итерацию по элементам directory_entry каталога и, рекурсивно, по элементам всех подкаталогов. Порядок итерации не определён, за исключением того, что каждая запись каталога посещается только один раз.

По умолчанию символические ссылки не отслеживаются, но это можно включить, указав параметр директории follow_directory_symlink во время создания объекта.

Специальные имена путей dot и dot-dot пропускаются.

Если recursive_directory_iterator продвинут за последнюю запись каталога верхнего уровня, он становится равным итератору, созданному конструктором по умолчанию, также известному как конечный итератор. Два конечных итератора всегда равны, разыменование или инкрементирование конечного итератора является неопределенным поведением.

Если файл или каталог удаляется или добавляется в дерево каталогов после создания рекурсивного итератора каталога, не определено, будет ли изменение обнаружено через итератор.

Если структура каталогов содержит циклы, конечный итератор может быть недостижим.

Содержание

Типы членов

Тип члена Определение
value_type filesystem::directory_entry
difference_type std::ptrdiff_t
pointer const filesystem::directory_entry*
reference const filesystem::directory_entry&
iterator_category std::input_iterator_tag

Функции-члены

создает рекурсивный итератор директорий
(public member function)
(destructor)
деструктор по умолчанию
(public member function)
Наблюдатели
предоставляет доступ к текущей записи
(public member function)
возвращает текущие активные опции, влияющие на итерацию
(public member function)
возвращает текущую глубину рекурсии
(public member function)
проверяет, отключена ли рекурсия для текущей директории
(public member function)
Модификаторы
присваивает содержимое
(public member function)
переходит к следующей записи
(public member function)
перемещает итератор на один уровень вверх в иерархии директорий
(public member function)
отключает рекурсию до следующего инкремента
(public member function)

Функции, не являющиеся членами класса

поддержка range-based for loop
(функция)

Кроме того, operator== и operator!= предоставляются либо как члены, либо как не-члены, как того требует LegacyInputIterator .

Примечания

Обычно recursive_directory_iterator содержит подсчитываемую ссылками указатель (для обеспечения семантики поверхностного копирования LegacyInputIterator ) на объект реализации, который содержит:

  • контейнер (например, std::vector ) нерекурсивных directory_iterator s , формирующий стек рекурсии.
  • счётчик глубины рекурсии (доступный через depth() ).
  • параметры директории, используемые при создании (доступные через options() ).
  • флаг ожидающей рекурсии (доступный через recursion_pending() , может быть объединён с параметрами директории для экономии места).

Пример

#include <experimental/filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::experimental::filesystem;
int main()
{
    fs::create_directories("sandbox/a/b");
    std::ofstream("sandbox/file1.txt");
    fs::create_symlink("a", "sandbox/syma");
    for (const fs::directory_entry& entry : fs::recursive_directory_iterator("sandbox"))
        std::cout << entry << '\n';
    fs::remove_all("sandbox");
}

Возможный вывод:

"sandbox/a"
"sandbox/a/b"
"sandbox/file1.txt"
"sandbox/syma"

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

итератор содержимого директории
(класс)
запись директории
(класс)
опции для итерации содержимого директории
(перечисление)