• Sábado 14 de Diciembre de 2024, 12:56

Autor Tema:  Como Creo Una Lista De Archivos De Una Carpeta?  (Leído 2173 veces)

plaf

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
Como Creo Una Lista De Archivos De Una Carpeta?
« en: Domingo 29 de Febrero de 2004, 23:28 »
0
eso, como puedo meterme a una carpeta y agarrar una lista de los archivos q tiene? algo asi como un "dir" pero guardando el output. no importa como quede, despues se arregla...
la idea es leer todos los archivos (1 a 1) *.algo de una carpeta, pero estos no siguen un patron en el nombre, son cualquier cosa

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Como Creo Una Lista De Archivos De Una Carpeta?
« Respuesta #1 en: Lunes 1 de Marzo de 2004, 18:39 »
0
Hola.

Te pego un pograma sacado de MSDN, cuya misión es listar todo el contenido de un directorio, entrando recursivamente en los subdirectorios. No creo que tengas que modificarlo mucho para adaptarlo a tus necesidades.

Código: Text
  1.  
  2. #include <windows.h>
  3. #include <stdio.h>
  4.  
  5. void ScanDir(char *dirname, int indent)
  6. {
  7.     BOOL            fFinished;
  8.     HANDLE          hList;
  9.     TCHAR           szDir[MAX_PATH+1];
  10.     TCHAR           szSubDir[MAX_PATH+1];
  11.     WIN32_FIND_DATA FileData;
  12.  
  13.     // Get the proper directory path
  14.     sprintf(szDir, "%s\\*", dirname);
  15.  
  16.     // Get the first file
  17.     hList = FindFirstFile(szDir, &FileData);
  18.     if (hList == INVALID_HANDLE_VALUE)
  19.     {
  20.         printf("No files found\n\n");
  21.     }
  22.     else
  23.     {
  24.         // Traverse through the directory structure
  25.         fFinished = FALSE;
  26.         while (!fFinished)
  27.         {
  28.             // Check the object is a directory or not
  29.             if (FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  30.             {
  31.                 if ((strcmp(FileData.cFileName, ".") != 0) &&
  32. (strcmp(FileData.cFileName, "..") != 0))
  33.                 {
  34.                     printf("%*s%s\\\n", indent, "",
  35.                       FileData.cFileName);
  36.  
  37.                     // Get the full path for sub directory
  38.                     sprintf(szSubDir, "%s\\%s", dirname,
  39.                       FileData.cFileName);
  40.  
  41.                     ScanDir(szSubDir, indent + 4);
  42.                 }
  43.             }
  44.             else
  45.                 printf("%*s%s\n", indent, "", FileData.cFileName);
  46.  
  47.  
  48.             if (!FindNextFile(hList, &FileData))
  49.             {
  50.                 if (GetLastError() == ERROR_NO_MORE_FILES)
  51.                 {
  52.                     fFinished = TRUE;
  53.                 }
  54.             }
  55.         }
  56.     }
  57.  
  58.     FindClose(hList);
  59. }
  60.  
  61. void main(int argc, char *argv[])
  62. {
  63.     char *pszInputPath;
  64.     char pwd[2] = ".";
  65.  
  66.     if (argc < 2)
  67.     {
  68.         printf("Argument not supplied - using current directory.\n");
  69.         pszInputPath = pwd;
  70.     }
  71.     else
  72.     {
  73.         pszInputPath = argv[1];
  74.         printf("Input Path: %s\n\n", pszInputPath);
  75.     }
  76.  
  77.     ScanDir(pszInputPath, 0);
  78.  
  79.     printf("\ndone.\n");
  80. }
  81.  
  82.  
  83.  
  84.  


Un saludo.

Ruben3d

QliX=D!

  • Miembro MUY activo
  • ***
  • Mensajes: 214
    • Ver Perfil
Re: Como Creo Una Lista De Archivos De Una Carpeta?
« Respuesta #2 en: Jueves 4 de Marzo de 2004, 14:29 »
0
Si te intereza hacerlo sin la api de windows existen las funciones diropen (U opendir?) para moverte dentro del listado..

slds.
QliX=D! - From the top of Tsunami

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Como Creo Una Lista De Archivos De Una Carpeta?
« Respuesta #3 en: Jueves 4 de Marzo de 2004, 17:41 »
0
Hola.

La función que mencionas es opendir(), pero es específica de sistemas basados en unix.

Un saludo.

Ruben3d

plaf

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
Re: Como Creo Una Lista De Archivos De Una Carpeta?
« Respuesta #4 en: Jueves 4 de Marzo de 2004, 23:10 »
0
gracias a los 2, ya me funciono :)
busque el opendir() en msdn y... chachan! encontre el ejemplo q puso ruben3d :P

