11 giugno 2006

VB.NET : Recuperare l'occupazione di una directory

La seguente function in VB.NET permette di ricavare, in maniera ricorsiva, l'occupazione su disco di una directory.
La variabile Path contiene il percorso della directory (senza il carattere terminatore "\").
La funzione ritorna lo spazio occupato oppure -1 se si è verificato un errore
Il costrutto try/catch è utilizzato per garantire che la funzione non vada mai in errore.


Public Function GetDirSize(ByVal Path As System.String) As Int64
 Dim retval as Int64 = 0
 Dim dirdata() As System.IO.DirectoryInfo
 Dim filedata() As System.IO.FileInfo
 Dim file As System.IO.FileInfo
 Dim dimension As Int64 = 0

 Try
  Dim dir As System.IO.DirectoryInfo = New System.IO.DirectoryInfo(Path)
  ' Scansione dei file della directory
  filedata = dir.GetFiles("*.*")
  For Each file In filedata
   dimension = dimension + file.Length
  Next
  ' Scansione delle sottodirectory
  dirdata = dir.GetDirectories("*")
  For Each dir In dirdata
   dimension = GetDirSize(dir.FullName)
   if dimension<>-1 then retval+=dimension
  Next
  retval=dimension
 Catch
  retval=-1
 End Try
 Return retval
End Function


Vengono utilizzate le classi DirectoryInfo e FileInfo e non le classi Directory e File poichè le prime non eseguono le autorizzazioni di sicurezza ogni volta che viene utilizzato un metodo (come invece fanno le seconde) migliorando le prestazioni.

Nessun commento: