FolderBrowseDialog (visualizzare dimensione cartella in bytes,mb,gb)

di il
4 risposte

FolderBrowseDialog (visualizzare dimensione cartella in bytes,mb,gb)

Salve a tutti
non riesco a visualizzare la grandezza della cartella
potete aiutarmi grazie.

    Dim DoubleBytes As Double

    Function FormatBytesText(ByVal bytes As Long) As String
        Dim bytesText As String = Nothing

        If (bytes < System.Math.Pow(1024, 1)) Then
            bytesText = (bytes / System.Math.Pow(1024, 0)).ToString("N0") + " B"
        ElseIf (bytes < System.Math.Pow(1024, 2)) Then
            bytesText = (bytes / System.Math.Pow(1024, 1)).ToString("N0") + " KB"
        ElseIf (bytes < System.Math.Pow(1024, 3)) Then
            bytesText = (bytes / System.Math.Pow(1024, 2)).ToString("N2") + " MB"
        ElseIf (bytes < System.Math.Pow(1024, 4)) Then
            bytesText = (bytes / System.Math.Pow(1024, 3)).ToString("N2") + " GB"
        End If

        Return bytesText
    End Function
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim sa As String = "\*"
        Dim dlg As New FolderBrowserDialog
        dlg.ShowNewFolderButton = False
        dlg.Description = "Seleziona cartella"
        If dlg.ShowDialog = DialogResult.OK Then
            Dim d As New DirectoryInfo(dlg.SelectedPath)
            TextBox4.Text = dlg.SelectedPath + sa
            Label1.Text = "Size: " & FormatBytesText(dlg.SelectedPath)
            Exit Sub
        End If
    End Sub
    

4 Risposte

  • Re: FolderBrowseDialog (visualizzare dimensione cartella in bytes,mb,gb)

    Ma dlg.SelectedPath che cos'è ?????
    Secondo me è il nome della cartella che hai scelto, non credo sia la dimensione in bytes

    Un sistema per evitare un sacco di errori (tipo questo) è quello di attivare "Option Strict".
    Se lo attivi, vedrai subito che ti dice che la riga
    Label1.Text = "Size: " & FormatBytesText(dlg.SelectedPath)
    è errata, e da lì capivi subito che hai passato una stringa ad una funzione che aspetta un Long
  • Re: FolderBrowseDialog (visualizzare dimensione cartella in bytes,mb,gb)

    SirJo ha scritto:


    Ma dlg.SelectedPath che cos'è ?????
    Secondo me è il nome della cartella che hai scelto, non credo sia la dimensione in bytes

    Un sistema per evitare un sacco di errori (tipo questo) è quello di attivare "Option Strict".
    Se lo attivi, vedrai subito che ti dice che la riga
    Label1.Text = "Size: " & FormatBytesText(dlg.SelectedPath)
    è errata, e da lì capivi subito che hai passato una stringa ad una funzione che aspetta un Long
    allora non è buona la funzione credo, perchè non accetta nulla della funzione FormatBytesText
  • Re: FolderBrowseDialog (visualizzare dimensione cartella in bytes,mb,gb)

    Ovviamente è come ti ha detto SirJo.
    allora non è buona la funzione credo, perchè non accetta nulla della funzione FormatBytesText :
    Ma che vuoi dire?

    Devi solo utilizzare un'altra funzione che calcoli lo spazio occupato nella cartella e nelle sottocartelle e passi il valore alla tua funzione. Ovvero
    
     Label1.Text = "Size: " & FormatBytesText(GetDirectorySize(dlg.SelectedPath))
    
    e la funzione GetDirectorySize sarà
    
    Public Function GetDirectorySize(path As String) As Long
        Dim files() As String = Directory.GetFiles(path, "*", SearchOption.AllDirectories)
        Dim size As Long = 0
        For Each file As String In files
            Dim info As New FileInfo(file)
            size += info.Length
        Next
        Return size
    End Function
    
  • Re: FolderBrowseDialog (visualizzare dimensione cartella in bytes,mb,gb)

    Si lo so che voleva dire SirJo scusami se mi esprimo male
    ma non sapevo che dovevo creare un'altra funzione
    adesso funziona benissimo e ti ringrazio tante oregon

    è possibile bloccare l'accesso a system volume information, perchè se seleziono esempio: C o B del backup per dire, mi restituisce un errore

    ho provato cosi e funziona, ma troverò qualcosa di più cool di On Error Resume Next
        Public Function GetDirectorySize(ByVal path As String) As Long
            On Error Resume Next
            Dim files() As String = Directory.GetFiles(path, "*", SearchOption.AllDirectories)
            Dim size As Long = 0
            For Each file As String In files
                Dim info As New FileInfo(file)
                size += info.Length
            Next
            Return size
    
        End Function
Devi accedere o registrarti per scrivere nel forum
4 risposte