por si alguien tb quiere hacer esto, le regalo el codigo... no es la gran cosa, es un vil copypastel recortado, pero igual funca :)

Código: Text
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int termina(char *palabra, char *fin)
  6. {
  7.    int i,p,f;
  8.    p=strlen(palabra);
  9.    f=strlen(fin);
  10.    for(i=1;i<=f;i++) if(palabra[p-i] != fin[f-i]) return 0;
  11.    return 1;
  12. }
  13.  
  14. void ScanDir()
  15. {
  16.    BOOL            fFinished;
  17.    HANDLE          hList;
  18.    WIN32_FIND_DATA FileData;
  19.  
  20.    hList = FindFirstFile(".\\*", &FileData);
  21.    fFinished = FALSE;
  22.    
  23.    while (!fFinished)
  24.    {
  25.        // Check the object is a directory or not
  26.        if (!(FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && termina(FileData.cFileName,".cpp"))
  27.            printf("%s\n",FileData.cFileName);
  28.  
  29.        if (!FindNextFile(hList, &FileData))
  30.        {
  31.            if (GetLastError() == ERROR_NO_MORE_FILES)
  32.            {
  33.                fFinished = TRUE;
  34.            }
  35.        }
  36.    }
  37.  
  38.    FindClose(hList);
  39. }
  40.  
  41. int main(int argc, char *argv[])
  42. {
  43.    ScanDir();
  44.  
  45.    printf("\ndone.\n");
  46.    system("pause");
  47. }
  48.  

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Como Creo Una Lista De Archivos De Una Carpeta?
« Respuesta #5 en: Viernes 5 de Marzo de 2004, 14:00 »
0
Hola.

Te hago una observación, ya que he visto la función termina. Si cambias el primer parámetro de FindFirstFile puedes seleccionar la extensión de los archivos que busca.

Un saludo.

Ruben3d

QliX=D!

  • Miembro MUY activo
  • ***
  • Mensajes: 214
    • Ver Perfil
Re: Como Creo Una Lista De Archivos De Una Carpeta?
« Respuesta #6 en: Viernes 5 de Marzo de 2004, 14:36 »
0
Cita de: "Ruben3d"
Hola.

La función que mencionas es opendir(), pero es específica de sistemas basados en unix.

Un saludo.

Ruben3d
Estemmm... No
Es compatible con POSIX y Win. Pero aun no es parte del estandar (Creo...)

Y las funciones asociadas son:

* opendir : Abre el Directorio
* readdir  : Lee una entrad del directorio
* rewindir : "Rebobina" el puntero de directorio y vuelve al principio (con lo caul vez uqe es un metodo de lectura secuencial...)
* closedir : Cierra el descriptor de directorio Abierto.

Slds.
QliX=D! - From the top of Tsunami

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Como Creo Una Lista De Archivos De Una Carpeta?
« Respuesta #7 en: Viernes 5 de Marzo de 2004, 15:46 »
0
Citar
Cita de: "Ruben3d"
Hola.

La función que mencionas es opendir(), pero es específica de sistemas basados en unix.

Un saludo.

Ruben3d
Estemmm... No
Estemmm... Sí

Citar
Es compatible con POSIX y Win

Si mal no recuerdo, la compatibilidad con POSIX de sistemas win32 no es completa. Sólo tiene implementadas algunas funciones, principalmente de manejo de ficheros.

La función opendir() y demás declaradas en dirent.h fueron implementadas en 4.3 BSD para facilitar el acceso a la información de cada directorio. Después también la adoptaron en UNIX System V, ya que facilitaba la portabilidad del código. Así, acabó en todos los Unix. Ahora bien, si programas en Windows NO tienes esas funciones (a no ser que coja alguien y le haga un wrapper al API, pero eso lo hace cualquiera, quiero decir, no es oficial).

Se puede comprobar probando opendir en el compilador de Microsoft. No lo reconocerá. Tampoco está en MSDN (y si una función del sistema no está en MSDN es que no existe). La única referencia a opendir en MSDN está en la página de guía de migración de código de Unix a Win32, donde explica cómo sustituir la versión de UNIX por las funciones de microsoft (de esa página ha salido el código posteado más arriba).

Un saludo.

Ruben3d