Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Búsqueda Recursiva De Ficheros En Gambas
Autor Mensaje
Responder citando   Descargar mensaje 
Mensaje Búsqueda Recursiva De Ficheros En Gambas 
 
Hola
Un problema que aparece de vez en cuando es la necesidad de buscar un fichero en un directorio o en los subdirectorios que pueda tener.

En gambas hay una orden rdir que es especialmente útil para esto y funciona de la siguiente forma:
rdir(path,mascara,objeto_a_buscar)
si yo busco archivos usare gb.file, si busco directorios será gb.directory, ..., etc. La lista completa de items a buscar está aquí
http://gambasdoc.org/help/comp/gb/stat/type?es

Dim Ficheros as string[], MiPath as string, Fichero as string

MiPath=user.home
Ficheros=rdir(MiPath,"{^]*",gb.file)
for each Fichero in Ficheros
   listbox.add fichero
next

Con esto conseguiremos un listbox en el que estén todos los archivos NO OCULTOS que se encuentren en el home y en sus subdirectorios.

Ahora bien ahí no están sus rutas ¿Que pasa si necesito también las rutas de esos archivos?

Así que he elaborado una pequeña rutina recursiva que explora cada directorio, guarda el path y el archivo de todo lo que encuentra y devuelve una tabla con todo el contenido.

Dim Ficheros as string[] ' lugar donde quedarán todos los ficheros de la ruta especificada incluyendo subdirectorios
Dim Fichero as string ' variable para cada fichero concreto de la lista anterior
Ficheros = buscar(newpath)

  FOR EACH Fichero in ficheros 'añadir a un supuesto listbox todo lo encontrado
    Lista.add(fichero)
  NEXT


Ahora el código de buscar que es quien buscar los archivos y los guarda en una tabla con su path correspondiente y devuelve el array obtenido
FUNCTION buscar(MiPath AS String) AS String[]
  DIM Directorio AS String, Ficheros AS String[]
  DIM NewPath AS String, NuevosFicheros AS String[], Contador as integer
  
  ficheros = Dir(MiPath, "[^.]*", gb.file)  'ficheros en directorio actual se meten en array ficheros
  
  FOR Contador = 0 TO ficheros.Max            ' añadir ruta a ficheros
    ficheros[Contador] = MiPath &/ ficheros[Contador]
  NEXT
  
  'Ahora examinar subdirectorios que pueda haber en MiPath
  FOR EACH directorio IN Dir(MiPath, "[^.]*", gb.Directory) 'para cada directorio en directorio actual que no sea oculto
    newpath = Mipath &/ directorio 'obtener nuevo path del subdirectorio
    NuevosFicheros = buscar(newpath) 'buscar ficheros en el subdirectorio. Quedan en un array NuevosFicheros
    Ficheros = agregardatos(Fichero, NuevosFicheros) 'Agregar los nuevos ficheros al arary donde quedan todos
  NEXT
  RETURN ficheros
END


Por último una pequeña rutina que sirve para sumar dos arrays. Esta rutina lo que hace es recibir una Array A y otra B. Aumenta el Tamaño de A para que quepan todos los elementos de B y luego en el nuevo espacio mete los elementos de B.
FUNCTION agregardatos(A AS String[], B AS String[]) AS String[]
  DIM Posicion AS Integer, Contador AS Integer
    Posicion = A.Length ' Tamaño actual de A
    A.Resize(Posicion + B.Length) 'Ampliar tamaño de A al tamaño que tenía mas el tamaño de B
    FOR contador = posicion TO A.Max 'para cada elemento nuevo y actualmente vacío
      A[contador] = B[contador - posicion] 'meter valor de B
    NEXT
  RETURN A
END


A esto falta añadir algunas posibilidades respecto al nombre completo de un fichero
  PRINT file.BaseName(Lista[5].text) '---> el nombre+extension del fichero
  PRINT file.Dir(Lista[5].text) '---> el path del fichero
  PRINT file.Ext(Lista[5].text) '---> la extensión del fichero
  PRINT file.Name(Lista[5].text) '---> el nombre sin extensión del fichero
 

He probado y creo que funciona bien. Sugerencias, rectificaciones, errores o aclaraciones estoy a vuestra disposición.
 
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Ficheros Que Gambas No Encuentra Luis_P Instalación 6 Jueves, 05 Noviembre 2009, 00:15 Ver último mensaje
nrcefe
No hay nuevos mensajes Problemas Con Función Recursiva En Gambas2 Shell General 0 Viernes, 18 Noviembre 2011, 00:42 Ver último mensaje
Shell
No hay nuevos mensajes Rellenar árbol De Forma Recursiva lumbanico General 1 Lunes, 08 Octobre 2012, 17:27 Ver último mensaje
lumbanico
No hay nuevos mensajes Nombre De Ficheros: Arrastrar Ficheros A U... jsbsan General 2 Jueves, 16 May 2013, 17:57 Ver último mensaje
jsbsan
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron