Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-12-2004
JorgeBec JorgeBec is offline
Miembro
 
Registrado: jul 2003
Posts: 159
Poder: 21
JorgeBec Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 23-12-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 23-12-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.281
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 23-12-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Román, ¿pero como se llama el libro que estas leyendo ahora chico?

Supongo que no será para novatos como yo no?
Responder Con Cita
  #5  
Antiguo 23-12-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #6  
Antiguo 24-12-2004
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Question

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?
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 24-12-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
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
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 22:36:59.


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
Copyright 1996-2007 Club Delphi