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:
un objeto del tipo
stack<pair<directory_iterator, path>>
, de nombremystack
aquí, para la exposición, que representa el anidamiento de directorios que se van a secuenciarun objeto del tipo
directory_entry
, de nombremyentry
aquí, que representa el nombre de archivo actual en la secuencia de directoriosun objeto del tipo
bool
, de nombreno_push
aquí, que registra si está deshabilitado el descenso recursivo a subdirectoriosun objeto del tipo
directory_options
, de nombremyoptions
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:
Un directorio symlink se examina únicamente si se construye
recursive_directory_iterator
con un argumentodirectory_options
cuyo valor esdirectory_options::follow_directory_symlink
.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++)