recursive_directory_iterator (Clase)

Describe un iterador de entrada que secuencia por medio de los nombres de archivo de un directorio, posiblemente descendiendo a los subdirectorios de forma repetitiva. En el caso de un iterador X, la expresión *X se evalúa como un objeto de la clase directory_entry que contiene el nombre de archivo y cualquier elemento conocido sobre su estado.

Para obtener más información y ejemplos de código, vea Exploración del sistema de archivos (C++).

Sintaxis

class recursive_directory_iterator;

Comentarios

La plantilla de clase almacena:

  1. un objeto del tipo stack<pair<directory_iterator, path>>, de nombre mystack aquí, para la exposición, que representa el anidamiento de directorios que se van a secuenciar

  2. un objeto del tipo directory_entry, de nombre myentry aquí, que representa el nombre de archivo actual en la secuencia de directorios

  3. un objeto del tipo bool, de nombre no_push aquí, que registra si está deshabilitado el descenso recursivo a subdirectorios

  4. un objeto del tipo directory_options, de nombre myoptions aquí, que registra las opciones establecidas durante la construcción

Un objeto construido predeterminado de tipo recursive_directory_entry tiene un iterador de final de secuencia en mystack.top().first y representa el iterador de final de secuencia. Por ejemplo, si se tiene el directorio abc con entradas def (un directorio), def/ghi y jkl, el código:

for (recursive_directory_iterator next(path("abc")), end; next != end; ++next)
    visit(next->path());

llama a visit con los argumentos path("abc/def/ghi") y path("abc/jkl"). Puede calificar secuencias por medio de un subárbol de directorios de dos maneras:

  1. Un directorio symlink se examina únicamente si se construye recursive_directory_iterator con un argumento directory_options cuyo valor es directory_options::follow_directory_symlink.

  2. Si se llama a disable_recursion_pending, un directorio posterior encontrado durante un incremento no se examina de forma recursiva.

Constructores

Constructor Descripción
recursive_directory_iterator Construye un objeto recursive_directory_iterator.

Funciones miembro

Función de miembro Descripción
depth Devuelve mystack.size() - 1, así que pval está en profundidad cero.
disable_recursion_pending Almacena true en no_push.
increment Avanza al siguiente nombre de archivo de la secuencia.
options Devuelve myoptions.
pop Devuelve el siguiente objeto.
recursion_pending Devuelve !no_push.

Operadores

Operador Descripción
operator!= Devuelve !(*this == right).
operator= Los operadores predeterminados de asignación de miembros se comportan según lo previsto.
operator== Solo devuelve true si *this y right son iteradores de final de secuencia o si ninguno lo es.
operator* Devuelve myentry.
operator-> Devuelve &**this.
operator++ Incrementa recursive_directory_iterator.

Requisitos

Encabezado:<filesystem>

Espacio de nombres: std::tr2::sys

recursive_directory_iterator::depth

Devuelve mystack.size() - 1, así que pval está en profundidad cero.

int depth() const;

recursive_directory_iterator::disable_recursion_pending

Almacena true en no_push.

void disable_recursion_pending();

recursive_directory_iterator::increment

Avanza al siguiente nombre de archivo de la secuencia.

recursive_directory_iterator& increment(error_code& ec) noexcept;

Parámetros

ec
Código de error especificado.

Comentarios

La función intenta avanzar al siguiente nombre de archivo de la secuencia anidada. Si es correcto, almacena ese nombre de archivo en myentry; en caso contrario, produce un iterador de final de secuencia.

recursive_directory_iterator::operator!=

Devuelve !(*this == right).

bool operator!=(const recursive_directory_iterator& right) const;

Parámetros

right
recursive_directory_iterator, para la comparación.

recursive_directory_iterator::operator=

Los operadores predeterminados de asignación de miembros se comportan según lo previsto.

recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) noexcept = default;

Parámetros

recursive_directory_iterator
recursive_directory_iterator que se va a copiar en recursive_directory_iterator.

recursive_directory_iterator::operator==

Solo devuelve true si *this y right son iteradores de final de secuencia o si ninguno lo es.

bool operator==(const recursive_directory_iterator& right) const;

Parámetros

right
recursive_directory_iterator, para la comparación.

recursive_directory_iterator::operator*

Devuelve myentry.

const directory_entry& operator*() const;

recursive_directory_iterator::operator->

Devuelve &**this.

const directory_entry * operator->() const;

recursive_directory_iterator::operator++

Incrementa recursive_directory_iterator.

recursive_directory_iterator& operator++();

recursive_directory_iterator& operator++(int);

Parámetros

int
Incremento especificado.

Comentarios

La primera función miembro llama a increment() y luego devuelve *this. La segunda función miembro hace una copia del objeto, llama a increment() y luego devuelve la copia.

recursive_directory_iterator::options

Devuelve myoptions.

directory_options options() const;

recursive_directory_iterator::pop

Devuelve el siguiente objeto.

void pop();

Comentarios

Si depth() == 0, el objeto se convierte en un iterador de final de secuencia. De lo contrario, la función miembro termina el análisis del directorio actual (más profundo) y lo reanuda en el siguiente nivel inferior.

recursive_directory_iterator::recursion_pending

Devuelve !no_push.

bool recursion_pending() const;

recursive_directory_iterator::recursive_directory_iterator

Construye un objeto 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;

Parámetros

pVal
La ruta de acceso especificada.

error_code
Código de error especificado.

Opta
Opciones de directorio especificadas.

recursive_directory_iterator
recursive_directory_iterator del que el recursive_directory_iterator construido va a ser una copia.

Comentarios

El primer constructor crea un iterador de final de secuencia. Los constructores segundo y tercero almacenan false en no_push y directory_options::none en myoptions, e intentan abrir y leer pval como un directorio. Si lo logran, inicializan mystack y myentry para designar el primer nombre de archivo que no es de directorio de la secuencia anidada; de lo contrario, producen un iterador de final de secuencia.

Los constructores cuarto y quinto se comportan igual que el segundo y el tercero, salvo que primero almacenan opts en myoptions. El constructor predeterminado se comporta según lo previsto.

Consulte también

Referencia de archivos de encabezado
<filesystem>
Exploración del sistema de archivos (C++)