

En algunas ocasiones es necesario obtener el directorio de archivos de alguna(s) carpeta(s) en especial para mostrarla en una pantalla de consulta o bien para procesar dicha información para diversos fines, Clarion nos da la posibilidad de accesar la lista de archivos o directorios mediante la instrucción DIRECTORY, la cual nos permite almacenar el nombre corto y largo de los archivos, fecha y hora de creación, tamaño y otros atributos en un QUEUE el cual podrá por ejemplo desplegarse en una LISTA de una ventana.
Entendamos primero la sintaxis de la instrucción DIRECTORY:
DIRECTORY( queue, path, attributes )
Donde :
queue : (queue) es la estructura de datos donde se almacenará la lista de archivos del directorio indicado.
El queue indicado en este parámetro debe seguir una estructura predefinida, dicha estructura se encuentra definido en el archivo EQUATES.CLW el cual normalmente se encontrará en el directorio LIBSRC de nuestro directorio del lenguaje clarion, (ejemplo: C:\C55\LIBSRC). Así pues este queue puede definirse por ejemplo en los embedds de datos indicando entre paréntesis el tipo FILE:queue:
FILE:queue es una definición TYPE que como se mencionó se encuentra en EQUATES.CLW y no es necesario definir nuevamente:
FILE:queue QUEUE,PRE(File),TYPE
name STRING(FILE:MAXFILENAME) !FILE:MAXFILENAME is an EQUATE
shortname STRING(13)
date LONG
time LONG
size LONG
attrib BYTE !A bitmap, the same as the attributes EQUATEs
END
Otra forma de declarar este queue es directamente en la interface de declaración de datos, esta es recomendable si se desea desplegar directamente dicho queue en una lista de una ventana por ejemplo así será fácil seleccionar cada uno de los campos a incluir en la lista, para ello es necesario incluir cada una de las columnas a desplegar en el queue según la Figura 1, los campos:
|
|
| QAR:NombreLargo String(255) |
| QAR:NombreCorto String(13) |
| QAR:Fecha Long |
QAR:Hora Long
|
| QAR:Tamano Long |
| QAR:Atributos Byte |
path : (string) El segundo parámetro es el nombre del directorio y ti pos de archivos que se obtendrán, ejemplo: ‘C:\MisDatos\*.Txt’, si se indica solo ‘*.*’ se obtendrá la lista de archivos del directorio en el cual se encuentre la aplicación en ese instante.
attributes : (integer) es una constante que indica aquellos archivos ó directorios los cuales se integrarán en el queue, existe igualmente en EQUATES.CLW un listado de atributos disponibles a incluir los cuales son:
ff_:NORMAL EQUATE(0) !Always active
ff_:READONLY EQUATE(1) !Not for use as attributes parameter
ff_:HIDDEN EQUATE(2)
ff_:SYSTEM EQUATE(4)
ff_:DIRECTORY EQUATE(10H)
ff_:ARCHIVE EQUATE(20H) ! NOT Win95 compatible
Si se desean combinar varios se suman unos a otros, ejemplo: ff_:NORMAL + ff_:READONLY
Aplicación Ejemplo:
Fig. 2
El ejemplo de la figura 2 utiliza la instrucción DIRECTORY para mostrar la lista de archivos de la carpeta indicada en el renglón DIRECTORIO, para lograr lo anterior en algún APP se requiere:
1-Crear una ventana.
2-Declarar la estructura de datos para almacenar los archivos (Ver figura 1), de igual forma es necesario incluir la declaración del campo directorio que para nuestro ejemplo es un string de 255 caracteres.
3-Se incluye en la ventana un control tipo lista
y se agregan como columnas cada uno de los campos declarados en el queue.
4-En las propiedades de la lista será necesario indicar en el atributo ‘From’ el nombre del queue declarado:
Fig. 3
5-Por último en el embedd Accepted del campo de directorio incluir el siguiente código…

! Obtén directorio si procede...
FREE(QUE:Archivos) ! Importante limpiar queue de consultas anteriores…
IF CLIP(LOC:Directorio) THEN
DIRECTORY(QUE:Archivos, CLIP(LOC:Directorio) & '\*.*', ff_:DIRECTORY)
END
SELECT(?List1)
NOTA: Este código podría colocarse de igual forma en el accepted del LookupFile si se utilizó el template DOSFileLookupFile (El cual veremos en futuras revisiones)