Control de usuario
Patrocinadores
Estadísticas
Miembros:
334.623
Online:
1.523
Hilos:
1.380.611
Mensajes:
24.882.118
Stats

Índice de foros Otras Consolas Desarrollo

Nº archivos en un directorio (lenguaje c)

Dedicado al desarrollo de software casero para videoconsolas

Moderador: jiXo

nazareth
Avatar de usuario
I'm Finishing
 
Mensajes: 2466
Registrado: 03 Ene 2008
Ubicación: Cartagena

Mensajepor nazareth 03 Jul 2011 17:45

Es usando NFlib (Nintendo DS).

Código: Seleccionar todo
void Dir_struct(const char* carpeta){
     DIR *directorio;
     struct dirent *infodir;
     u8 valido = 0;
     u16 var = 0;
     char buffer[32];
     
     //Abrimos la carpeta
     directorio = opendir(carpeta);
     
     if(directorio == NULL)
     {
                   NF_WriteText(0,0,7,21,"ERROR");
                   for(;;){
                           swiWaitForVBlank();
                           }
     }
     
     while((infodir = readdir(directorio)) != NULL )
     {
                   valido = C_extension(infodir->d_name);
                   if(valido == 1){
                             /*No fufa ninguna
                             sprintf(buffer,"%s",(char*)(infodir->d_name));
                             strncpy(buffer, infodir->d_name, 10);
                             */
                             NF_WriteTextVAR(0,0,1,8,"%s",buffer);
                             var++;
                             }
             
     }
     
     NF_WriteTextVAR(0,0,1,6,"Roms->dir: %d",var);
     NF_WriteTextVAR(0,0,1,7,"Rom: %s",buffer);
     NF_UpdateTextLayers(); //Actualiza la pantalla
     
     closedir(directorio);
}


Var si muestra 1 (en la carpeta hay 1 archivo) pero no el nombre no :/

Saludos y grax!

iceman755
Avatar de usuario
Adicto
 
Mensajes: 277
Registrado: 25 Jul 2007

Mensajepor iceman755 03 Jul 2011 18:55

El codigo esta bien, con sustituir las funciones propias de NFL tu funcion trabaja perfecto, con sprintf o strncpy tira bien.

Lo unico que se me ocurre es que quizas NF_WriteTextVAR no rule como debe.

nazareth
Avatar de usuario
I'm Finishing
 
Mensajes: 2466
Registrado: 03 Ene 2008
Ubicación: Cartagena

Mensajepor nazareth 03 Jul 2011 20:41

Me he dado cuenta que la función que he hecho para ver la extensión no funciona bien, no toma por igual .xx que .XX

Y el problema de esto, es que al parecer, no funciona ninguna función, ni la de mostrar texto ni nunguna, solo funciona sumar la variable, es raro raro raro.

PD: Solved (alguna mejora que añadir?)

Código: Seleccionar todo
//Funcion comprobar si es un .nds o no
int C_extension(const char* nombre){
     //Declaramos variables
     u8 valido = 0;
     u8 longitud = 0;
     u8 i = 0, j = 0;
     char * extension;
     
     //Obtenemos la longitud del array
     longitud = strlen(nombre);
     
     //Obtenemos la extension que tiene
     for(i = (longitud-4); i < longitud; i++){
           extension[j] = nombre[i];
           j++;
           }
     
     //Comprobamos
     if((strcmp(extension,".nds") == 0) || (strcmp(extension,".NDS") == 0))
     {
                                   valido = 1;
     }else{
                                   valido = 0;
     }

     return valido;
}

//Para trimmear la SD completa sirve esta misma funcion solo que como "carpeta" usamos ("."), como en chdir(".");
void Dir_struct(const char* carpeta){
     DIR *directorio;
     struct dirent *infodir;
     u8 valido = 0;
     u16 rom = 0;
     u16 carp = 0;
     u8 i=0;
     
     //Abrimos la carpeta
     directorio = opendir(carpeta);
     
     if(directorio == NULL)
     {
                   NF_WriteText(0,0,7,21,"ERROR");
                   for(;;){
                           swiWaitForVBlank();
                           }
     }
     
     while((infodir = readdir(directorio)) != NULL )
     {                               
                   valido = C_extension(infodir->d_name);
                   switch(valido){
                                 case 0:
                                      if((strcmp(infodir->d_name,".") != 0) && (strcmp(infodir->d_name,"..") != 0)){
                                      carp++;
                                      }
                                      break;
                                 case 1:
                                      strcpy(buffer, infodir->d_name);
                                      rom++;
                                      break;
                   }
                   i++;
             
     }
     
     //Debug
     NF_WriteTextVAR(0,0,1,21,"Nº Roms     : %d",rom);
     NF_WriteTextVAR(0,0,1,22,"Nº Carpetas : %d",carp);
     NF_UpdateTextLayers();
}

Previo

Volver a Desarrollo

¿Quién está conectado?

Usuarios navegando por este foro: No hay usuarios registrados visitando el foro y 0 invitados