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 :

Problème inexplicable avec méthode récursive [Débutant]


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 44
    Points
    44
    Par défaut Problème inexplicable avec méthode récursive
    Bonjour,

    Afin de faire le décompte de fichiers présents dans un répertoire et ses sous répertoires, j'ai écrit une petite méthode qui parcours les dossiers en comptabilisant les fichiers qu'ils contiennent. Le problème est que cette méthode me renvoie un mauvais résultat.

    En effet, après avoir parcouru toute l'arborescence des dossiers, il se passe quelque chose que je n'arrive pas à comprendre. En mode debug, je vois bien que la méthode arrive bien à l'instruction return avec le bon décompte de fichiers (sous-répertoires inclus), mais avant de quitter définitivement cette dernière pour me renvoyer ce bon décompte, elle refait un tour dans boucle foreach me renvoyant finalement le décompte de fichiers contenus uniquement dans le répertoire de départ !!?? :

    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
     
     
            int filesCount = CountFilesRecursifDossier(@"c:\mondossier",0);
     
            public static int CountFilesRecursifDossier(string path, int result)
            {
                if (Directory.Exists(path))
                {
                    result += Directory.GetFiles(path).Length;
     
                    foreach (string directory in Directory.GetDirectories(path))
                        CountFilesRecursifDossier(directory, result);
                }
     
                return result;
            }
    Quelqu'un pourrait-il m'expliquer pourquoi et me dire comment résoudre ce problème ?

    Merci d'avance pour vos réponses.

  2. #2
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 648
    Points : 2 170
    Points
    2 170
    Par défaut
    Bonjour ,

    Le foreach que tu vois après le return est uniquement la fin de la toute première boucle.Enfin je crois.

    Le problème c'est que result ne gardera toujours que la valeur de la première boucle car dans la suite de la récursivité , result ne sera modifié que dans la portée locale.Du coup ça sera le return de la première boucle qui aura le dernier mot.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            public static int CountFilesRecursifDossier(string path, int result)
            {
                if (Directory.Exists(path))
                {
                    result += Directory.GetFiles(path).Length;
     
                    foreach (string directory in Directory.GetDirectories(path))
                       result = CountFilesRecursifDossier(directory, result);
                }
     
                return result;
            }
    Ça marche car on mets a jour result , après c'est peut être un peu moins récursif mais ça devrait marcher.

    EDIT : J'ai testé chez moi avec 3 niveaux de sous-dossiers et ça marche

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 44
    Points
    44
    Par défaut
    Super !

    Effectivement ça fonctionne. CQFD !

    Un grand merci à toi car je me voyais passer toute la nuit sur ce satané problème. Dans tous les cas je retiens la leçon, ça me servira pour la prochaine fois.


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

Discussions similaires

  1. Problème inexplicable avec une TreeMap (containsKey)
    Par fabrisss dans le forum Langage
    Réponses: 4
    Dernier message: 10/06/2011, 10h18
  2. Réponses: 1
    Dernier message: 12/03/2009, 14h55
  3. Réponses: 8
    Dernier message: 23/09/2007, 19h40
  4. [Data] Problème StaleStateException avec la méthode saveOrUpdate()
    Par superpoune dans le forum Spring
    Réponses: 13
    Dernier message: 25/05/2007, 16h06
  5. Problème avec méthode "cloneNode()"
    Par kingmandrax dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 31/10/2006, 14h14

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