Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [VB .NET 2005 beta2] grandezza cartella-directory

    Salve!
    E' un quesito banale, lo so.
    Ho provato a cercare ma ho trovato solo esempi per VB 6.

    Vorrei sapere, magari con un esempio, come si può (con Visual Basic .net 2005 beta2) determinare la grandezza in bytes di una directory (cioè il totale in bytes occupato dai files e sottodirectory in essa contenuti).

    Grazie
    Ciao
    Make Pazziata-tàààà NOT war!

  2. #2
    Non è tanto banale, in quanto non esiste una proprietà specifica per determinare la dimensione di una cartella, né con la classe System.IO.Directory né con la classe System.IO.DirectoryInfo.

    Credo che l'unica maniera sia quella di visitare con una funzione ricorsiva la cartella e le sue sottocartelle, sommando in un totale comune la dimensione dei singoli files.

    Per determinare la dimensione di un file si usa la classe System.IO.FileInfo, attraverso la proprietà Length.

    Ecco un esempio funzionante:
    codice:
        Private Function GetDirectoryLength(ByVal d As DirectoryInfo) As Long
            Dim dd As DirectoryInfo
            Dim ff As FileInfo
            Dim sz As Long
    
            For Each dd In d.GetDirectories
                sz += GetDirectoryLength(dd)
            Next
    
            For Each ff In d.GetFiles
                sz += ff.Length
            Next
    
            Return sz
        End Function
    La funzione si usa così:
    codice:
    Imports System.IO
    
    Private Sub Test()
        Dim d As New DirectoryInfo("c:/windows")
    
        MsgBox("La cartella " & d.ToString & " occupa " & GetDirectoryLength(d) & " bytes.")
    End Sub
    Ciao
    Chi non cerca trova.

  3. #3
    Grazie!!!

    Il tuo esempio funziona "quasi" perfettamente.

    In VB.NET 2005 beta 2 ho solo modificato
    DirectoryInfo in IO.DirectoryInfo
    e
    FileInfo in IO.FileInfo

    Ho da farti però un'osservazione: il codice dell'esempio presuppone che la directory da esaminare contenga almeno 1 file e almeno 1 directory.

    Quando l'ho provato in una cartella contenente SOLO files il programmino si è bloccato (GetDirectories ovviamente era vuoto).

    Bisognerebbe:
    verificare che esista almeno una sottodirectory PRIMA di eseguire d.GetDirectories
    e analogamente
    verificare che esista almeno un file PRIMA di eseguire d.GetFiles

    Ma non so come fare queste verifiche...

    Mi aiuteresti?
    Grazie, comunque, in anticipo.
    Make Pazziata-tàààà NOT war!

  4. #4
    Io mi faccio la domanda e io mi do' la risposta (festival marzulliano):

    codice:
            If d.GetDirectories.Length <> 0 Then
                For Each dd In d.GetDirectories
                    sz += GetDirectoryLength(dd)
                Next
            End If
    
            If d.GetFiles.Length <> 0 Then
                For Each ff In d.GetFiles
                    sz += ff.Length
                Next
            End If
    Così funziona anche nei casi in cui non sono presenti files o sottodirectory.
    Make Pazziata-tàààà NOT war!

  5. #5
    Anche se il post è parecchio vecchio provo a chiedere.
    Ho utilizzato queste stringhe che ho trovato molto utili però ogni tanto mi da un errore: questo accade quando visito delle documents and settings in cui ci sono file temporanei di internet con nomi troppo lunghi. L'errore specifico ad esempio è il seguente:

    Impossibile trovare il file 'itinerary_zoom_728x90;cityfrom=68418;cityto=78899 ;countryfrom=612;countryto=612;areato=Venezia;area from=Cuneo;outofbox=;sz=728x90;ptile=1;dcopt=ist;o[1]'.

    Qualcuno sa aiutarmi in merito

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.