by Fabien Lavocat
20. June 2008 00:07

Nous allons voir comment avec deux petites fonctions, calculer la taille totale d’un répertoire et afficher sa taille en Mo.
Commencez déjà par importer le namespace System.IO :
using System.IO;
Ensuite nous allons créer une fonction récurcive afin de pouvoir pouvoir entrer dans les sous-répertoires.
1: private Int64 DirectoryLength(DirectoryInfo folder)
2: {
3: Int64 bytes = 0;
4: foreach (FileInfo fi in folder.GetFiles())
5: bytes += fi.Length;
6:
7: foreach (DirectoryInfo i in folder.GetDirectories())
8: bytes += DirectoryLength(i);
9:
10: return bytes;
11: }
Cette fonction prend en paramètre un objet de type "DirectoryInfo” qui représente le dossier à analyser. Elle parcourt la liste des fichiers présents dans ce dossier et récupére leur taille. Ensuite on cherche s’il y a des sous-répertoires présents, si c’est le cas, on appelle la même fonction avec le répertoire courant.
L’appel de la fonction :
1: private void Form1_Load(object sender, EventArgs e)
2: {
3: // Le @ permet d'échapper tous les caractères spéciaux
4: String folder = @"C:\DossierATester\";
5:
6: // Si le dossier n'existe pas on arrête de traitement
7: if (!Directory.Exists(folder))
8: return;
9:
10: // Le dossier existe, on peut calculer sa taille
11: Int64 size = DirectoryLength(new DirectoryInfo(folder));
12:
13: // Ensuite on l'affiche
14: Console.WriteLine("Taille du dossier '{0}' : {1} Mo", folder, size.ToMo());
15: }
Mais qu’est ce que "size.ToMo()” ?
Une méthode d’extention :
1: public static class Functions
2: {
3: public static String ToMo(this Int64 input)
4: {
5: // N02 permet d'afficher au format : 1 234.56
6: return (input / (1024 * 1024)).ToString("N02");
7: }
8: }
Petite information, si je n’ai utilisé que des Int64 c’est que la méthode Lenght() retourne un objet de type long et vous le savez, long est un alias de Int64 (comme string qui est un alias de String), et que je n’aime pas trop, pour la visibilité du code, travailler avec des alias.
Maintenant un petit quiz !!!
Int32 est une classe. Vrai ou Faux ?