/* Muestra información sobre un directorio y sus subdirectorios */ #include #include #include long nbytes = 0; long nfiles = 0; void VerDirectorio ( char *nombredir ,int nivel ) { DIR *pd; struct dirent *dirdatos; struct stat datostat; int i; char fichero[256]; pd = opendir ( nombredir ); if ( pd == NULL ) { perror ( nombredir ); return; } /* Saldo los directorios . y .. */ readdir( pd ); readdir( pd ); dirdatos = readdir ( pd ); while ( dirdatos != NULL ) { /* Obtengo el nombre completo */ sprintf(fichero,"%s/%s",nombredir,dirdatos->d_name); if ( -1 != stat( fichero, & datostat )) { // Acumulo bytes y número de ficheros nbytes = nbytes + datostat.st_size; nfiles ++; for ( i=1 ; i<= nivel ; i++ ) putchar('\t'); printf ( " %-20s \n", dirdatos->d_name ); /* Si es un directorio */ if ( S_ISDIR ( datostat.st_mode ) ) { VerDirectorio(fichero,nivel+1); } } dirdatos = readdir (pd ); } closedir ( pd ); } void main ( int argc, char *argv[] ) { if ( argc != 2 ) { fprintf(stderr,"Nº de parámetros erróneo\n"); fprintf(stderr,"Uso %s \n",argv[0]); exit (1); } VerDirectorio ( argv[1] , 0); printf("\n\t TOTAL: %ld Bytes en %ld Archivos.\n", nbytes, nfiles); }