Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-07-2005
rfernandez rfernandez is offline
Miembro
 
Registrado: ago 2003
Posts: 64
Poder: 21
rfernandez Va por buen camino
recorrido por directoris buscando archivos

Que funciones utilizais para hacer recorridos recursivos por directorios buscando archivos.

Yo he utilizado siempre el Findfirst y findnext pero en algunas maquinas con windows xp o windows 2000 no se porque pero directorios con archivos me devuelve que no hay nada.
La busqueda no lo hago de todo sino que filtro por una extensión determinada.

Ha alguien le ha ocurrido algo parecido.

Gracias.
Responder Con Cita
  #2  
Antiguo 28-07-2005
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.293
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
Esos son los que hay y deberían funcionar.
Tal vez no estés utilizando el código correcto.

En la sección de trucos del club tienes un par de recorridos de ejemplo; Creo que son los trucos 333 y 310; Son para borrar, pero el recorrido recursivo que hacen es válido (simplemente que en tu caso no borrarás).
__________________
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.

Última edición por Neftali [Germán.Estévez] fecha: 28-07-2005 a las 14:19:40.
Responder Con Cita
  #3  
Antiguo 28-07-2005
rfernandez rfernandez is offline
Miembro
 
Registrado: ago 2003
Posts: 64
Poder: 21
rfernandez Va por buen camino
El problema no lo tengo en el algoritmo si no en la maquina.
El algoritmo que tengo funciona perfectamente pero hay en maquinas que no funciona.

Mi pregunta es por alguien se habia encontrado que algun tipo de maquina con winxp le habia echo cosas raras estas funciones.

Gracias.
Responder Con Cita
  #4  
Antiguo 28-07-2005
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.293
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
Revisa la documentación de ésta API: FindFirstFile ya que la función de Delphi la utiliza.
Otra opción es hacer directamente la prueba con las funciones de la API, a ver qué pasa en esos ordenadores.
__________________
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
  #5  
Antiguo 28-07-2005
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Debes estar recorriendo carpetas del sistema u ocultas. Las opciones que dices requieren que se especifique que tipo de archivos se van a listar...
__________________
El malabarista.
Responder Con Cita
  #6  
Antiguo 28-07-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por rfernandez
El algoritmo que tengo funciona perfectamente pero hay en maquinas que no funciona.
¿Cabría la posibilidad de que lo copiaras aquí? Dicen que cuarenta ojos ven más que dos...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 28-07-2005
rfernandez rfernandez is offline
Miembro
 
Registrado: ago 2003
Posts: 64
Poder: 21
rfernandez Va por buen camino
Antes de nada preguntar cual es la funcion FindFirstFile que propone Netfali ya que no la encuentro solo encuentro la FindFirst y FindNext.
Basicamente el siguiente algoritmo busca los archivos con extensión '*.ia' que son un .txt para colocarlos dentro de un TTreeView, teniendo en cuenta que desde el directorio original donde se empieza a mirar, que se envia mediante el parametro de entrada 'Cami', pueden haber subdirectorios en 'infinitas' profundidades donde halla archivos *.ia

El algoritmo es el siguiente.

Código Delphi [-]
 procedure TfrmConsultaLliure2.Carregar( Cami: String; Pare: TTreeNode);
 var
   Filtre: String;
   Fit,Dir: TSearchRec;
   Nod: TTreeNode;
   x: integer;
 begin
   // Busquem totes les consultes predefinides .ia;
   Filtre := Cami+'*.ia';
   if FindFirst(Filtre,faAnyFile,Fit) = 0 then begin
     with Ar.Items.AddChild(Pare,Copy(Fit.Name,1,Length(Fit.Name)-3)) do begin
       ImageIndex := 1;
       SelectedIndex := 1;
     end;
     while FindNext(Fit) = 0 do
       with Ar.Items.AddChild(Pare,Copy(Fit.Name,1,Length(Fit.Name)-3)) do begin
         ImageIndex := 1;
         SelectedIndex := 1;
       end;
   end;
   FindClose(Fit);
   // Ara busquem els subdirectoris
   Directori.Root := Cami;
   for x:=0 to Directori.Items.Count-1 do begin
     Nod := Ar.Items.AddChild(Pare,UpperCase(Directori.Folders[x].Displayname));
     Nod.ImageIndex := 0;
     Nod.SelectedIndex := 0;
     Carregar(Cami+Directori.Folders[x].DisplayName+'\',Nod);
     Directori.Root := Cami;
   end;
 end;

Última edición por dec fecha: 17-10-2005 a las 01:48:06. Razón: ¡¡Encerrad el código fuente entre las etiquetas [DELPHI] ... [/DELPHI]!!
Responder Con Cita
  #8  
Antiguo 28-07-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
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
  #9  
Antiguo 29-07-2005
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.293
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 rfernandez
...preguntar cual es la funcion FindFirstFile que propone Netfali ya que no la encuentro solo encuentro la FindFirst y FindNext.
Es una función de la API de windows; Además es la que utiliza FindFirst de Delphi en su implementación.
Bastaría con que la escribieras en una unit de Delphi, colocaras el cursor en medio y pulsaras F1 para que te apareciera la ayuda.
__________________
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
  #10  
Antiguo 29-07-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
rfernandez si editas tu mensaje y en lugar de poner "php" entre corchetes pones "delphi", el codigo sería más legible.

Yo no le veo problemas al código, creo que más bien el nodo Padre "pare" quizás no tenga el valor correcto y por eso no lo añade.

Metele ShowMessage(Fit.Name) antes de cambiar el ImageIndex, por ejemplo, para ver si encuentra los archivos.

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #11  
Antiguo 17-10-2005
rfernandez rfernandez is offline
Miembro
 
Registrado: ago 2003
Posts: 64
Poder: 21
rfernandez Va por buen camino
Por fin y sin quererlo he encontrado el porque a veces me falla.
Bueno todo biene por un atributo que tienen las carpetas, el atributo es el A --> Atributo de archivo de almacenamiento.

Si este atributo esta activo en las carpertas el findfirst que hago lo ignora y pasa de la carpeta como si no estuviese, un poco extraño pero eso pasa.

Solución --> quitar con attrib de msdos este atributo.

Gracias a todos.
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 05:35:13.


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