Поделиться через


Класс recursive_directory_iterator

Описывает входной итератор, который последовательно выполняется через имена файлов в каталоге, возможно, убывая в подкаталогы рекурсивно. Для итератора Xвыражение *X вычисляет объект класса directory_entry , который упаковывает имя файла и все, что известно о его состоянии.

Дополнительные сведения и примеры кода см. в разделе Навигация по файловой системе (C++).

Синтаксис

class recursive_directory_iterator;

Замечания

Шаблон класса хранит:

  1. объект типа stack<pair<directory_iterator, path>>, вызываемый mystack здесь в целях экспозиции, который представляет собой вложенное вложение каталогов для последовательности

  2. объект типа directory_entry , вызываемый myentry здесь, который представляет текущее имя файла в последовательности каталогов.

  3. Объект типа bool, вызываемый no_push здесь, который записывает, отключен ли рекурсивный спуск в подкаталоги

  4. объект типа 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"). Вы можете квалифицировать последовательности в поддереве каталога двумя способами:

  1. Ссылка на каталог будет сканирована только в том случае, если вы создаете аргумент с аргументом recursive_directory_iteratordirectory_options , значение которого равно directory_options::follow_directory_symlink.

  2. При вызове 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;

Параметры

Ec
Указанный код ошибки.

Замечания

Функция пытается перейти к имени следующего файла во вложенной последовательности. В случае успешного выполнения он сохраняет это имя файла; в 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::noneno_push и вmyoptions, а затем пытаются открыть и прочитать pval в качестве каталога. В случае успешного выполнения они инициализируют mystack и myentry назначают первое имя файла, отличного от каталога, в вложенной последовательности; в противном случае они создают итератор конца последовательности.

Четвертый и пятый конструкторы ведут себя так же, как второй и третий, за исключением того, что они первый магазин выбирает в myoptions. Конструктор по умолчанию ведет себя должным образом.

См. также

Справочник по файлам заголовков
<filesystem>
Навигация по файловой системе (C++)