Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-11-2011
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: Mar 2005
Posts: 91
Poder: 14
Anel Hernandez Va por buen camino
Listar ficheros de un directorio y subdirectorios

Hola,

estoy intentando listar en un memo todos los archivos de un directorio y sus subdirectorios internos usando los trucos con recursividad del foro y no lo logro. Pudieran aclarar cual es mi error?

Código Delphi [-]
var
  SR: TSearchRec;
  dir:string;
  mascara: string;
begin
 dir := edit1.Text;
 mascara:='*.*';
 if FindFirst(edit1.Text + mascara, faAnyFile, SR) = 0 then
  begin
   repeat
    memo1.Lines.Add(SR.Name);
    if ((SR.Attr and faDirectory) = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') then
     Dir := Dir + SR.Name+'\';
    until FindNext(SR) <> 0;
    FindClose(SR);
 end;
end;

gracias
Responder Con Cita
  #2  
Antiguo 29-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.063
Poder: 29
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Si en Edit1.Text está la ruta, es muy probable que te falte una barra, probá de este modo:
Código Delphi [-]
  ...
 dir := IncludeTrailingPathDelimiter(edit1.Text);  // Incluye delimitador si no existe
 mascara:= '*.*';
 if FindFirst(dir + mascara, faAnyFile, SR) = 0 then
  ...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 29-11-2011 a las 20:02:44. Razón: agregar comentario al código
Responder Con Cita
  #3  
Antiguo 29-11-2011
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: Mar 2005
Posts: 91
Poder: 14
Anel Hernandez Va por buen camino
Hola,

pues sigue sin funcionar, solo me lista los del directorio raiz. No entra a los subdirectorios. Edit1.text si incluye \ pero no esta demas asegurarse.

Que hacer para que entre a los subdirectorios?

gracias
Responder Con Cita
  #4  
Antiguo 29-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.063
Poder: 29
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola
Cita:
pues sigue sin funcionar, solo me lista los del directorio raiz.
En realidad funciona correctamente, es sólo que esa función sirve para listar los archivos y directorios de la ruta designada...

Cita:
No entra a los subdirectorios.
Que hacer para que entre a los subdirectorios?
Para lo que buscas hacer, revisá este enlace.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 30-11-2011
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: Mar 2005
Posts: 91
Poder: 14
Anel Hernandez Va por buen camino
Eureka! lo logre!

lo comparto para el ke le pueda ser util en el futuro. Ya entendi la recursividad! La habia usado hace años en algunos metodos numericos pero nunca para un proceso de soft.

aki va:

Código Delphi [-]
procedure Rastrear (Dir:string);
var
 SR:TSearchRec;
 mascara: string;
begin
 mascara:='*.*';
 if FindFirst(dir + mascara, faAnyFile, SR) = 0 then begin
     repeat
     if ( (SR.Attr and fadirectory) = fadirectory) then
       begin
         if  (SR.Name <> '.')and (SR.Name <> '..') then
           Rastrear( Dir + SR.Name+'\' );
       end
     else
       begin
         form1.Memo1.Lines.Add (SR.Name);
       end;
     until FindNext(SR) <> 0;
     FindClose(SR);
 end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
 Rastrear(edit1.Text);
end;
Responder Con Cita
  #6  
Antiguo 30-11-2011
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: Mar 2005
Posts: 91
Poder: 14
Anel Hernandez Va por buen camino
Hola,

cuando le pongo otra mascara, '*.txt' el procedimiento no se ejecuta si en el primer directorio no hay ningun .txt. Si le cambio la primera condicion a que siga revisando en otros subdirectorios independientemente no encuentre nada, entonces como seria la condicion de parada?

pueden sugerirme cualkier otra variante, gracias!
Responder Con Cita
  #7  
Antiguo 30-11-2011
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: 15.636
Poder: 10
Neftali [Germán.Estévez] Tiene un aura espectacularNeftali [Germán.Estévez] Tiene un aura espectacular
Pues hay un truco de David, en el foro (sección de Trucos) que funciona desde hace mucho tiempo (yo mismo lo uso en varios sitios).

Listar los archivos de un determinado directorio
__________________
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
  #8  
Antiguo 30-11-2011
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: Mar 2005
Posts: 91
Poder: 14
Anel Hernandez Va por buen camino
Hola,

por lo que veo de ese truco hay que tener una lista de subdirectorios y revisar uno a uno con el procedimiento de busqueda de fichero. Es asi? En ese caso la funcion no es recursiva, se llama tantas veces como cantidad de directorios tengamos en la lista. No?

No es posible al mio ponerle alguna condicion logica para que si no encuentra un archivo en ese subdirectorio entre en los subdirectorios que encuentre?

Gracias

Última edición por Anel Hernandez fecha: 30-11-2011 a las 12:30:02.
Responder Con Cita
  #9  
Antiguo 30-11-2011
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: 15.636
Poder: 10
Neftali [Germán.Estévez] Tiene un aura espectacularNeftali [Germán.Estévez] Tiene un aura espectacular
Cita:
Empezado por Anel Hernandez Ver Mensaje
Hola,
Hola.

Cita:
Empezado por Anel Hernandez Ver Mensaje
por lo que veo de ese truco hay que tener una lista de subdirectorios y revisar uno a uno con el procedimiento de busqueda de fichero. Es asi?
No, no has visto bien. ;-)
Revisa el primer comentario y el código incluído en él.

Cita:
Empezado por Anel Hernandez Ver Mensaje
En ese caso la funcion no es recursiva, se llama tantas veces como cantidad de directorios tengamos en la lista. No?
El código del primer comentario sí es recursivo, pues en su interior se vuelve a llamar a la misma función para escanear los subdirectorios.

Cita:
Empezado por Anel Hernandez Ver Mensaje
Gracias
De nada.
__________________
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
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
listar directorio ftp jaimeh Varios 1 25-06-2010 13:29:18
Borrado de Directorio y subdirectorios hijos. AntonioMM Windows 2 14-11-2008 15:16:22
borrar archivos d un directorio\subdirectorios segun su extension. No me funciona :( images API de Windows 5 11-06-2007 23:14:30
Listar Subdirectorios con su fecha de creacion y su capacidad acl_gandalf Varios 1 08-04-2005 10:30:42
Buscar todos los subdirectorios existentes en un directorio slat Varios 2 28-12-2004 22:53:52


La franja horaria es GMT +2. Ahora son las 04:03:47.


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