From: jguzman@dcc.uchile.cl (Jose Miguel Guzman)
Subject: Re: directorios
Originator: jguzman@dcc.uchile.cl
Date: Wed, 07 Oct 1992 14:35:30 GMT
Distribution: uchile
Organization: Universidad de Chile, Depto. de Ciencias de la Computacion

In article jbachler@dcc.uchile.cl (Jorge Alejandro Bachler Olmos) writes:
>   Hola :
>	   Alguien sabe que estructura tiene un directorio en
>   DOS. Me explico quiero leer desde C, y guardar
>   en algun tipo de estructura la informacion que haya en
>   un directorio ( subdirectorios, archivos, etc..).
>	Gracias.
>	Jorge.       jbachler@dcc.uchile.cl

 Los directorios en DOS, tienen una estructura de Arbol. Es decir,
 de cada directorio del disco, puede nacer otro directorio, y de este
 otro, y asi sucesivamente.

 Sin embargo hay un directorio llamado ROOT (o raiz), que es el
 directorio principal, ya sea en discos duros o flexibles.

 El directorio principal, esta en los sectores que siguen al BOOT
 sector y tabla de particiones del disco. El numero de sectores
 que ocupa, depende del tamano del disco.

 Ahora, este directorio esta compuesto por registros de 32 bytes, que
 Estan ubicados en forma consecutiva, cuya estructura es la siguiente:

        BYTES   CONTENIDO
        ------------------------
        0-7     Nombre del Archivo (o directorio si corresponde)
        8-10    Extension del Archivo
        11      Atributo del Archivo (*)
        12-21   RESERVADOS ??
        22-23   Hora de creacion
        24-25   Fecha de creacion
        26-27   Cluster donde comienza archivo (o directorio)
        28-31   Tamano del Archivo (0 si es directorio)

(*) El byte 11, contiene un byte de atributo, que indica que es
    lo que contiene este registro. Su composicion binaria es:
        76543210
        --------
        ??
          1      = Archivo comun
           1     = Directorio
            1    = Etiqueta del disco
             1   = Archivo del Sistema
              1  = Hidden File (oculto)
               1 = Read/Only (solo lectura)

     De este modo, si el atributo es 10h, sabemos que es un directorio.

Para poder obtener esta informacion desde Assembler, se debe usar el
servicios del DOS 4Eh y 4Fh. Para usarlo desde C, se pueden usar las
funciones del Microsoft C (o Quick C):

int _dos_findfirst(char *file_spec, unsigned attribute, struct find_t *)
int _dos_findnext( struct find_t * )

Ejemplo:
    . . . . .
    /* Busca Archivos Que Cumplen Condicion
       en este directorio
    */
    r=_dos_findfirst(rama,_A_NORMAL|_A_ARCH|
                     _A_RDONLY|_A_SYSTEM, &fila);
    while (r==0){
        printf("Encontrado  %s%c%s\n",path,'\\',
                fila.name);
        r=_dos_findnext(&fila);
    }
    . . . . .

Este es un fragmento de un programa que hice, para hacer una busqueda
recursiva de un deterinado tipo de archivo.

Si quieres mas informacion, publicalo nuevamente.

PD: Si alquien quiere una copia del programa DONDE.C, para hacer
busqueda recursiva de archivos dentro de todo el disco duro, mandenme uN
mail, y yo se lo mando....
    Mas informacion sobre la estructrctura de los Directorios, sale en 
el "Technical Reference Manual" del MS-DOS. 

-- 
   ""\          Jose Miguel Guzman C |   E-Mail: jguzman@dcc.uchile.cl 
     | /""\""\        (JM)           |         
   / | |  |  |  -------------------- | 
   \_| |  |  |   Revista MicroByte   |
Newsgroups: chile.test