Red de conocimiento informático - Material del sitio web - Cómo enumerar un árbol de directorios en c

Cómo enumerar un árbol de directorios en c

Darle una referencia:

Funciones relacionadas: opendir

Archivo de encabezado: #include lt; ftw.hgt;

Función definida: int ftw(const char * dir, int (*fn) (const *file, const struct stat *sb, int flag), int Depth)

Descripción de la función: ftw() recorrerá recursivamente hacia abajo desde el directorio especificado por el nivel dir. subdirectorio. ftw() pasa tres parámetros a fn(). El primer parámetro es *file, que apunta a la ruta del directorio donde se encuentra en ese momento, y el segundo parámetro es *sb, un puntero a la estructura de estadísticas. El tercer parámetro es una bandera y puede tener los siguientes valores

FTW_F Archivo general

Directorio FTW_D

FTW_DNR Directorio ilegible, el siguiente directorio no será recorrido

Enlace simbólico FTW_SL

FTW_NS no puede obtener los datos de la estructura estadística. Puede ser un problema de permiso.

El último parámetro "profundidad" representa el número de archivos que ftw() abrirá al atravesar el directorio. ftw() requiere al menos un descriptor de archivo en cada nivel al atravesar el directorio, por lo que si el recorrido excede el límite dado por la profundidad, la velocidad de recorrido disminuirá debido al cierre y apertura continuos de archivos

Para terminar Para atravesar ftw(), puede llamar a fn() con el siguiente comando. De lo contrario, ftw() intentará recorrer todos los directorios y devolverá 0

Valor de retorno: 0 si se interrumpe el recorrido; 0 si se atraviesan todos los directorios -1 si se produce un error

Nota adicional: dado que ftw() asigna el uso de memoria dinámicamente, use la forma normal (la función fn que devuelve un valor distinto de cero) para interrumpir el recorrido y no use la función longjmp en fn(). función, no use longjmp()

Ejemplo:

/*Liste los subdirectorios en el directorio /etc/X11

#include sys/stat; .hgt;

#include lt;unistd.hgt;

#include lt;unistd.hgt;

#include lt;unistd.hgt;

p>

#includes lt; ftw() include lt; ftw.hgt;

int fn(const char *file, const struct stat *sb, int flag)

{

if(bandera == FTW_D)

printf("s --- directorio\n", archivo

else);

printf("s --- directorio\n", archivo);

return 0;

}

int main( )

{

ftw("/etc/X11", fn.500

}

);