Comunidad Gambas-es
Averiguar el tamaño de un directorio desde Gambas - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: General (https://gambas-es.org/forum-4.html)
+--- Tema: Averiguar el tamaño de un directorio desde Gambas (/thread-296.html)



Averiguar el tamaño de un directorio desde Gambas - Shell - 07-03-2021

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


RE: Averiguar el tamaño de un directorio desde Gambas - Shell - 07-03-2021

Partiendo de este ejemplo:

Código:
Public Function ScanDir(sDir As String) As Long

   Dim sFile As String
   Dim sPath As String
   Dim hStat As Stat
   Dim aDir As String[]
   Dim iSize As Long

   Try hStat = Stat(sDir)
   If Error Then Return -1
   iSize = hStat.Size
   If hStat.Type <> gb.Directory Then Return iSize
   Try aDir = Dir(sDir)

   For Each sFile In aDir

     sPath = sDir &/ sFile
     Try hStat = Stat(sPath)
     If Error Then Continue

     With hStat
       If .Type = gb.Directory Then
         Try iSize += ScanDir(sPath)
       Endif
       Try iSize += .Size
     End With
   Next
   Return iSize

End

Se encuentra en la lista internacional.

Saludos


RE: Averiguar el tamaño de un directorio desde Gambas - vuott - 07-03-2021

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


RE: Averiguar el tamaño de un directorio desde Gambas - tincho - 08-03-2021

(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.
[code]
Saludos.


RE: Averiguar el tamaño de un directorio desde Gambas - cogier - 09-03-2021

¿Ayudará esto?
 

Código:
 
Public Sub Form_Open()

  Print ScanDir(User.Home)

End

Public Sub ScanDir(sPath As String) As String

  Dim sFile As String
  Dim lSize As Long

  For Each sFile In Dir(sPath, "*", gb.File)
    lSize += Stat(sPath &/ sFile).Size
  Next

  Return sPath & " = " & Format(lSize / 1000000, "0.0") & "MB"

End



RE: Averiguar el tamaño de un directorio desde Gambas - jguardon - 09-03-2021

(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


RE: Averiguar el tamaño de un directorio desde Gambas - cogier - 13-03-2021

(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.


RE: Averiguar el tamaño de un directorio desde Gambas - jguardon - 13-03-2021

(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


RE: Averiguar el tamaño de un directorio desde Gambas - Shell - 14-03-2021

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

Gracias Charlie.

Lo pruebo y comento.

Saludos