Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Listar los archivos de un determinado directorio (https://www.clubdelphi.com/foros/showthread.php?t=80413)

dec 07-06-2006 19:49:40

Listar los archivos de un determinado directorio
 
El siguiente procedimiento lista los archivos que cumplan con una determinada máscara y se encuentren en un determinado directorio.

Los archivos se devuelven en la variable "lista", que se pasa como parámetro por referencia al procedimiento. Pueden obtenerse tan sólo los nombres de los archivos, si así se requiere.

Código Delphi [-]
uses
  SysUtils;

procedure ArchivosDirectorio(dir, mascara: string;
  var lista: TStrings; const soloNombres: boolean);
var
  SR: TSearchRec;
begin
  dir := IncludeTrailingPathDelimiter(dir);
  if FindFirst(dir + mascara, faAnyFile, SR) = 0 then
  begin
    repeat
      if not soloNombres then
        lista.Add(ExtractFileName(ChangeFileExt(dir + SR.Name, '')))
      else
        lista.Add(dir + SR.Name);
    until FindNext(SR) <> 0;
    SysUtils.FindClose(SR);
  end;
end;

Neftali [Germán.Estévez] 23-11-2006 17:22:17

Esta variante funciona de manera recursiva:

Código Delphi [-]
{: Devuelve una lista de nombres de fichero encontrados a partir de la
     carpeta inicial StartDir, que cumplen el patrón especificado por
     FileMask.Mediante recursively se indica si se desea hacer la busqueda 
     en los subdirectorios.
 StartDir     Carpeta desde la que empezar a buscar.
 FileMask    Patrón que han de cumplir los ficheros.
 Recursively Si hay que continuar la búsqueda en los subdirectorios.
    FilesList    Lista con los nombres de fichero encontrados.
  }
  procedure FindFiles(StartDir, FileMask: string; recursively: boolean; var FilesList: TStringList);
  const
    MASK_ALL_FILES = '*.*';
    CHAR_POINT = '.';
  var
    SR: TSearchRec;
    DirList: TStringList;
    IsFound: Boolean;
    i: integer;
  begin
    if (StartDir[length(StartDir)] <> '\') then begin
      StartDir := StartDir + '\';
    end;
  
    // Crear la lista de ficheos en el directorio StartDir (no directorios!)
    IsFound := FindFirst(StartDir + FileMask, faAnyFile - faDirectory, SR) = 0;
    // MIentras encuentre
    while IsFound do  begin
      FilesList.Add(StartDir + SR.Name);
      IsFound := FindNext(SR) = 0;
    end;
  
    FindClose(SR);
  
    // Recursivo?
    if (recursively) then begin
      // Build a list of subdirectories
      DirList := TStringList.Create;
      // proteccion
      try
        IsFound := FindFirst(StartDir + MASK_ALL_FILES, faAnyFile, SR) = 0;
        while IsFound do
        begin
          if ((SR.Attr and faDirectory) <> 0) and
            (SR.Name[1] <> CHAR_POINT) then
            DirList.Add(StartDir + SR.Name);
          IsFound := FindNext(SR) = 0;
        end;
        FindClose(SR);
  
        // Scan the list of subdirectories
        for i := 0 to DirList.Count - 1 do
          FindFiles(DirList[i], FileMask, recursively, FilesList);
      finally
        DirList.Free;
      end;
    end;
  end;

PEIIB 09-03-2018 10:23:04

Muchas gracias por vuestros aportes.
Despues de años y años, siguen siendo muy útiles!

dec 09-03-2018 11:18:43

Hola a todos,

Cita:

Empezado por PEIIB (Mensaje 525014)
Muchas gracias por vuestros aportes.
Despues de años y años, siguen siendo muy útiles!

Hay que agradecérselo a Microsoft Windows y a Embarcadero Delphi. :)


La franja horaria es GMT +2. Ahora son las 06:42:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi