elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Tamaño Carpeta
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Tamaño Carpeta  (Leído 2,720 veces)
FernandoML

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Tamaño Carpeta
« en: 16 Abril 2021, 10:19 am »

Hola a todos:

Necesito ayuda con este problema.
     * Intento averiguar que tamaño tiene una carpeta (Usuario Activo de Windows).
     * Cuando miro la  propiedades en Windows, la carpeta me ocupa unos 45 gb.
     * Cuando ejecuto mi codigo la capacidad es distinta. (14 Gb aproximadamente.

En que me estoy equivocando?

Mi código
Código:
    Private Function TamDir(sdir As String)
        Dim di As New DirectoryInfo(sdir)
        Dim info As FileInfo
        Dim Suma As Long


        For Each info In di.GetFiles("*", SearchOption.TopDirectoryOnly)
            Suma = Suma + info.Length
        Next

        MsgBox(Suma)
    End Function

Espero me podais ayudar
Muchas gracias y un saludo a todos


En línea

Meta


Desconectado Desconectado

Mensajes: 3.438



Ver Perfil WWW
Re: Tamaño Carpeta
« Respuesta #1 en: 16 Abril 2021, 13:54 pm »

Código
  1. long suma =0;
  2.  
  3. DirectoryInfo di = new DirectoryInfo("c:\\temp");
  4.  
  5. foreach (FileInfo info in di.GetFiles("*", SearchOption.AllDirectories))
  6.  
  7. {
  8.  
  9.   suma+=info.Length;
  10.  
  11. }



En línea

Danielㅤ


Desconectado Desconectado

Mensajes: 1.667


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: Tamaño Carpeta
« Respuesta #2 en: 16 Abril 2021, 15:23 pm »

Hola, también podes ejecutar un comando y guardar el uotput/salida en una variable, en una sóla línea podes tener el tamaño de un directorio sin obviamente utilizar bucle.

Podes usar los comandos dir /s o DiskUsage.


Saludos
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.348


Ver Perfil
Re: Tamaño Carpeta
« Respuesta #3 en: 16 Abril 2021, 16:06 pm »

Si la carpeta tambien tiene más carpetas... pues logicamente recorriendo y sumando el tamaño de solo los ficheros en raiz, no te arrojará el tamaño correcto.

Debes crear una funcion recursiva que recibe una carpeta...

Necesita pues dos bucles, el primero recorre todas las carpetas que contenga la actual, reinvocando la misma funcion con la carpeta en el bucle.
El segundo bucle recoge el tamaño de todos los ficheros en la raiz de la carpeta cuyo nombre se recibe en la funcion.
La suma se va devolviendo con cada llamada recursiva y en el retorno se va sumando...

El codigo sería más o menos asi en pseudocodigo:
Código:
entero = funcion GetSizeFolder( string RutaFolder)
    entero size

    bucle por cada Carpeta en rutafolder
        size += GetsizeFolder(carpeta)
    siguiente

    bucle por cada fichero en RutaFolder
        size += fichero.Size
    Siguiente

    devolver size
fin funcion

p.d.: Es sencillo modificar la funcion con algún parametro adicional para permitir diferentes recorridos (por ejemplo solo el tamaño de lso ficheros en la capeta introducida, o recorre solo cierto nivel de profundidad, o sumar solo determinados tipos de ficheros, los que cumplan cierto criterio de fechas, etc... La base es esa funcion.
« Última modificación: 16 Abril 2021, 16:10 pm por Serapis » En línea

LastChance
Especial
*
Desconectado Desconectado

Mensajes: 8



Ver Perfil
Re: Tamaño Carpeta
« Respuesta #4 en: 15 Mayo 2021, 20:13 pm »

Aquí te dejo una función reutilizable en VB.NET:

Código
  1. ''' ----------------------------------------------------------------------------------------------------
  2. ''' <summary>
  3. ''' Gets the size of a directory, in bytes.
  4. ''' </summary>
  5. ''' ----------------------------------------------------------------------------------------------------
  6. ''' <example> This is a code example.
  7. ''' <code language="VB.NET">
  8. ''' Dim dirSize As Long = GetDirectorySize("C:\Directory\", SearchOption.AllDirectories)
  9. ''' </code>
  10. ''' </example>
  11. ''' ----------------------------------------------------------------------------------------------------
  12. ''' <param name="directoryPath">
  13. ''' The directory path.
  14. ''' </param>
  15. '''
  16. ''' <param name="searchOption">
  17. ''' The <see cref="SearchOption"/>.
  18. ''' </param>
  19. ''' ----------------------------------------------------------------------------------------------------
  20. ''' <returns>
  21. ''' The directory size, in bytes.
  22. ''' </returns>
  23. ''' ----------------------------------------------------------------------------------------------------
  24. <DebuggerStepThrough>
  25. Public Shared Function GetDirectorySize(directoryPath As String, searchOption As SearchOption) As Long
  26.  
  27.    Dim dirInfo As New DirectoryInfo(directoryPath)
  28.    Dim dirSize As Long = dirInfo.EnumerateFiles("*", searchOption).AsParallel().
  29.                                  Sum(Function(fInfo As FileInfo) fInfo.Length)
  30.  
  31.    Return dirSize
  32.  
  33. End Function

También se puede adaptar como una extensión de método para la clase DirectoryInfo:

Código
  1.        ''' ----------------------------------------------------------------------------------------------------
  2.        ''' <summary>
  3.        ''' Gets the size of the directory, in bytes.
  4.        ''' </summary>
  5.        ''' ----------------------------------------------------------------------------------------------------
  6.        ''' <param name="directory">
  7.        ''' The source <see cref="DirectoryInfo"/>.
  8.        ''' </param>
  9.        '''
  10.        ''' <param name="searchOption">
  11.        ''' The <see cref="SearchOption"/>.
  12.        ''' </param>
  13.        ''' ----------------------------------------------------------------------------------------------------
  14.        ''' <returns>
  15.        ''' The directory size, in bytes.
  16.        ''' </returns>
  17.        ''' ----------------------------------------------------------------------------------------------------
  18.        <DebuggerStepThrough>
  19.        <Extension>
  20.        <EditorBrowsable(EditorBrowsableState.Always)>
  21.        Public Function GetSize(directory As DirectoryInfo, searchOption As SearchOption) As Long
  22.            Return GetDirectorySize(directory.FullName, searchOption)
  23.        End Function

Saludos.
« Última modificación: 15 Mayo 2021, 20:19 pm por LastChance » En línea

sdfsdf
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines