Ver Mensaje Individual
  #7  
Antiguo 24-12-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
Veo que no miras los atributos, puede que una carpeta esté oculta, y allí no buscará.

Yo uso este código para buscar por el menú Inicio de windows y no falla. Hago 2 búsquedas una para carpetas y otra para los archivos dentro de esa carpeta. El try... except más interior es donde tendrías que añadir el form1.memo.add(...)

Mi parámetro "search" es parte del nombre del archivo, puede ser 'Microsoft' o bien '*Word'.

Código Delphi [-]
procedure TFrmBuscador.busca(InitialPath, Search: String);
var
  t, d:       TsearchRec; // t= todos archivos d= dentro directorios
  rest, resd: Integer;
begin

  if length(search) < 1 then
    exit;
  // primero busco toda clase de archivos, puede que el nombre
  // de la carpeta no sea igual que lo que se busca

  rest := findfirst(InitialPath + '\*.*', faAnyFile, t); //      +faarchive
  while rest = 0 do
    begin
    if (t.name <> '.') and (t.name <> '..') then
      if (t.Attr >= fadirectory) and (t.Attr < faarchive) then
        busca(InitialPath + '\' + t.name, Search)
      else // se ha encontrado un archivo con posibles atributos
        begin
          form1.memo1.Lines.Add( InitialPath+'\'+t.Name);
        resd := findfirst(InitialPath + '\' + search + '*.*', faArchive, d);
        while resd = 0 do
          begin
          if (d.Attr <> fadirectory) and (d.name <> '.') and (d.name <> '..') then
            begin
            try
            except // ya existe el archivo
                   //no lo incluimos en los resultados.
              end;
            end;
          resd := sysutils.findnext(d);
          end;
        sysutils.FindClose(d);
        end; // no es '.' o '..'
    rest := sysutils.FindNext(t);
    end; //while
  sysutils.FindClose(t);

end;

Saludos

PD: Ahora que lo miro bien, estoy duplicando las búsquedas, el restd no se debía de hacer

Última edición por Lepe fecha: 24-12-2004 a las 15:30:42.
Responder Con Cita