2011-03-23 4 views
1

J'ai quelques problèmes dans ma machine. Mon disque dur est d'environ 500 Go, et je suis sûr que mes fichiers ne dépassent pas 150 Go. Mais cela montre que l'espace libre n'est que de 100 Go. Je voudrais savoir quel est le plus grand répertoire dans mon ordinateur, parce que quand j'ai essayé de chercher avec la propriété "*.*" size:gigabytes ce n'est pas grave. J'ai besoin d'une idée d'un algorithme qui recherche dans le répertoire puis dans ses sous-répertoires? par exemple.Obtenir la plus grande taille de répertoire sur le disque dur dans le code

long count = Directory.GetDirectories("C:\\"); 
for (int i = 0; i < count.Length; i++) 
{ 
    // I need to look in each directory and repeat process 
} 
+3

Il y a [beaucoup d'outils gratuits] (http://superuser.com/questions/8248/best-program-to-visualize-file-system-usage-on-windows) pour faire ce que vous voulez, si vous ne vous souciez pas vraiment d'écrire votre propre solution. – Blorgbeard

+0

Pas de code de moi, mais cela résout toujours le suivi de l'utilisation du disque pour moi: http://www.memecode.com/idisk.php – gjvdkamp

+0

@Blorg: merci, je préfère écrire du code, je me plais donc. –

Répondre

3

Vous aurez besoin soit d'en apprendre davantage sur récursion ou utilisez un Stack.

Je pourrais écrire le code pour vous, mais si vous envisagez d'écrire des programmes plus souvent, ce sont des concepts essentiels à comprendre. Mettez-y un peu d'effort pour bien les comprendre. Ensuite, vous serez capable de faire cette tâche ainsi que beaucoup d'autres.

+0

merci, pouvez-vous citer quelques sources d'apprentissage, s'il vous plaît? –

0

Vous pouvez installer Cygwin et simplement faire:

$ du /cygdrive/c 
1

Avez-vous besoin de construire un programme pour le faire, ou êtes-vous juste essayer d'utiliser le code pour comprendre cela pour votre propre machine?

Si c'est le dernier, WinDirStat vous fera gagner beaucoup de temps.

Si c'est le premier, je vous suggère de regarder recursive functions.

1

Voici un point de départ, il appelle récursivement le lecteur C: et calcule la taille de chaque dossier. Vous voudrez peut-être le modifier en fonction de vos besoins, par exemple, plutôt que de garder un dictionnaire, gardez le plus grand.

Func<DirectoryInfo, long> calc = null; 
var sizes = new Dictionary<string, long>(); 
calc = di => 
      { 
       var childSum = di.GetDirectories().Sum(d => calc(d)); 
       var size = di.GetFiles().Sum(f => f.Length); 
       sizes.Add(di.FullName, childSum + size); 
       return size; 
      }; 
calc(new DirectoryInfo("C:\\")); 

EDIT: Pour le point Hans, vous voudrez peut-être exécuter le programme avec des autorisations élevées pour fouiner dans les répertoires que vous pourriez ne pas avoir accès à, comme System Volume Information.

Questions connexes