Namespaces
Variants

std::experimental::filesystem:: recursive_directory_iterator

From cppreference.net
Definido en el encabezado <experimental/filesystem>
class recursive_directory_iterator ;
(filesystem TS)

recursive_directory_iterator es un LegacyInputIterator que itera sobre los elementos directory_entry de un directorio, y, recursivamente, sobre las entradas de todos los subdirectorios. El orden de iteración no está especificado, excepto que cada entrada de directorio se visita solo una vez.

Por defecto, los enlaces simbólicos no se siguen, pero esto puede habilitarse especificando la opción de directorio follow_directory_symlink en el momento de la construcción.

Los nombres de ruta especiales dot y dot-dot se omiten.

Si el recursive_directory_iterator avanza más allá de la última entrada del directorio de nivel superior, se vuelve igual al iterador construido por defecto, también conocido como iterador final. Dos iteradores finales siempre son iguales, desreferenciar o incrementar el iterador final es comportamiento indefinido.

Si un archivo o directorio se elimina o se agrega al árbol de directorios después de que se haya creado el iterador de directorio recursivo, no está especificado si el cambio se observaría a través del iterador.

Si la estructura del directorio contiene ciclos, el iterador final puede ser inalcanzable.

Contenidos

Tipos de miembros

Tipo de miembro Definición
value_type filesystem::directory_entry
difference_type std::ptrdiff_t
pointer const filesystem::directory_entry*
reference const filesystem::directory_entry&
iterator_category std::input_iterator_tag

Funciones miembro

construye un iterador de directorio recursivo
(función miembro pública)
(destructor)
destructor por defecto
(función miembro pública)
Observadores
accede a la entrada apuntada
(función miembro pública)
devuelve las opciones activas actuales que afectan a la iteración
(función miembro pública)
devuelve la profundidad de recursión actual
(función miembro pública)
verifica si la recursión está deshabilitada para el directorio actual
(función miembro pública)
Modificadores
asigna contenidos
(función miembro pública)
avanza a la siguiente entrada
(función miembro pública)
mueve el iterador un nivel hacia arriba en la jerarquía de directorios
(función miembro pública)
deshabilita la recursión hasta el siguiente incremento
(función miembro pública)

Funciones no miembro

soporte para bucle for basado en rangos
(función)

Además, operator== y operator!= se proporcionan, ya sea como miembros o como no miembros, según lo requerido por LegacyInputIterator .

Notas

Un recursive_directory_iterator normalmente mantiene un puntero con conteo de referencias (para satisfacer la semántica de copia superficial de LegacyInputIterator ) a un objeto de implementación, que contiene:

  • un contenedor (como std::vector ) de directory_iterator s no recursivos que forma la pila de recursión.
  • el contador de profundidad de recursión (accesible con depth() ).
  • las opciones de directorio utilizadas en la construcción (accesibles con options() ).
  • el indicador de recursión pendiente (accesible con recursion_pending() , puede combinarse con las opciones de directorio para ahorrar espacio).

Ejemplo

#include <experimental/filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::experimental::filesystem;
int main()
{
    fs::create_directories("sandbox/a/b");
    std::ofstream("sandbox/file1.txt");
    fs::create_symlink("a", "sandbox/syma");
    for (const fs::directory_entry& entry : fs::recursive_directory_iterator("sandbox"))
        std::cout << entry << '\n';
    fs::remove_all("sandbox");
}

Salida posible:

"sandbox/a"
"sandbox/a/b"
"sandbox/file1.txt"
"sandbox/syma"

Véase también

un iterador a los contenidos del directorio
(clase)
una entrada de directorio
(clase)
opciones para iterar contenidos del directorio
(enumeración)