Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Averiguar el tamaño de un directorio desde Gambas
#1

Buenas!.

Tenemos el método size de la clase Stat. Pero eso no da el tamaño de un directorio, nos da el de un archivo.
¿ No existe en Gambas esa posibilidad ?. Sin tener que hacer uso del comando "du" desde Shell.

¿ Un procedimiento recursivo que vaya sumando el tamaño de cada archivo ?.

Saludos

"El lobo siempre será malo si sólo escuchamos a Caperucita.". El lobo.
    ¡Gracias!
#2

Partiendo de este ejemplo:

GAMBAS
  1. Public Function ScanDir(sDir As String) As Long
  2.  
  3.    Dim sFile As String
  4.    Dim sPath As String
  5.    Dim hStat As Stat
  6.    Dim aDir As String[]
  7.    Dim iSize As Long
  8.  
  9.    Try hStat = Stat(sDir)
  10.    iSize = hStat.Size
  11.    If hStat.Type <> gb.Directory Then Return iSize
  12.    Try aDir = Dir(sDir)
  13.  
  14.    For Each sFile In aDir
  15.  
  16.      sPath = sDir &/ sFile
  17.      Try hStat = Stat(sPath)
  18.  
  19.      With hStat
  20.        If .Type = gb.Directory Then
  21.          Try iSize += ScanDir(sPath)
  22.        Endif
  23.        Try iSize += .Size
  24.      End With
  25.    Next
  26.    Return iSize
  27.  



Se encuentra en la lista internacional.

Saludos

"El lobo siempre será malo si sólo escuchamos a Caperucita.". El lobo.
    ¡Gracias!
#3

Eh, sì... tendrás que usar la función "Dir()".

"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)

"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
    ¡Gracias!
#4

(07-03-2021, 12:22)Shell escribió:  Sin tener que hacer uso del comando "du" desde Shell.

Pues si, lo unico que se me ocurre es eso, usar du.
Bash
  1. du --summarize ~/UnDirectorio/


Saludos.
    ¡Gracias!
#5

¿Ayudará esto?
 

GAMBAS
  1.  
  2. Public Sub Form_Open()
  3.  
  4.   Print ScanDir(User.Home)
  5.  
  6.  
  7. Public Sub ScanDir(sPath As String) As String
  8.  
  9.   Dim sFile As String
  10.   Dim lSize As Long
  11.  
  12.   For Each sFile In Dir(sPath, "*", gb.File)
  13.     lSize += Stat(sPath &/ sFile).Size
  14.   Next
  15.  
  16.   Return sPath & " = " & Format(lSize / 1000000, "0.0") & "MB"
  17.  


    ¡Gracias!
#6

(09-03-2021, 17:39)cogier escribió:  ¿Ayudará esto?


Sólo funciona si dentro de un directorio sólo hay ficheros. Si hay varios niveles de directorios y subdirectorios, creo que no va a funcionar. Tendría que ser una función recursiva que vaya entrando en cada subdirectorio, sumando tamaños y regresando a la raíz para continuar con el siguiente. 

Saludos

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
    ¡Gracias!
#7

(09-03-2021, 22:08)jguardon escribió:  Sólo funciona si dentro de un directorio sólo hay ficheros. Si hay varios niveles de directorios y subdirectorios, creo que no va a funcionar. Tendría que ser una función recursiva que vaya entrando en cada subdirectorio, sumando tamaños y regresando a la raíz para continuar con el siguiente. 

En primer lugar, ¡bienvenido!
Simplemente cambia 'Dir' por 'RDir'. Eso escaneará todos los subdirectorios.
    ¡Gracias!
#8

(13-03-2021, 18:24)cogier escribió:  Simplemente cambia 'Dir' por 'RDir'. Eso escaneará todos los subdirectorios.

Wow, no conocía la función recursiva RDir. Genial!!!!

Muchas gracias, cogier

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
    ¡Gracias!
#9

(09-03-2021, 17:39)cogier escribió:  ¿Ayudará esto?

Gracias Charlie.

Lo pruebo y comento.

Saludos

"El lobo siempre será malo si sólo escuchamos a Caperucita.". El lobo.
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)