Come calcolo rapidamente dimensione e contenuto di una cartella?

Guglielmo Cancelli 5 Punti di reputazione
2024-04-01T10:00:57.2366667+00:00

Di solito per calcolare la dimensione di una cartella e il suo contenuto utilizzo DirectoryInfo e Directory.GetFile che però sono estremamente lente.

Considerato che in MBR sono elencati tutti i file e che programmi come WinFile dichiarano di usarlo e sono estremamente veloci, come faccio in VB.NET a ottenere, di una certa cartella, dimensione complessiva in byte, conteggio di file e cartelle contenuti, più rapidametne che aprendo le proprietà della cartella da Windows?

Tecnologie per sviluppatori | VB
0 commenti Nessun commento
{count} voti

1 risposta

Ordina per: Più utili
  1. Monica Caprio (Convergys International Europe) 1,140 Punti di reputazione Personale Esterno Microsoft
    2024-04-01T12:44:49.5666667+00:00

    Gentile Guglielmo,

    Puoi ottenere le informazioni desiderate utilizzando le API di Windows direttamente in VB.NET. Una delle API che potresti utilizzare per ottenere le informazioni sulla dimensione dei file e delle cartelle è GetDiskFreeSpaceEx dell'API di Windows. Ecco un esempio di come potresti utilizzarlo in VB.NET:

    
    Imports System.Runtime.InteropServices
    
    Public Class Form1
    
        <DllImport("kernel32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
    
        Private Shared Function GetDiskFreeSpaceEx(
    
                ByVal lpDirectoryName As String,
    
                ByRef lpFreeBytesAvailableToCaller As ULong,
    
                ByRef lpTotalNumberOfBytes As ULong,
    
                ByRef lpTotalNumberOfFreeBytes As ULong) As Boolean
    
        End Function
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim folderPath As String = "C:\Path\To\Your\Folder"
    
            Dim freeBytesAvailableToCaller As ULong
    
            Dim totalNumberOfBytes As ULong
    
            Dim totalNumberOfFreeBytes As ULong
    
            If GetDiskFreeSpaceEx(folderPath, freeBytesAvailableToCaller, totalNumberOfBytes, totalNumberOfFreeBytes) Then
    
                MessageBox.Show($"Total Size: {totalNumberOfBytes} bytes")
    
            Else
    
                MessageBox.Show("Error getting folder size.")
    
            End If
    
        End Sub
    
    End Class
    
    

    Questo codice ti darà la dimensione totale della cartella specificata. Puoi iterare attraverso i file e le cartelle per ottenere il conteggio esatto di file e cartelle se necessario. Questo metodo dovrebbe essere più veloce rispetto all'utilizzo di DirectoryInfo e Directory.GetFiles.

    Spero di essere stata utile.

    Monica.

    0 commenti Nessun commento

Risposta

Le risposte possono essere contrassegnate come risposte accettate dall'autore della domanda. Ciò consente agli utenti di sapere che la risposta ha risolto il problema dell'autore.