Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Rellenar TreeView con subcarpetas y archivos

Estas en el tema de Rellenar TreeView con subcarpetas y archivos en el foro de Visual Basic clásico en Foros del Web. Buenas espero que podais ayudarme. Lo que necesito es rellenar un Arbol con las carpetas y archivos existentes en ellas. Me explico. Dentro de una ...
  #1 (permalink)  
Antiguo 04/01/2012, 11:39
Avatar de acid_burd  
Fecha de Ingreso: enero-2010
Mensajes: 30
Antigüedad: 14 años, 3 meses
Puntos: 0
Exclamación Rellenar TreeView con subcarpetas y archivos

Buenas espero que podais ayudarme.
Lo que necesito es rellenar un Arbol con las carpetas y archivos existentes en ellas. Me explico.
Dentro de una carpeta principal "Documentos" hay diferentes carpetas como por ejemplo "Reuniones", "Visitas Medicas", etc (No son siempre las mismas carpetas) y dentro de cada una de estas carpetas hay X archivos con una fecha por nombre(la fecha en la que se creó dicho archivo). Entonces necesito que se me generen los nodos padre con el nombre de las carpetas y dentro de dichos nodos se listen los archivos que hay dentro de dicha carpeta. hasta ahora lo he hecho así:
Código:
Dim archivo As String
    Dim nodoX As node
    Dim contador As String
  
   
    DirDocumentos = V_DAtendidos + "\" + CStr(Me.T_NHistoria) + "\Documentos"
    archivo = Dir(DirDocumentos + "\", vbDirectory)

   
    contador = "1"
    Do While archivo <> ""
        If archivo <> "." And archivo <> ".." Then
            If (GetAttr(DirDocumentos + "\" & archivo) And vbDirectory) = _
            vbDirectory Then
                Set nodeX = ArbolPlantillas.Nodes.Add(, tvwChild, "A" + contador, archivo)
               
                RellenarSubNodos archivo, contador
               
                contador = CInt(contador) + 1
            End If
        End If
        archivo = Dir
    Loop
Código:
Dim archivoS As String
    Dim nodoS As node
    Dim contadorS As String

    DirDocumentos = V_DAtendidos + "\" + CStr(Me.T_NHistoria) + "\Documentos"
    archivoS = Dir(DirDocumentos + "\" + archivo + "\", vbArchive)
    contadorS = "1"
    Do While archivoS <> ""
        If archivoS <> "." And archivoS <> ".." Then
            If (GetAttr(DirDocumentos + "\" & archivo + "\" & archivoS) And vbArchive) = _
            vbArchive Then
                Set nodeX = ArbolPlantillas.Nodes.Add("A" + contador, tvwChild, "B" + contadorS, archivoS)
                contadorS = CInt(contadorS) + 1
            End If
        End If
        archivoS = Dir
    Loop
Si quito la llamada a la funcion "RellenarSubNodos" que es donde me metería los archivos en el nodo correpondiente funciona bien. Se me muestran las carpetas como nodos. Pero con la funcion me da un error en la linea "archivo=Dir" de la funcion principal. El fallo dice "Llamada a procedimiento o argumento no validos"

Conozco muy poco de este control (treeview) y de la funcion Dir, voy aprendiendo segun los uso asi que tal vez haya una manera más sencilla de realizar lo que quiero.

Un saludo y gracias
  #2 (permalink)  
Antiguo 05/01/2012, 05:32
Avatar de acid_burd  
Fecha de Ingreso: enero-2010
Mensajes: 30
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Rellenar TreeView con subcarpetas y archivos

Ya esta funcionando perfectamente. Ahora solo me queda ajustarlo para que no muestre la extension y demas y quedará perfecto. Os paso el código modificado por si alguien tiene o tendrá el mismo problema.
Código:
Private Sub Form_Load()
    
    
    Dim Fso As FileSystemObject
    Dim El_Directorio As Folder
    
    
    
    DoEvents
    
    Set Fso = New FileSystemObject
    Set El_Directorio = Fso.GetFolder(DirDocumentos)
    Call RellenarNodosPlantillas(El_Directorio)
    
End Sub
Código:
Private Sub RellenarNodosPlantillas(ByVal El_Directorio As Folder)
        
    On Error GoTo errsub
        Dim contador As String
    
        'Variable del tipo Folder
        Dim SubDirectorio As Folder
        
        
        contador = "1"
        'Recorrer los subdirectorios
        For Each SubDirectorio In El_Directorio.SubFolders
            'Agregar el Path
            Set nodeX = ArbolPlantillas.Nodes.Add(, tvwChild, "A" + contador, SubDirectorio.Name)
            Call RellenarSubNodos(SubDirectorio, contador)
            'Sigue listando los directorios
            RellenarNodosPlantillas SubDirectorio
            contador = Str(CInt(contador) + 1)
        Next
        
    Exit Sub
    
    'Error
errsub:
    'Error de permiso denegado
    If Err.Number = 70 Then
        Resume Next
    ElseIf Err.Number = 91 Then
        Screen.MousePointer = vbDefault
        Exit Sub
    Else
        MsgBox Err.Description, vbCritical
        Exit Sub
        
    End If
End Sub
Código:
Private Sub RellenarSubNodos(ByVal SubDirectorio As String, contador As String)
    Dim nodeX As node
    Dim contadorS
    Dim El_Archivo As File
    Dim El_Directorio As Folder
    Dim Fso As FileSystemObject
    Dim DirDocumentos As String
    
    'Nuevo objeto felisystemobjetc
    Set Fso = New FileSystemObject
    
    'Obtiene el directorio
    DirDocumentos = V_DAtendidos + "\" + CStr(Me.T_NHistoria) + "\Documentos"
    Set El_Directorio = Fso.GetFolder(SubDirectorio)
    
    contadorS = "1"
    
    'Listar los ficheros de esta carpeta
    For Each El_Archivo In El_Directorio.Files
        Set nodeX = ArbolPlantillas.Nodes.Add("A" + contador, tvwChild, "B" + contadorS, El_Archivo.Name)
        contadorS = Str(CInt(contadorS) + 1)
    Next El_Archivo
    
    
End Sub
Espero que os sea util.
  #3 (permalink)  
Antiguo 30/10/2015, 11:09
 
Fecha de Ingreso: octubre-2015
Mensajes: 1
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Rellenar TreeView con subcarpetas y archivos

hola amigo me interesa el codigo pero me marca algunos errores no se si me pudieras apoyar con el codigo que implementaste, estoy desarrollando un proyecto en mi escuela pero no hemos visto mucho sobre arboles de directorios

Etiquetas: rellenar, subcarpetas, treeview, vb
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:45.