Listar Todos Los Archivos De Una Carpeta Y Sus Subcarpetas Recursivamente


Objetivo: Listar Todos Los Archivos De Una Carpeta Y Sus Subcarpetas Recursivamente
buenas,

ando medio desconectado de la programación... pero aquí ando con nuevas ideas....
para el programa taller2015 me he dado cuenta que necesito una analizador de tamaños de archivos..... porque esto
pues supongamos un cliente nos dice que respaldemos la información de la pc y lo mas importante son las fotos lo demás si se respalda se respalda o sino no, no importa.

mi idea es detectar con esta función archivos grandes innecesarios, como programas descargados de muchos megas, o vídeos o películas prescindibles, que agrandan el respaldo y no son importantes.

la idea es hacer un clic en un control dirchoose por ejemplo y que liste todos los archivos en un tableview con 3 datos fundamentales que serán, ruta completa, tipo de archivo y tamaño, al menos eso es lo que busco al principio, después podremos ponernos finos ajajajja.

bueno dejo el tema para que vayamos tirando ideas, códigos o comentarios.

Saludos

última edición por v3ctor el Domingo, 03 Julio 2016, 06:56; editado 1 vez
Objetivo: Re: Listar Todos Los Archivos De Una Carpeta Y Sus Subcarpetas Recursivamente
empece con este codig que lista las carpetas, hay que agregar los archivos....

Public Sub listar(ruta As String)
Dim carpetas As String[]
Dim MasCarpetas As String[]
Dim archivos As String[]
Dim carpeta As String
Dim archivo As String
Dim RutaPadre As String
'
' RutaPadre = File.ruta)
' Print RutaPadre
RutaPadre = ruta
' Print "rutapadre=" & RutaPadre
carpetas = Dir(ruta, "*", gb.Directory)
If carpetas.Count < 1 Then
' Print "0 carpetas encontradas en: " & RutaPadre
Return
Endif


For Each carpeta In carpetas
' Print "1_ " & carpeta
Print "2_ " & ruta &/ carpeta

MasCarpetas = Dir(ruta &/ carpeta, "*", gb.Directory)

' Print "contador carpetas=" & MasCarpetas.Count

If MasCarpetas.Count > 0 Then
listar(ruta &/ carpeta)
Endif
Next


End


esto es un borrador claro para ir viendo como hacerlo

Objetivo: Re: Listar Todos Los Archivos De Una Carpeta Y Sus Subcarpetas Recursivamente
estoy probando esto donde aparecen los archivos...

Public Sub listar(ruta As String)
Dim carpetas As String[]
Dim MasCarpetas As String[]
Dim archivos As String[]
Dim carpeta As String
Dim archivo As String
Dim RutaPadre As String
'

RutaPadre = ruta
' Print "rutapadre=" & RutaPadre

archivos = Dir(ruta, "*", gb.File)

If archivos.Count > 0 Then
For Each archivo In archivos
Print "Archivo: " & ruta &/ archivo & " : " & Stat(ruta &/ archivo).Size
Next
Endif
'

carpetas = Dir(ruta, "*", gb.Directory)
If carpetas.Count < 1 Then
' Print "0 carpetas encontradas en: " & RutaPadre
Return
Endif


For Each carpeta In carpetas
' Print "1_ " & carpeta
Print "Carpeta: " & ruta &/ carpeta

MasCarpetas = Dir(ruta &/ carpeta, "*", gb.Directory)

' Print "contador carpetas=" & MasCarpetas.Count

If MasCarpetas.Count > 0 Then
listar(ruta &/ carpeta)
Endif
Next


End



MasCarpetas = Dir(ruta &/ carpeta, "*", gb.Directory) con esta linea tengo problema si son carpetas de sistema con el mensaje "acceso prohibido"

Objetivo: Re: Listar Todos Los Archivos De Una Carpeta Y Sus Subcarpetas Recursivamente
llamada a subrutina:

Public Sub btnBuscar_Click()
Dim archivo As String
Dim parte As String[]
Dim fila As Integer = 0
Dim filaT As Integer = 1

Print DirChooser1.SelectedPath
ListaArchivos = New String[]
SubAA.listar(DirChooser1.SelectedPath)

tvArchivos.Clear


For Each archivo In ListaArchivos
Print archivo
parte = Split(archivo, ":")
tvArchivos.Rows.Count = filaT
tvArchivos[fila, 0].Text = parte[1]
tvArchivos[fila, 1].Text = parte[0]
Inc fila
Inc filaT
Next

End



subrutina:

Public Sub listar(ruta As String)
Dim carpetas As String[]
Dim MasCarpetas As String[]
Dim archivos As String[]
Dim carpeta As String
Dim archivo As String
Dim RutaPadre As String
Dim Dato As String
'

RutaPadre = ruta

archivos = Dir(ruta, "*", gb.File)

If archivos.Count > 0 Then
For Each archivo In archivos
Print "Archivo: " & ruta &/ archivo & ":" & Stat(ruta &/ archivo).Size
Dato = Trim$(ruta &/ archivo & ":" & Stat(ruta &/ archivo).Size)
VerArchivos.ListaArchivos.Add(Dato)
Next
Endif
'
carpetas = Dir(ruta, "*", gb.Directory)
If carpetas.Count <1> 0 Then
listar(ruta &/ carpeta)
Endif
Next

End


con este código mas o menos va saliendo algo de lo que pretendo.....

