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 de forma predeterminada de tipo recursive_directory_iterator tiene un iterador de fin de secuencia en mystack.top().first y representa el iterador de fin 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 Mueve el iterador a la siguiente entrada en la siguiente profundidad inferior.
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::filesystem

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);

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
Argumento ficticio. Se trata de una convención de C++ que solo se usa para distinguir el operador de incremento de postfijo del operador de incremento de prefijo. El estándar de C++ requiere que el formulario de postfijo tome un parámetro int ficticio.

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

Mueve el iterador a la siguiente entrada en la siguiente profundidad inferior.

void pop();
void pop(error_code& ec);

Parámetros

ec
Código de error que informa del estado de la operación. La sobrecarga que toma un argumento ec notifica errores en ec en lugar de producir una excepción.

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
<sistema de archivos>
Exploración del sistema de archivos (C++)