[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