|
Buscando archivos
Copyright © 2000 Ernesto
De Spirito
FindFirst, FindNext, FindClose
Para buscar ficheros que concuerden con una cierta especificación de
nombre (como 'C:\WINDOWS\*.INI') usamos las
funciones FindFirst y FindNext el
procedimiento FindClose. Para que esto funcione, necesitamos un
registro TSearchRec que entre otras cosas contiene información
del fichero encontrado que coincide con el criterio de búsqueda. Se usa
un código como el siguiente:
uses SysUtils;
procedure TForm1.Button1Click(Sender: TObject);
var
SearchRec: TSearchRec;
begin
if FindFirst('C:\WINDOWS\*.INI', faAnyFile and not
(faVolumeID or faDirectory), SearchRec) = 0 then
begin
repeat
// Aquí procesamos cada archivo encontrado
// Sus datos se encuentran en SearchRec.
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;
Si FindFirst devuelve 0 significa que al menos se encontró un fichero
coincidente con el criterio especificado. Luego usamos FindNext para
obtener la información de los siguientes ficheros que cumplen el
criterio de búsqueda uno por uno. FindNext también devuelve 0 si se
encuentra un fichero. Después que hayamos procesado todos los ficheros
debemos cerrar la búsqueda llamando a FindClose que libera algunos
recursos en SearchRec asignados por FindFirst.
Si atributos es 0, FindFirst y luego FindNext encontrarán
sólo ficheros normales, excluyendo los ficheros marcados con atributos de
Archivo, Sólo Lectura, Oculto, Sistema, Directorio o Volumen. Para incluir
estos ficheros en la búsqueda sumamos ("OReamos") sus constantes
correspondientes: faArchive, faReadOnly, faHidden, faSysFile,
faDirectory y faVolumeID .
Si necesita buscar archivos en un directorio y sus subdirectorios puede
usar este ejemplo.
TSearchRec
Esta estructura (registro) contiene la información de un fichero
encontrado por FindFirst o FindNext. El campo más
importante es Name, una cadena que contiene el nombre largo
del archivo encontrado, sin el camino.
type
TSearchRec = record
Time: Integer;
Size: Integer;
Attr: Integer;
Name: TFileName;
ExcludeAttr: Integer;
FindHandle: THandle;
FindData: TWin32FindData; // Información adicional
end;
El campo Time es una estampa de fecha y hora de DOS y
representa el momento de la última modificación realizada al
archivo. Puede convertir este valor a un TDateTime usando
la función FileDateToDateTime.
|