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?

VB
VB
Linguaggio di programmazione orientato agli oggetti sviluppato da Microsoft implementato in .NET Framework. Precedentemente noto come Visual Basic .NET.
18 domande
0 commenti Nessun commento
{count} voti

1 risposta

Ordina per: Più utili
  1. Monica Caprio (Convergys International Europe) 1,130 Punti di reputazione Fornitore 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.