int get_dirinfo( const char * máscara, int tipo_archivo )


Retorna:

 Número de archivos del directorio que coinciden con la máscara y el tipo seleccionado.

Descripción:

Esta función permite obtener la lista de archivos de un directorio (carpeta) del disco.

Se requiere la máscara del directorio para seleccionar los archivos que deben listarse. Esta máscara no es más que un nombre de archivo parcial, utilizando comodines; por ejemplo, la máscara "*.*" (se debe indicar como un texto entre comillas) seleccionará todos los archivos del directorio.

También se puede incluir en la máscara la ruta de acceso del directorio (en caso contrario se listarán los archivos del directorio actual). Por ejemplo, la máscara "C:/WINDOWS/SYS*.??E" seleccionaría todos los archivos del directorio "C:/WINDOWS" cuyo nombre comenzara por "SYS" y su extensión acabara en "E".

Como segundo parámetro se debe indicar los tipos de archivos que deben incluirse en la lista, estos son los siguientes:

 f_normal // Archivos normales.
 f_hidden // Archivos ocultos.
 f_system // Archivos del sistema.
 f_subdir // Subdirectorios.
 f_volid  // Etiqueta del volumen.
 f_ronly  // Archivos de solo lectura.

Lo más usual es indicar f_normal como tipo de archivos, este tipo engloba a la gran mayoría de archivos que aparecen en un disco, tanto de lectura/escritura, como de sólo lectura (únicamente no se incluyen algunos archivos especiales, que normalmente son archivos internos del sistema operativo), para incluir varias tipos de archivos tendrá que utilizar el operador lógico "&" con por ejemplo:

 get_dirinfo("*.*", f_normal & f_subdir);

Si se indican f_hidden, f_system, f_ronly o f_subdir, se incluirán estos tipos de archivos además de los normales (no es necesario especificar f_normal). Además pueden sumarse estos tipos; por ejemplo, indicando f_hidden | f_system se listarán todos los archivos normales, los ocultos y los del sistema.

Cuando se indique _volid, únicamente se listará el nombre de la etiqueta de volumen del disco, no se incluirá ningún archivo ni subdirectorio en la lista (no se pueden sumar otros tipos a este).

La función get_dirinfo() simplemente retorna el número total de archivos listados; los nombres de estos archivos se guardan en la estructura global dirinfo (el primer nombre de archivo se guarda en dirinfo.name[0], el segundo en dirinfo.name[1], etc.).

El número total de archivos listados que retorna esta función se guarda además en dirinfo.files.

Esta función únicamente permite obtener los nombres de los archivos, para obtener más información de los mismos (los atributos, el tamaño, la fecha, etc.) se debe utilizar la función get_fileinfo().


int contador;

MAIN_PROGRAM_CDIV
BEGIN_PROGRAM 

    //Definimos el modo grafico
    set_gfx(GFX_AUTODETECT_WINDOWED);

    //Definimos la resolución
    set_mode(m320x200);

    write(0, 0, 0, 0, "Listado de archivos *.*:");
    write_int(0, 200, 0, 0, &dirinfo.files);

    get_dirinfo("*.*", f_normal & f_subdir); // Obtiene el listado de archivos y directorios

    for (contador = 0; contador < dirinfo.files; contador++){
       x = (contador%2) * 160;
       y = 16 + (contador/2) * 8;
       write(0, x, y, 0, dirinfo.name[contador]);
    }

    LOOP
     FRAME;

END_PROGRAM

Este programa ejemplo lista todos los archivos C:/*.* normales del directorio C:/, y entonces los muestra en pantalla.

El bucle for es el encargado de mostrar en pantalla la lista de archivos de la estructura dirinfo a cuatro columnas, ya que la función get_dirinfo() no muestra ninguna información en pantalla, únicamente rellena la estructura con los nombres de los archivos encontrados en el directorio.

Para abrir o crear un archivo se puede utilizar la función fopen().


Ver: get_fileinfo()