Cómo buscar archivos y carpetas con Delphi

Al buscar archivos, a menudo es útil y necesario buscar en subcarpetas. Aquí puede ver cómo utilizar la fuerza de Delphi para crear un proyecto sencillo, pero potente, de encontrar todos los archivos que coincidan.

Proyecto de búsqueda de máscaras de archivos/carpetas

El siguiente proyecto no sólo le permite buscar archivos a través de subcarpetas, sino que también le permite determinar fácilmente los atributos de los archivos, como Nombre, Tamaño, Fecha de modificación, etc. para que pueda ver cuándo invocar el Diálogo de propiedades de archivo desde el Explorador de Windows.

En particular, demuestra cómo buscar recursivamente a través de subcarpetas y armar una lista de archivos que coinciden con una determinada máscara de archivo. La técnica de recursión se define como una rutina que se llama a sí misma en medio de su código.

Para entender el código en el proyecto, debemos familiarizarnos con los siguientes tres métodos definidos en la unidad SysUtils: FindFirst, FindNext, and FindClose.

FindFirst

 function FindFirst(const Path: string; Attr: Integer; var Rec: TSearchRec): Integer;

FindFirst es la llamada de inicialización para iniciar un procedimiento detallado de búsqueda de archivos mediante llamadas a la API de Windows. La búsqueda busca archivos que coincidan con el especificador de ruta. La Ruta suele incluir caracteres comodín (* y ?). El parámetro Attr contiene combinaciones de atributos de archivo para controlar la búsqueda. Las constantes de atributos de archivo reconocidas en Attr son: faAnyFile (cualquier archivo), faDirectory (directorios), faReadOnly (archivos de sólo lectura), faHidden (archivos ocultos), faArchive (archivos de archivo), faSysFile (archivos de sistema) y faVolumeID (archivos de ID de volumen).

Si FindFirst encuentra uno o más archivos coincidentes, devuelve 0 (o un código de error por fallo, normalmente 18) y rellena la grabación con información sobre el primer archivo coincidente. Para continuar la búsqueda, tenemos que utilizar el mismo registro TSearcRec y pasarlo a la función FindNext. Una vez finalizada la búsqueda, se debe llamar al procedimiento FindClose para liberar los recursos internos de Windows.

El TSearchRec es un registro definido como:

 type

TSearchRec = record

Time: Integer;

Size: Integer;

Attr: Integer;

Name: TFileName;

ExcludeAttr: Integer;

FindHandle: THandle;

FindData: TWin32FindData;

end;

Cuando se encuentra el primer archivo, se rellena el parámetro Rec y los siguientes campos (valores) pueden ser utilizados por su proyecto.

. Attr, los atributos del archivo como se describió anteriormente.

. El nombre contiene una cadena que representa un nombre de fichero, sin información sobre la vía de acceso.

. Tamaño en bytes del archivo encontrado.

. La hora almacena la fecha y hora de modificación del archivo como una fecha de archivo.

. FindData contiene información adicional, como la hora de creación del archivo, la hora del último acceso y los nombres de archivos largos y cortos.

FindNext

 function FindNext(var Rec: TSearchRec): Integer;

La función FindNext es el segundo paso en el procedimiento de búsqueda detallada de ficheros. Debe pasar el mismo registro de búsqueda (Rec) que ha sido creado por la llamada a FindFirst. El valor de retorno de FindNext es cero para el éxito o un código de error para cualquier error.

FindClose

 procedure FindClose(var Rec: TSearchRec) ;

Este procedimiento es la llamada de terminación requerida para un FindFirst/FindNext.

Búsqueda de coincidencias de máscaras de archivos recursivas en Delphi

Este es el proyecto "Búsqueda de archivos" tal y como aparece en tiempo de ejecución.

Los componentes más importantes del formulario son dos cuadros de edición, un cuadro de lista, una casilla de verificación y un botón. Los cuadros de edición se utilizan para especificar la ruta en la que desea buscar y una máscara de archivo. Los archivos encontrados se muestran en el cuadro de lista y si la casilla de verificación está marcada, todas las subcarpetas se analizan en busca de archivos coincidentes.

A continuación, se muestra el pequeño fragmento de código del proyecto, sólo para mostrar que la búsqueda de archivos con Delphi es tan fácil como puede ser:

 procedure FileSearch(const PathName, FileName : string) ;

var Rec : TSearchRec;

Path : string;

begin

Path := IncludeTrailingPathDelimiter(PathName) ;

if FindFirst (Path + FileName, faAnyFile - faDirectory, Rec) = 0 then

try

repeat

ListBox1.Items.Add(Path + Rec.Name) ;

until FindNext(Rec) <> 0;

finally

FindClose(Rec) ;

end;

...

{all the code, particularly recursive

function call can be found (downloaded) in

the project source code}

...

end;

(0 votes)