Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   obtener un listado de archivos (https://www.clubdelphi.com/foros/showthread.php?t=17093)

JorgeBec 22-12-2004 23:40:25

obtener un listado de archivos
 
Hola Comunidad! la pregunta es la siguiente, como obtengo la lista de los archivos con cierta extension de una carpeta, esto para fines de respaldo.

roman 23-12-2004 00:08:20

Puedes usar las funciones FindFirst, FindNext y FindClose para recorrer los archivos de un directorio.

Otra forma que podría ser útil en ciertos casos es llenando directamente un ListBox con

ListBox1.Perform(LB_DIR, DDL_ARCHIVE, LongInt(PChar('c:\windows\*.exe')));

que llenará el ListBox con todos los archivos en c:\windows de extensión .exe

// Saludos

Neftali [Germán.Estévez] 23-12-2004 09:32:00

Cita:

Empezado por roman
...Otra forma que podría ser útil en ciertos casos es llenando directamente un ListBox con:
ListBox1.Perform(LB_DIR, DDL_ARCHIVE, LongInt(PChar('c:\windows\*.exe')));

Ésta no la conocía; Muy bueno, sí señor.

Lepe 23-12-2004 13:58:51

Román, ¿pero como se llama el libro que estas leyendo ahora chico? ;)

Supongo que no será para novatos como yo no? :D

roman 23-12-2004 17:03:26

Lo de LB_DIR es tan viejo como el Windows de 16 bits. Yo mismo no lo recordaba hasta hace unos días que por otras razones revisé la lista de mensajes a un listbox. Me parece recordar que incluso uno de los controles viejitos de Delphi para mostrar los archivos de un directorio está o estaba implementado así.

// Saludos

Delphius 24-12-2004 05:34:31

Disculpa roman... yo tengo que hacer algo parecido... buscar en subdirectorios algun tipo de archivo.... para ello hago lo siguiente:

Código Delphi [-]

procedure TForm1.RastreaDir(Dir: String;Tipo: String);
var
   FileSearch: TSearchRec;
begin
chDir(Dir);
if FindFirst('*.*',faDirectory,FileSearch)=0
   then begin
        Repeat
         if ((FileSearch.Attr and faDirectory) = faDirectory)
            then begin
                 if (FileSearch.Name <> '.') and (FileSearch.Name <> '..')
                     then begin
                            try
                            RastreaDir(Dir+'\'+FileSearch.Name,Tipo);
                            Except on Ex: Exception do
                            MessageBox(Handle,Pchar(Ex.Message),Pchar('Error'),MB_OK);
                            end;
                          end;
                 end
            else begin
                 if (AnsiUpperCase(ExtractFileExt(FileSearch.Name))) = Tipo
                    then begin
                         Memo1.Lines.Add(Dir+'\'+FileSearch.Name);
                         end;
                 end;
        Until FindNext(FileSearch) <> 0;
        FindClose(FileSearch);
        end;
end;

Pero no busca en todos los subdirectorios algunas veces... ¿que anda mal?

Lepe 24-12-2004 14:58:00

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 :D :D


La franja horaria es GMT +2. Ahora son las 04:22:12.

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