Shell   07-03-2021, 12:22
#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 conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shell   07-03-2021, 14:59
#2
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

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
vuott   07-03-2021, 15:00
#3
Eh, sì... tendrás que usar la función "Dir()".

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
tincho   08-03-2021, 20:05
#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.
[code]
Saludos.

1 Saludo.
cogier   09-03-2021, 17:39
#5
¿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
Última modificación: 09-03-2021, 17:40 por cogier.
jguardon   09-03-2021, 22:08
#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'
cogier   13-03-2021, 18:24
#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.
jguardon   13-03-2021, 20:32
#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'
Shell   14-03-2021, 12:41
#9
(09-03-2021, 17:39)cogier escribió: ¿Ayudará esto?

Gracias Charlie.

Lo pruebo y comento.

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
  
Usuarios navegando en este tema: 6 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.