Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/12/2010, 07:04
cbecmor
 
Fecha de Ingreso: diciembre-2010
Mensajes: 2
Antigüedad: 13 años, 4 meses
Puntos: 0
Busqueda Duda Urgente Recorrido de Diresctorios

Buenas A Todos :)

Miren la cuestion es que estoi realizando un recorrido de directorios bastante simple.
Recorro una carpeta la cual si tiene mas carpetas dentro me dira cuanto elementos tengo.
En caso de que tenga ficheros .txt me imprimira los X caracteres que yo quiera.
La cuestion es que el fopen de ficheros no me da NULL cuando es otro tipo ya sea .c o .pdf

Me preguntaba como podria solucionarlo o como ago con la funcion stat() para diferenciar unos de otros.. GRACIAS DE ANTEMANO¡¡
Código c:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <dirent.h>
  4. #include <string.h>
  5. #include <sys/types.h>
  6. #include <sys/stat.h>
  7. #define MAX 100
  8.  
  9.  
  10. int main( int argc, char *argv[])
  11. {
  12.  
  13.  
  14.     DIR *dir;
  15.     FILE *f=NULL;
  16.     int ent,numeroEntradas;
  17.  
  18.     struct dirent *mi_dirent;
  19.     struct dirent **entradas= NULL;
  20.     struct stat datosF;
  21.  
  22.     char nombre[MAX];
  23.     char extension[MAX];
  24.     char Elemento[10];
  25.     char c;
  26.     int x=0;
  27.     int cont=2;
  28.     strcpy(nombre,argv[1]);
  29.  
  30.     printf("\n .Listado de: %s .\n",nombre);
  31.     strcat(nombre,"/");
  32.  
  33.     if ( (dir = opendir( argv[1] )) == NULL )
  34.     {
  35.         perror( "opendir" );
  36.         exit( -1 );
  37.     }
  38.  
  39.     while ( (mi_dirent = readdir( dir )) != NULL )
  40.     {
  41.         if ( (strcmp(mi_dirent->d_name, ".") != 0) && (strcmp(mi_dirent->d_name, "..")!= 0) )
  42.         {
  43.             strcpy(extension,nombre);
  44.             strcat(extension,mi_dirent->d_name);
  45.             ent=stat(extension,&datosF);
  46.  
  47.             if (S_ISDIR(datosF.st_mode)){
  48.  
  49.                 strcpy(Elemento,"Elemento");
  50.                 numeroEntradas = scandir (extension, &entradas, NULL, NULL);
  51.  
  52.                 if ((numeroEntradas-2)!=1)
  53.                 {
  54.                     strcat(Elemento,"s");
  55.                 }
  56.                 printf(" .Directorio:  %s [%d %s].\n",mi_dirent->d_name,numeroEntradas-2,Elemento);
  57.  
  58.             }
  59.  
  60.             if (S_ISREG(datosF.st_mode))  {
  61.              
  62.             printf(" .Fichero ");
  63.                 printf("%s: ",mi_dirent->d_name);
  64.                 f = fopen(extension,"r+");
  65.  
  66.                 if ( f != NULL){
  67.         printf("Primeros %d elementos [ ",cont);              
  68.         x=0;
  69.                 while (!feof(f) && x<cont){
  70.                    
  71.             fscanf (f,"%c",&c);
  72.                     printf("%c",c);
  73.                     x++;
  74.                 }
  75.                 printf(" ]\n");
  76.             }
  77.                }   
  78.             }
  79.  
  80.        
  81.     }
  82.     printf("\n\n");
  83.  
  84.     closedir( dir );
  85.  
  86.     return 0;
  87. }

Última edición por cbecmor; 14/12/2010 a las 07:20