IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Taille dossier récursif


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 44
    Par défaut Taille dossier récursif
    Bonsoir !

    Je recherche actuellement un moyen de connaître la taille d'un dossier de façon récursive. Incluant donc les sous-dossiers.

    Pour l'exemple actuel, voici un exemple de chemins :
    -- C:\
    ----Dossier1\
    ------ Voiture.avi 12 Mo
    ------ Dossier2\
    -------- Canard.avi 3 Mo

    Littéralement, le Dossier1 Contient le fichier Voiture.avi et aussi un Dossier2, ce dernier contenant Canard.avi.

    Mon code (ci-dessous), va me renvoyer une valeur pour 12 Mo uniquement, alors que j'ai essayé d'appliquer la récursivité via une fonction. J'ai beau chercher, c'est une erreur bête je pense, mais il ne prendra pas le sous dossier !

    Si quelqu'un à une idée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    static long MaJDossier(DirectoryInfo dossier, bool inclureSousDossiers) {
                long totalSize = 0;
                Console.WriteLine("------------"+dossier.ToString());
                FileInfo[] files = dossier.GetFiles();
                foreach (FileInfo file in files) {
                    totalSize += file.Length;
                    Console.WriteLine("Fichier "+ file);
                }
     
                if (inclureSousDossiers == true) {
                    DirectoryInfo[] dirs = dossier.GetDirectories();
                    foreach (DirectoryInfo dir in dirs) {
                        Console.WriteLine("Dossier " + dir);
                        totalSize += MaJDossier(dir, true);
                        Console.WriteLine("Total Size " + totalSize);
                    }
                }
     
                return (totalSize / (1024 * 1024));
            }
    Et je l'appelle comme ceci :

    label20.Text = MaJDossier(new DirectoryInfo(@"C:\Dossier1"), true).ToString();
    Merci par avance.

  2. #2
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Effectivement une petite bétise, mais avec la récursivité on a souvent des petites erreurs du genre ;-) .J'ai testé avec la même hiérarchie de répertoire que toi mais avec un fichier de 15 et 3 mo. Ton problème vient d'ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    totalSize / (1024 * 1024)
    Tu effectues ta conversion en Mo quand tu sors du calcul de ton sous dossier. Donc dans mon cas j'obtiens 3 (logique). Mais dans la ligne suivante tu ajoutes ta valeur (dans mon cas 3) à la taille de ton dossier parent qui dans mon cas est 15943323 (pas encore convertis en Mo)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    totalSize += MaJDossier(dir, true);
    Et à la fin de la fonction tu te retrouves à convertir 15943326

    Donc ta fonction corrigée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    static long MaJDossier(DirectoryInfo dossier, bool inclureSousDossiers)
            {
                long totalSize = 0;
                Console.WriteLine("------------" + dossier.ToString());
                FileInfo[] files = dossier.GetFiles();
                foreach (FileInfo file in files)
                {
                    totalSize += file.Length / (1024 * 1024);
                    Console.WriteLine("Fichier " + file);
                }
     
                if (inclureSousDossiers == true)
                {
                    DirectoryInfo[] dirs = dossier.GetDirectories();
                    foreach (DirectoryInfo dir in dirs)
                    {
                        Console.WriteLine("Dossier " + dir);
                        totalSize += MaJDossier(dir, true);
                        Console.WriteLine("Total Size " + totalSize);
                    }
                }
     
                return totalSize; //totalSize / (1024 * 1024));
            }
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 44
    Par défaut
    Effectivement ! Merci de ta réponse constructive j'ai pu comprendre l'erreur, c’est tout logique en fait. J'avais dit que c'était une erreur bête.

    Problème résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2008] Taille dossier log (mdmp) très grande !
    Par JauB dans le forum Administration
    Réponses: 4
    Dernier message: 22/07/2013, 10h13
  2. [WS 2003] Limite taille dossiers
    Par Teckenguich dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 22/10/2012, 16h25
  3. Limite taille dossiers
    Par dosman dans le forum Thunderbird
    Réponses: 5
    Dernier message: 14/06/2012, 08h54
  4. Parcours de dossier récursif
    Par YoshioToutou dans le forum Débuter
    Réponses: 6
    Dernier message: 04/03/2012, 16h06
  5. Arboréscence + Taille Dossier dans fichier HTML
    Par forum dans le forum Vos Contributions VBScript
    Réponses: 1
    Dernier message: 24/05/2011, 11h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo