Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
FindFirst, FindNext, FindClose, TSearchRec





Con estas dos funciones (FindFirst y FindNext) podremos recorrer una carpeta y buscar ficheros según sus atributos y según un filtro dado (comodines).

La función FindFirst, con la siguiente sintaxis: FindFirst(carpeta+filtro, tipo_fichero, TSearchRec) devolverá TRUE si encuentra algún fichero con el filtro indicado y el tipo de fichero (atributos) indicado, devolverá en el componente TSearchRec los datos del fichero encontrado.

La función FindNext, con la sintaxis: FindNext(TSearchRec) devolverá la siguiente coincidencia del componente TSearchRec pasado como parámetro, devolverá el siguiente fichero que cumpla la condición de búsqueda establecida en FindFirst. Cuando no encuentre más resultados devolverá 0.

La función FindClose, con la sintaxis: FindClose(TSearchRec) libera la memoria asignada por FindFirst en el TSearchRec.

El tipo TSearchRec define la información obtenida por FindFirst ó FindNext. Este tipo pertenece la la unidad SysUtils y su declaración es la siguiente:

TSearchRec = record
Time: Integer;
Size: Integer;
Attr: Integer;
Name: TFileName;
ExcludeAttr: Integer;
FindHandle: THandle;
FindData: TWin32FindData;
end;

donde Attr equivale al atributo, cuyo valor entero equivale a los siguientes atributos:

faReadOnly $00000001 Read-only files
faHidden $00000002 Hidden files
faSysFile $00000004 System files
faVolumeID $00000008 Volume ID files
faDirectory $00000010 Directory files
faArchive $00000020 Archive files
faAnyFile $0000003F Any file



Un ejemplo de uso de estas funciones y del tipo TSearchRec:


procedure TformMenuPrincipal.copiaFicheros (carpetaOrigen,
carpetaDestino, filtro : string;
reemplazarFicheros : boolean; tipoLog : string);
var
compBusqueda : TSearchRec;
begin
carpetaOrigen :=
IncludeTrailingBackslash(carpetaOrigen);
carpetaDestino :=
IncludeTrailingBackslash(carpetaDestino);
ForceDirectories(carpetaDestino);

if FindFirst(carpetaOrigen + filtro,
faAnyFile, compBusqueda) = 0 then
begin
repeat
if (compBusqueda.Name <> '.') and
(compBusqueda.Name <> '..') then
if (compBusqueda.Attr and faDirectory) > 0 then
copiaFicheros(carpetaOrigen +
compBusqueda.Name,
carpetaDestino + compBusqueda.Name, filtro,
reemplazarFicheros, tipoLog)
else
begin
lInfo.Caption := 'Copiando ' +
carpetaOrigen + compBusqueda.Name;
lInfo.Refresh;
Application.ProcessMessages;
if CopyFile(Pchar(carpetaOrigen +
compBusqueda.Name),
PChar(carpetaDestino + compBusqueda.Name),
reemplazarFicheros) then
numFicherosCopiados := numFicherosCopiados + 1;
else
numFicherosNoCopiados := numFicherosNoCopiados + 1;
end;
until FindNext(compBusqueda) <> 0;
FindClose(compBusqueda);
end;
end;


Este ejemplo se puede utilizar para realizar una copia de una carpeta y todas sus subcarpetas en otra.



Funciones Delphi

Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A