Класс recursive_directory_iterator
Описывает входной итератор, который последовательно выполняется через имена файлов в каталоге, возможно, убывая в подкаталогы рекурсивно. Для итератора X
выражение *X
вычисляет объект класса directory_entry
, который упаковывает имя файла и все, что известно о его состоянии.
Дополнительные сведения и примеры кода см. в разделе Навигация по файловой системе (C++).
Синтаксис
class recursive_directory_iterator;
Замечания
Шаблон класса хранит:
объект типа
stack<pair<directory_iterator, path>>
, вызываемыйmystack
здесь в целях экспозиции, который представляет собой вложенное вложение каталогов для последовательностиобъект типа
directory_entry
, вызываемыйmyentry
здесь, который представляет текущее имя файла в последовательности каталогов.Объект типа
bool
, вызываемыйno_push
здесь, который записывает, отключен ли рекурсивный спуск в подкаталогиобъект типа
directory_options
, вызываемыйmyoptions
здесь, который записывает параметры, установленные при построении
Созданный по умолчанию объект типа recursive_directory_entry
имеет итератор последовательности итератор и представляет итератор mystack.top().first
конца последовательности. Например, учитывая каталог abc
с записями def
(каталогом), def/ghi
а также jkl
код:
for (recursive_directory_iterator next(path("abc")), end; next != end; ++next)
visit(next->path());
вызовет визит с аргументами path("abc/def/ghi")
и path("abc/jkl")
. Вы можете квалифицировать последовательности в поддереве каталога двумя способами:
Ссылка на каталог будет сканирована только в том случае, если вы создаете аргумент с аргументом
recursive_directory_iterator
directory_options
, значение которого равноdirectory_options::follow_directory_symlink
.При вызове
disable_recursion_pending
последующий каталог, возникший во время добавочного увеличения, не будет рекурсивно сканирован.
Конструкторы
Конструктор | Description |
---|---|
recursive_directory_iterator | Создает документ recursive_directory_iterator . |
Функции элементов
Функция-член | Description |
---|---|
depth | Возвращается mystack.size() - 1 , поэтому pval глубина равна нулю. |
disable_recursion_pending | Магазины true в no_push . |
increment | Переходит к следующему имени файла в последовательности. |
options | Возвращает myoptions . |
pop | Возвращает следующий объект. |
recursion_pending | Возвращает !no_push . |
Операторы
Operator | Description |
---|---|
оператор!= | Возвращает !(*this == right) . |
operator= | Операторы-члены присваивания по умолчанию работают корректно. |
operator== | Возвращается true только в том случае, если *this оба и правые являются итераторами последовательности или оба не являются итераторами конца последовательности. |
operator* | Возвращает myentry . |
operator-> | Возвращает &**this . |
оператор++ | Увеличивает значение recursive_directory_iterator . |
Требования
Заголовок:<файловая система>
Пространство имен: std::tr2::sys
recursive_directory_iterator::depth
Возвращается mystack.size() - 1
, поэтому pval
глубина равна нулю.
int depth() const;
recursive_directory_iterator::disable_recursion_pending
Магазины true
в no_push
.
void disable_recursion_pending();
recursive_directory_iterator::increment
Переходит к следующему имени файла в последовательности.
recursive_directory_iterator& increment(error_code& ec) noexcept;
Параметры
Европейское сообщество
Указанный код ошибки.
Замечания
Функция пытается перейти к имени следующего файла во вложенной последовательности. В случае успешного выполнения он сохраняет это имя файла; в myentry
противном случае он создает итератор конца последовательности.
recursive_directory_iterator::operator!=
Возвращает !(*this == right)
.
bool operator!=(const recursive_directory_iterator& right) const;
Параметры
right
Recursive_directory_iterator для сравнения.
recursive_directory_iterator::operator=
Операторы-члены присваивания по умолчанию работают корректно.
recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) noexcept = default;
Параметры
recursive_directory_iterator
Recursive_directory_iterator копируется в recursive_directory_iterator
.
recursive_directory_iterator::operator==
Возвращается true
только в том случае, если *this
оба и правые являются итераторами последовательности или оба не являются итераторами конца последовательности.
bool operator==(const recursive_directory_iterator& right) const;
Параметры
right
Recursive_directory_iterator для сравнения.
recursive_directory_iterator::operator*
Возвращает myentry
.
const directory_entry& operator*() const;
recursive_directory_iterator::operator>
Возвращает &**this
.
const directory_entry * operator->() const;
recursive_directory_iterator::operator++
Увеличивает значение recursive_directory_iterator
.
recursive_directory_iterator& operator++();
recursive_directory_iterator& operator++(int);
Параметры
int
Указанный добавочный элемент.
Замечания
Сначала вызывается increment()
функция-член, а затем возвращается *this
. Вторая функция-член делает копию объекта, вызывает increment()
, затем возвращает копию.
recursive_directory_iterator::options
Возвращает myoptions
.
directory_options options() const;
recursive_directory_iterator::pop
Возвращает следующий объект.
void pop();
Замечания
Если depth() == 0
объект становится итератором конца последовательности. В противном случае функция-член завершает проверку текущего (самого глубокого) каталога и возобновляет ее на следующем нижнем уровне глубины.
recursive_directory_iterator::recursion_pending
Возвращает !no_push
.
bool recursion_pending() const;
recursive_directory_iterator::recursive_directory_iterator
Создает документ recursive_directory_iterator
.
recursive_directory_iterator() noexcept;
explicit recursive_directory_iterator(const path& pval);
recursive_directory_iterator(const path& pval,
error_code& ec) noexcept;
recursive_directory_iterator(const path& pval,
directory_options opts);
recursive_directory_iterator(const path& pval,
directory_options opts,
error_code& ec) noexcept;
recursive_directory_iterator(const recursive_directory_iterator&) = default;
recursive_directory_iterator(recursive_directory_iterator&&) noexcept = default;
Параметры
pval
Заданный путь.
error_code
Указанный код ошибки.
Выбирает
Указанные параметры каталога.
recursive_directory_iterator
recursive_directory_iterator
, копией которого будет создаваемый recursive_directory_iterator
.
Замечания
Первый конструктор создает итератор конца последовательности. Второй и третий конструкторы хранятся false
в directory_options::none
no_push
и вmyoptions
, а затем пытаются открыть и прочитать pval в качестве каталога. В случае успешного выполнения они инициализируют mystack
и myentry
назначают первое имя файла, отличного от каталога, в вложенной последовательности; в противном случае они создают итератор конца последовательности.
Четвертый и пятый конструкторы ведут себя так же, как второй и третий, за исключением того, что они первый магазин выбирает в myoptions
. Конструктор по умолчанию ведет себя должным образом.
См. также
Справочник по файлам заголовков
<filesystem>
Навигация по файловой системе (C++)