Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Important
En este artículo se describe la recursive_directory_iterator clase de la implementación de prestandard <experimental/filesystem> de la especificación técnica del sistema de archivos ISO C++ (N4100). Esta API no es la misma que la clase C++17 recursive_directory_iterator en <filesystem>. Usa diferentes firmas, incluido un noexceptincrement y un único formulario pop sin error_code sobrecarga. La implementación experimental se quitó a partir del conjunto de herramientas de Visual C++ (MSVC) 14.51 Microsoft. En su lugar, el nuevo código debe usar la clase C++17 recursive_directory_iterator .
Describe un iterador de entrada que se secuencia a través de los nombres de archivo de un directorio, posiblemente descendentes en subdirectorios de forma recursiva. Para un iterador X, la expresión *X devuelve un objeto de clase directory_entry que encapsula el nombre de archivo y todo lo que se conoce sobre su estado.
Sintaxis
class recursive_directory_iterator;
Observaciones
La clase almacena:
objeto de tipo
stack<pair<directory_iterator, path>>, llamadomystackaquí para los fines de exposición, que representa el anidamiento de directorios que se van a secuenciarun objeto de tipo
directory_entryllamadomyentryaquí, que representa el nombre de archivo actual en la secuencia de directorios.un objeto de tipo
bool, denominadono_pushaquí, que registra si el descenso recursivo en subdirectorios está deshabilitado.un objeto de tipo
directory_options, denominadomyoptionsaquí, que registra las opciones establecidas en 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, dado el directorio abc con entradas def (un directorio), def/ghiy 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 la secuenciación a través de un subárbol de directorio de dos maneras:
Un vínculo simbólico de directorio solo se examina si crea un
recursive_directory_iteratorcon undirectory_optionsargumento cuyo valor esdirectory_options::follow_directory_symlink.Si llama a
disable_recursion_pending, no se examina de forma recursiva un directorio posterior encontrado durante un incremento.
Constructores
| Constructor | Descripción |
|---|---|
| recursive_directory_iterator | Construye un objeto recursive_directory_iterator. |
Funciones miembro
| Función de miembro | Descripción |
|---|---|
| profundidad | Devuelve mystack.size() - 1, por lo que pval está en cero de profundidad. |
| disable_recursion_pending | Almacena true en no_push. |
| increment | Avanza al siguiente nombre de archivo en secuencia. |
| Opciones | Devuelve myoptions. |
| pop | Mueve el iterador a la siguiente entrada en la siguiente profundidad inferior. |
| recursion_pending | Devuelve !no_push. |
Operators
| Operador | Descripción |
|---|---|
| operator!= | Devuelve !(*this == right). |
| operator= | Los operadores de asignación de miembros predeterminados se comportan según lo previsto. |
| operator== | Devuelve true solo si y *thisright son iteradores de final de secuencia o ambos no son iteradores de fin de secuencia. |
| operator* | Devuelve myentry. |
| operator-> | Devuelve &**this. |
| operator++ | Incrementa .recursive_directory_iterator |
Requisitos
Encabezado: <experimental/filesystem>
Espacio de nombres:std::experimental::filesystem
recursive_directory_iterator::d epth
Devuelve mystack.size() - 1, por lo que pval está en cero de profundidad.
int depth() const;
recursive_directory_iterator::d isable_recursion_pending
Almacena true en no_push.
void disable_recursion_pending();
recursive_directory_iterator::increment
Avanza al siguiente nombre de archivo en secuencia.
recursive_directory_iterator& increment(error_code& ec) noexcept;
Parameters
ec
Código de error especificado.
Observaciones
La función intenta avanzar al siguiente nombre de archivo de la secuencia anidada. Si se ejecuta correctamente, almacena ese nombre de archivo en myentry; de lo contrario, genera un iterador de fin de secuencia.
recursive_directory_iterator::operator!=
Devuelve !(*this == right).
bool operator!=(const recursive_directory_iterator& right) const;
Parameters
right
recursive_directory_iterator para la comparación.
recursive_directory_iterator::operator=
Los operadores de asignación de miembros predeterminados se comportan según lo previsto.
recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) = default;
Parameters
recursive_directory_iterator
objeto recursive_directory_iterator que se copia en .recursive_directory_iterator
recursive_directory_iterator::operator==
Devuelve true solo si tanto *this como la derecha son iteradores de final de secuencia o ambos no son iteradores de fin de secuencia.
bool operator==(const recursive_directory_iterator& right) const;
Parameters
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);
Parameters
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.
Observaciones
La primera función miembro llama a increment()y, a continuación, devuelve *this. La segunda función miembro realiza una copia del objeto, llama a increment()y, a continuación, devuelve la copia.
recursive_directory_iterator::options
Devuelve myoptions.
directory_options options() const;
recursive_directory_iterator::p op
Mueve el iterador a la siguiente entrada en la siguiente profundidad inferior.
void pop();
Observaciones
Si depth() == 0es , el objeto se convierte en un iterador de fin de secuencia. De lo contrario, la función miembro finaliza el examen del directorio actual (más profundo) y se reanuda en la siguiente profundidad 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,
directory_options opts = directory_options::none);
recursive_directory_iterator(const path& pval,
directory_options opts,
error_code& ec) noexcept;
recursive_directory_iterator(const path& pval,
error_code& ec) noexcept;
recursive_directory_iterator(const recursive_directory_iterator&) = default;
recursive_directory_iterator(recursive_directory_iterator&&) = default;
Parameters
pval
Ruta de acceso especificada.
error_code
Código de error especificado.
opts
Las opciones de directorio especificadas.
recursive_directory_iterator
recursive_directory_iterator del que se va a copiar el objeto construidorecursive_directory_iterator.
Observaciones
El primer constructor crea un iterador de fin de secuencia. El segundo constructor almacena false y no_pushopta por myoptions, después intenta abrir y leer pval como directorio. Si se ejecuta correctamente, inicializa mystack y myentry apunta al primer nombre de archivo que no es de directorio en la secuencia anidada. Si se produce un error, crea un iterador de fin de secuencia.
Los constructores tercero y cuarto se comportan igual que el segundo, salvo que notifican errores en ec en lugar de producir una excepción. El cuarto constructor almacena directory_options::none en myoptions. El constructor predeterminado se comporta según lo previsto.