Ver Mensaje Individual
  #8  
Antiguo 28-07-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Reputación: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Personalmente no encuentro problemas utilizando el siguiente procedimiento en Windows XP Service Pack 2:

Código Delphi [-]
(*
 
   Busca y lista los archivos que cumplan con determinada
   máscara y que se encuentren en un determinado directorio
   y/o dentro de los subdirectorios del mismo.
 
   Parámetros:
 
   directorio: en el que buscar, por ejemplo: C:\
   mascara: de archivo, por ejemplo: *.txt
   atributos: de los archivos, por ejemplo: faAnyFile
   listado: donde guardar los posibles resultados (1)
 
   (1) Rutas completas de los archivos encontrados
 
 *)
 
 procedure BuscarArchivos(const directorio, mascara: string;
   atributos: Integer; var listado: TStrings);
 
 // Procedimiento anidado
 //
 procedure Buscar(const subdirectorio: string);
 var
   regBusqueda: TSearchRec;
 begin
   // Buscar en el directorio
   if FindFirst(subdirectorio + mascara, atributos, regBusqueda) = 0 then
   begin
     try
       repeat
         Application.ProcessMessages;
         if (regBusqueda.Attr and faDirectory = 0)
           or (regBusqueda.Name <> '.')
             and (regBusqueda.Name <> '..') then
               listado.Add(subdirectorio + regBusqueda.Name);
       until FindNext(regBusqueda) <> 0;
     except
       FindClose(regBusqueda);
     end;
     FindClose(regBusqueda);
   end;
   // Buscar en los subdirectorios
   if FindFirst(subdirectorio + '*', atributos
     or faDirectory, regBusqueda) = 0 then
   begin
     try
       repeat
         Application.ProcessMessages;
         if ((regBusqueda.Attr and faDirectory) <> 0)
           and (regBusqueda.Name <> '.')
             and (regBusqueda.Name <> '..') then
               Buscar(subdirectorio + regBusqueda.Name + '\');
       until FindNext(regBusqueda) <> 0;
     except
       FindClose(regBusqueda);
     end;
     FindClose(regBusqueda);
   end;
 end;
 //
 // Fin del procedimiento anidado:
 // Comienza "BuscarArchivos(...)"
 //
 begin
   Buscar(IncludeTrailingPathDelimiter(directorio));
 end;
 
 // Ejemplo de llamada a BuscarArchivos(...)
 //
 procedure TForm1.Button1Click(Sender: TObject);
 var
   lista: TStrings;
 begin
   lista := TStringList.Create;
   BuscarArchivos('C:\Archivos de programa\', '*.exe', faAnyFile, lista);
   ShowMessage(lista.Text);
   lista.Free;
 end;
Podrías probarlo y, si te ofrece resultados positivos, adaptarlo para tus necesidades.

Por cierto, la función "FindFirstFile" se encuentra en la unidad "Windows".
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 28-07-2005 a las 22:00:27. Razón: (ampliación del texto)
Responder Con Cita