Nuevo

Cómo buscar archivos y carpetas con Delphi

Cómo buscar archivos y carpetas con Delphi

Al buscar archivos, a menudo es útil y necesario buscar en subcarpetas. Aquí, vea cómo usar la fuerza de Delphi para crear un proyecto simple, pero poderoso, de encontrar todos los archivos coincidentes.

Proyecto de búsqueda de máscara de archivo / carpeta

El siguiente proyecto no solo le permite buscar archivos a través de subcarpetas, sino que también le permite determinar fácilmente los atributos del archivo, 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, muestra cómo buscar de forma recursiva a través de subcarpetas y reunir 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 comprender el código en el proyecto, debemos familiarizarnos con los siguientes tres métodos definidos en la unidad SysUtils: FindFirst, FindNext y FindClose.

FindFirst

función FindFirst (const Camino: cadena; Attr: entero; var Rec: TSearchRec): entero;

FindFirst es la llamada de inicialización para iniciar un procedimiento detallado de búsqueda de archivos utilizando llamadas API de Windows. La búsqueda busca archivos que coincidan con el especificador de ruta. La ruta generalmente incluye caracteres comodín (* y?). El parámetro Attr contiene combinaciones de atributos de archivo para controlar la búsqueda. Las constantes de atributo de archivo reconocidas en Attr son: faAnyFile (cualquier archivo), faDirectory (directorios), faReadOnly (archivos de solo lectura), faHidden (archivos ocultos), faArchive (archivos de almacenamiento), faSysFile (archivos del 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 falla, generalmente 18) y completa el Rec con información sobre el primer archivo coincidente. Para continuar la búsqueda, tenemos que usar el mismo registro TSearcRec y pasarlo a la función FindNext. Cuando se completa la búsqueda, se debe llamar al procedimiento FindClose para liberar recursos internos de Windows. El TSearchRec es un registro definido como:

typeTSearchRec = grabar

Tiempo: entero;

Tamaño: entero;

Attr: entero;

Nombre: TFileName;

ExcludeAttr: Integer;

FindHandle: THandle;

FindData: TWin32FindData;

fin;

Cuando se encuentra el primer archivo, se llena el parámetro Rec y el proyecto puede utilizar los siguientes campos (valores).
. Attr, los atributos del archivo como se describe arriba.
. Nombre contiene una cadena que representa un nombre de archivo, sin información de ruta
. tamaño en bytes del archivo encontrado.
. Hora almacena la fecha y hora de modificación del archivo como una fecha de archivo.
. FindData contiene información adicional, como el tiempo de creación del archivo, el último tiempo de acceso y los nombres de archivo largo y corto.

FindNext

función FindNext (var Rec: TSearchRec): entero;

La función FindNext es el segundo paso en el procedimiento detallado de búsqueda de archivos. Debe pasar el mismo registro de búsqueda (Rec) 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

procedimiento FindClose (var Rec: TSearchRec);

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

Búsqueda de coincidencia de máscara de archivo recursiva en Delphi

Este es el proyecto "Buscando archivos" tal como aparece en tiempo de ejecución. Los componentes más importantes en el 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 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, solo para mostrar que la búsqueda de archivos con Delphi es tan fácil como puede ser:

procedimiento Búsqueda de archivos(const PathName, FileName: cuerda) ;

var Rec: TSearchRec;
Camino: cadena;

empezar

Ruta: = IncludeTrailingPathDelimiter (PathName);

Si FindFirst (Path + FileName, faAnyFile - faDirectory, Rec) = 0 repetir

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

hasta FindNext (Rec) 0;

finalmente

FindClose (Rec);

fin;

{todo el código, particularmente recursivo
la llamada de función se puede encontrar (descargar) en
el código fuente del proyecto}

fin;