none
¿Se puede destruir una matriz y volver a crear otra con el mismo nombre?

    Pregunta

  • Buenas tardes amigos del foro,

      He creado una matriz y me gustaría volverá crearla, ejemplo:

     Dim Fila() As String = IO.Directory.GetFiles("c:\Temp", "*.*", IO.SearchOption.AllDirectories)
            Dim Suma As Long = 0
            For Each Archivo As String In Fila
                Suma = Suma + My.Computer.FileSystem.GetFileInfo(Archivo).Length
            Next

     Después de este código también quisiera saber el espacio que ocupa otra carpeta utilizando la misma matriz:

      Dim Fila() As String = IO.Directory.GetFiles("c:\Temp2", "*.*", IO.SearchOption.AllDirectories)

    y así hasta saber lo que ocupan un número indeterminado de carpetas.

    Me parece que tendría que crear una matriz bidimensional, pero antes quisiera saber si se puede destruir y volver a crear.

    Gracias por atenderme, un saludo.       

    lunes, 5 de septiembre de 2016 14:41

Respuestas

  • "Domingo Vargas" preguntó:

    > ¿Se puede destruir una matriz y volver a crear otra con el mismo nombre?

    Hola, Domingo:

    Por supuesto que se puede:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim Fila() As String = IO.Directory.GetFiles("c:\Temp", "*.*", IO.SearchOption.AllDirectories)
    
            ' Leemos el primer elemento de la matriz
            MessageBox.Show(Fila(0))
    
            Fila = IO.Directory.GetFiles("c:\Temporal", "*.*", IO.SearchOption.AllDirectories)
    
            ' Leemos el primer elemento de la matriz
            MessageBox.Show(Fila(0))
    
        End Sub


    > Después de este código también quisiera saber el espacio que ocupa
    > otra carpeta utilizando la misma matriz:
    >
    > Dim Fila() As String = IO.Directory.GetFiles("c:\Temp2", "*.*", IO.SearchOption.AllDirectories)
    >
    > y así hasta saber lo que ocupan un número indeterminado de carpetas.

    Y ¿por qué no te construyes una función que te devuelva la longitud en bytes de la carpeta especificada?

        ''' <summary>
        ''' Obtiene el tamaño en bytes de la carpeta especificada.
        ''' </summary>
        ''' <param name="folderPath">Ruta de la carpeta cuyo tamaño se desea obtener.</param>
        ''' <returns></returns>
        Public Shared Function GetFolderLength(folderPath As String) As Long
    
            If (String.IsNullOrWhiteSpace(folderPath)) Then
                Throw New ArgumentNullException()
            End If
    
            Dim files As String() = IO.Directory.GetFiles(folderPath, "*.*", IO.SearchOption.AllDirectories)
            Dim length As Long = 0
            For Each archivo As String In files
                length += My.Computer.FileSystem.GetFileInfo(archivo).Length
            Next
    
            Return length
    
        End Function


    Y cuando quieras obtener el tamaño de 4 carpetas diferentes, ejecutarías:

        Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    
            Try
                ' Primera carpeta
                Dim carpeta As String = "C:\Temp"
                Dim n As Long = GetFolderLength(carpeta)
                MessageBox.Show($"Tamaño de la carpeta {carpeta}: {n:N0} bytes.")
    
                ' Segunda carpeta
                carpeta = "C:\Temp2"
                n = GetFolderLength(carpeta)
                MessageBox.Show($"Tamaño de la carpeta {carpeta}: {n:N0} bytes.")
    
                ' Tercera carpeta
                carpeta = "C:\Temp3"
                n = GetFolderLength(carpeta)
                MessageBox.Show($"Tamaño de la carpeta {carpeta}: {n:N0} bytes.")
    
                ' Cuarta carpeta
                carpeta = "C:\Temp4"
                n = GetFolderLength(carpeta)
                MessageBox.Show($"Tamaño de la carpeta {carpeta}: {n:N0} bytes.")
    
            Catch ex As UnauthorizedAccessException
                ' No tiene acceso a la carpeta o a un archivo
                MessageBox.Show(ex.Message)
    
            Catch ex As Exception
                ' Otros errores diferentes al anterior.
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub

    Si por casualidad utilizas una versión inferior de Visual Studio 2015, formatea el valor devuelto por la función GetFolderLength mediante el método String.Format:

        MessageBox.Show(String.Format("Tamaño de la carpeta {0}: {1:N0} bytes.", carpeta, n))

    > Me parece que tendría que crear una matriz bidimensional, ...

    Obviamente, el resultado de cada llamada individual a la función GetFolderLength se lo podrías asignar a un elemento de otra matriz que tuvieras debidamente dimensionada en el procedimiento llamador, sin necesidad de que fuera una matriz bidimensional. Pero eso ya lo dejo en tus manos. ;-)

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    lunes, 5 de septiembre de 2016 15:08
    Moderador

Todas las respuestas

  • "Domingo Vargas" preguntó:

    > ¿Se puede destruir una matriz y volver a crear otra con el mismo nombre?

    Hola, Domingo:

    Por supuesto que se puede:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim Fila() As String = IO.Directory.GetFiles("c:\Temp", "*.*", IO.SearchOption.AllDirectories)
    
            ' Leemos el primer elemento de la matriz
            MessageBox.Show(Fila(0))
    
            Fila = IO.Directory.GetFiles("c:\Temporal", "*.*", IO.SearchOption.AllDirectories)
    
            ' Leemos el primer elemento de la matriz
            MessageBox.Show(Fila(0))
    
        End Sub


    > Después de este código también quisiera saber el espacio que ocupa
    > otra carpeta utilizando la misma matriz:
    >
    > Dim Fila() As String = IO.Directory.GetFiles("c:\Temp2", "*.*", IO.SearchOption.AllDirectories)
    >
    > y así hasta saber lo que ocupan un número indeterminado de carpetas.

    Y ¿por qué no te construyes una función que te devuelva la longitud en bytes de la carpeta especificada?

        ''' <summary>
        ''' Obtiene el tamaño en bytes de la carpeta especificada.
        ''' </summary>
        ''' <param name="folderPath">Ruta de la carpeta cuyo tamaño se desea obtener.</param>
        ''' <returns></returns>
        Public Shared Function GetFolderLength(folderPath As String) As Long
    
            If (String.IsNullOrWhiteSpace(folderPath)) Then
                Throw New ArgumentNullException()
            End If
    
            Dim files As String() = IO.Directory.GetFiles(folderPath, "*.*", IO.SearchOption.AllDirectories)
            Dim length As Long = 0
            For Each archivo As String In files
                length += My.Computer.FileSystem.GetFileInfo(archivo).Length
            Next
    
            Return length
    
        End Function


    Y cuando quieras obtener el tamaño de 4 carpetas diferentes, ejecutarías:

        Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    
            Try
                ' Primera carpeta
                Dim carpeta As String = "C:\Temp"
                Dim n As Long = GetFolderLength(carpeta)
                MessageBox.Show($"Tamaño de la carpeta {carpeta}: {n:N0} bytes.")
    
                ' Segunda carpeta
                carpeta = "C:\Temp2"
                n = GetFolderLength(carpeta)
                MessageBox.Show($"Tamaño de la carpeta {carpeta}: {n:N0} bytes.")
    
                ' Tercera carpeta
                carpeta = "C:\Temp3"
                n = GetFolderLength(carpeta)
                MessageBox.Show($"Tamaño de la carpeta {carpeta}: {n:N0} bytes.")
    
                ' Cuarta carpeta
                carpeta = "C:\Temp4"
                n = GetFolderLength(carpeta)
                MessageBox.Show($"Tamaño de la carpeta {carpeta}: {n:N0} bytes.")
    
            Catch ex As UnauthorizedAccessException
                ' No tiene acceso a la carpeta o a un archivo
                MessageBox.Show(ex.Message)
    
            Catch ex As Exception
                ' Otros errores diferentes al anterior.
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub

    Si por casualidad utilizas una versión inferior de Visual Studio 2015, formatea el valor devuelto por la función GetFolderLength mediante el método String.Format:

        MessageBox.Show(String.Format("Tamaño de la carpeta {0}: {1:N0} bytes.", carpeta, n))

    > Me parece que tendría que crear una matriz bidimensional, ...

    Obviamente, el resultado de cada llamada individual a la función GetFolderLength se lo podrías asignar a un elemento de otra matriz que tuvieras debidamente dimensionada en el procedimiento llamador, sin necesidad de que fuera una matriz bidimensional. Pero eso ya lo dejo en tus manos. ;-)

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    lunes, 5 de septiembre de 2016 15:08
    Moderador
  • Muchas gracias señor Enrique M. Montejo, me ha sido muy útil su respuesta y creo que lo mejor es realizar

    la función GetFolderLenght(). Un saludo.

    lunes, 5 de septiembre de 2016 15:24