[C con Clase] Impresion Directorios/Ficheros con opcion -tree en UNIX

David lukas davidlukas en hotmail.com
Jue Oct 11 00:47:29 CEST 2007


Wenas , estoy intentando la implementacion de la impresion de  Directorios/ficheros de la siguiente manera :


Directorio

[tab]Fichero

[tab]Fichero

Directorio

[tab]Subdirectorio

[tab][tab]Fichero

..

De momento el codigo q llevo realizado es este :

#include<stdio.h>
#include<dirent.h>
#include<string.h>
#include<sys/stat.h>
#include<sys/types.h>
#include <stdlib.h>

//Prototipos
void busqueda(char [],char [],int);

int main(int argc, char *argv[]){

    char user [PATH_MAX];
    char ruta [PATH_MAX];
    int tab=0;    

    strcpy(user,argv[1]); // Pillamos el nombre del usuario // NO IMPORTA SI HAY ERROR AL NO AÑADIR EL NOMBRE DEL USUARIO // SOLO ES PRUEBA    
    getcwd(ruta,PATH_MAX); // Pillamos el directorio actual.

    busqueda(user,ruta,tab);//Llamamos la funcion recursiva de busqueda de Directorios/archivos.
    
}
void busqueda(char user[],char ruta[],int tab){

    DIR *directorio;
    struct dirent *fichero;
    struct stat fich;    
    char ficheros [PATH_MAX];
    
    int i;    

    directorio = opendir(ruta);
    if(directorio==NULL){
        printf("Error al abrir el directorio\n");
        exit(-1);
    }
    while ( (fichero=readdir(directorio)) != NULL ){
        if ( strcmp(fichero->d_name, "..") != 0 && strcmp(fichero->d_name, ".") != 0 ){
            strcpy (ficheros, ruta);
            strcat (ficheros, "/");
            strcat (ficheros, fichero->d_name);
            if ( (lstat(ficheros, &fich)) == -1 ){    //obtenemos la informacion del archivo

                    fprintf( stderr, "\nNo se pudo obtener la informacion del fichero:\n" );
                    fprintf( stderr, "\t%s\n\n", ficheros);
            }            
            //-tree? xD
            if(S_ISDIR(fich.st_mode)){ //Encontramos un directorio, y aumentamos tab+1 para tabular los archivos q contiene
                for(i=0;i<tab;i++) 
                    printf("\t");                                
                printf("%s \n",fichero->d_name);
                tab=tab+1;                            
            }
            else{ 
                for(i=0;i<tab;i++)
                    printf("\t");                        
                printf("%s \n",fichero->d_name);
            }    
            //recursiva
            if(S_ISDIR(fich.st_mode))    
                busqueda(user,ficheros,tab);        
        }
    }
    closedir(directorio);    
}

Por supuesto , el problema solo radica en la impresion "-tree" . Ahora
mismo lo unico que hce es tabular , cuando ve que es un directorio,
pero no se volver al principio de linea para el siguiente. Alguien me
puede echar una manita? 



Gracias.

_________________________________________________________________
Express yourself instantly with MSN Messenger! Download today it's FREE!
http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20071010/814f0764/attachment.html>


Más información sobre la lista de distribución Cconclase