falta mucho todavía.....

Objetivo: Re: Listar Todos Los Archivos De Una Carpeta Y Sus Subcarpetas Recursivamente
Puedes usar Rdir para hacer un dir recursivo a una carpeta y stat para obtener información de cada uno de los archivos
Dim file1 As String
Dim ruta As String
ruta = "/la/ruta/donde/quieres/buscar/los/archivos/" (recuerda acabarlo con '/')
For Each file1 In RDir(ruta, "*.*", gb.file) 'gb.file es para que te devuelva solo ficheros
With Stat(ruta & file1)
Message.Info(.Path) 'esto te devuelve la ruta completa del archivo
Message.Info(.size) 'el tamaño del archivo
Message.info(.Time) 'la fecha de modificación del fichero
'stat te puede devolver mucha más información, revisala
End With
Next


'Espero que te sirva

última edición por garvied el Martes, 05 Julio 2016, 04:10; editado 1 vez
Perfil MP  
Objetivo: Re: Listar Todos Los Archivos De Una Carpeta Y Sus Subcarpetas Recursivamente
Muy bien, garvied !

Perfil MP  
Objetivo: Re: Listar Todos Los Archivos De Una Carpeta Y Sus Subcarpetas Recursivamente
garvied escribió: [Ver mensaje]
Puedes usar Rdir para hacer un dir recursivo a una carpeta y stat para obtener información de cada uno de los archivos
Dim file1 As String
Dim ruta As String
ruta = "/la/ruta/donde/quieres/buscar/los/archivos/" (recuerda acabarlo con '/')
For Each file1 In RDir(ruta, "*.*", gb.file) 'gb.file es para que te devuelva solo ficheros
With Stat(ruta & file1)
Message.Info(.Path) 'esto te devuelve la ruta completa del archivo
Message.Info(.size) 'el tamaño del archivo
Message.info(.Time) 'la fecha de modificación del fichero
'stat te puede devolver mucha más información, revisala
End With
Next


'Espero que te sirva


gracias por el aporte, me fije en "funciones de carpetas y archivos" pero no vi RDir en ese momento. (como a veces miramos y no vemos jajaja)

esto anda bien, pero sigo encontrando que si lo usas en directorios de sistema da errores de acceso, habria que ver como evitar eso.


Public Sub ListarArchivos2(ruta As String)
Dim file1 As String

For Each file1 In RDir(ruta, "*.*", gb.file) 'gb.file es para que te devuelva solo ficheros
' With Stat(ruta & file1)'faltaba barra
With Stat(ruta &/ file1)
Print .Path & ":" & .Size
' Message.Info(.Path) 'esto te devuelve la ruta completa del archivo
' Message.Info(.size) 'el tamaño del archivo
' Message.info(.Time) 'la fecha de modificación del fichero
'stat te puede devolver mucha más información, revisala
End With
Next

End


muchas gracias por el aporte garvied

Objetivo: Re: Listar Todos Los Archivos De Una Carpeta Y Sus Subcarpetas Recursivamente
garvied escribió: [Ver mensaje]
Puedes usar Rdir para hacer un dir recursivo a una carpeta y stat para obtener información de cada uno de los archivos
For Each file1 In RDir(ruta, "*.*", gb.file) 'gb.file es para que te devuelva solo ficheros


'Espero que te sirva


"*.*" <------ este filtro no es bueno, pues solo muestra archivos con .extensión, es mejor poner "*" así te muestra cualquier archivo incluso sino tiene extensión como es muy común en linux

Objetivo: Re: Listar Todos Los Archivos De Una Carpeta Y Sus Subcarpetas Recursivamente
les cuento que ando erredado con algo que se supone ya debería tenerlo mas que claro

stat().size devuelve un numero que representa bytes... si no es así corrijan.

estoy haciendo una simple rutina donde esos bytes si son menor que 10 megas y mayor que un kilobyte ponga kilobyte
si es menor de1 kilobyte lo ponga en bytes, si es mayor a un gigabyte lo ponga en gigas.

jajajaj el asunto que no tengo claro los dividendos para pasar de bytes a, kilobytes, megabytes y gigabytes

1024 bytes es un kilobyte asi sucesivamente. alguien tiene claro este tema?

pasar siempre de bytes que es lo que da stat a las demás medidas


Hay en gambas algún comando que haga esto?
No debería tener gambas un comando que maneje conversiones de tamaños?

tipo función convertirDE_A(size, de, a)

última edición por v3ctor el Miercoles, 06 Julio 2016, 18:18; editado 3 veces
Objetivo: Re: Listar Todos Los Archivos De Una Carpeta Y Sus Subcarpetas Recursivamente
Esto lo uso en el cliente ftp...

Public Function ctamanio(tamano As Float) As String

Dim size As String

If tamano > 1048576 Then
tamano = Round((tamano / 1048576), -1)
size = CStr(tamano) & " Mb "
Else If tamano > 1024
tamano = Round((tamano / 1024), -1)
size = CStr(tamano) & " Kb "
Else
size = LTrim(CStr(tamano)) & " B "
End If
size = Space(12 - Len(size)) & size
Return size

End

última edición por shordi el Miercoles, 06 Julio 2016, 18:51; editado 1 vez
Perfil MP  

Página 1 de 1


  
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

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4127s (PHP: -58% SQL: 158%)
Consultas SQL: 49 - Debug off - GZIP Activado