2008-09-26 4 views
0

Je suis en train de convertir une ancienne application qui enregistre les tailles de dossiers sur une base quotidienne. L'application héritée utilise la bibliothèque Scripting.FileSystemObject:Comment obtenir la taille d'un dossier?

Set fso = CreateObject("Scripting.FileSystemObject") 
Set folderObject = fso.GetFolder(folder) 
size = folderObject.Size 

Il n'y a pas un mécanisme équivalent sur les classes System.IO.Directory et System.IO.DirectoryInfo.

Pour obtenir le même résultat dans .NET, est-ce que je dois marcher de façon récursive sur toute la structure du dossier en maintenant un total de taille de fichier?

Mise à jour: @ Jonathon/Ed - merci .... comme je le pensais. Je pense que je vais simplement référencer la bibliothèque COM Scripting.FileSystemObject. Fonctionne aussi bien, même si la pureté .NET de mon application. C'est pour une application de reporting interne, donc ce n'est pas une grosse affaire.

Répondre

2

Je pense que vous connaissez déjà la réponse; vous aurez besoin d'additionner tous les fichiers dans le répertoire (ainsi que ses répertoires enfants.) Je ne connais pas de fonction intégrée pour cela, mais bon, je ne sais pas tout (même pas proche).

Mads Kristensen
3

Malheureusement, oui ... qui sait pourquoi.

public static long DirSize(DirectoryInfo d) 
{  
    long Size = 0;  
    // Add file sizes. 
    FileInfo[] fis = d.GetFiles(); 
    foreach (FileInfo fi in fis) 
    {  
     Size += fi.Length;  
    } 
    // Add subdirectory sizes. 
    DirectoryInfo[] dis = d.GetDirectories(); 
    foreach (DirectoryInfo di in dis) 
    { 
     Size += DirSize(di); 
    } 
    return(Size); 
} 

Comme on le voit à:

http://msdn.microsoft.com/en-us/library/system.io.directory.aspx

0

posted sur ce un certain temps ...

private double size = 0; 

private double GetDirectorySize(string directory) 
{ 
    foreach (string dir in Directory.GetDirectories(directory)) 
    { 
     GetDirectorySize(dir); 
    } 

    foreach (FileInfo file in new DirectoryInfo(directory).GetFiles()) 
    { 
     size += file.Length; 
    } 

    return size; 
} 
+0

Le lien est rompu. –

+0

@Mostafa J'ai corrigé le lien et inclus l'exemple de code –