Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exploration de fichiers

Méthodes

    10 novembre 2021 à 20:52:46

    Bonjour ! Je suis actuellement sur l'exploration de fichiers en c# sur un répertoire courant mais je bloque un peu sur les quelques fonctions que j'ai pu lire sur les documentations...

    Je dois créer une classe où une méthode ExplorerRepertoire doit faire l'exploration récursive de tous les sous-répertoires non cachés et non systèmes ainsi que  déterminer si chaque sous-répertoire est ni caché, ni système.

    Je dois également re-appeler la méthode ExplorerRepertoire pour chaque sous répertoire non caché et non système et enfin afficher le chemin complet de tous les fichiers non cachés et non système...

    Je bloque complètement c'est pourquoi j'aimerai de l'aide, le code que j'ai écris me renvoie une erreur où une valeur n'est pas toujours retournée...

    using System;
    
    using System.Collections.Generic;
    
    using System.Text;
    
    using System.IO;
    
    using System.Collections;
    
    namespace GestionSystemeDeFichier
    
    {
    
        class ExplorateurDeRepertoire
    
        {
    
            private String repertoire; // répertoire initial
    
            public ExplorateurDeRepertoire(string repertoireInitial)
    
            {
    
                repertoire = repertoireInitial;
    
            }
    
            private string ExplorerRepertoire(string repertoireCourant)
    
            {
    
                try
    
                {
    
                    string[] reps = Directory.GetDirectories(repertoireCourant);
    
                    foreach (string rep in reps)
    
                    {
    
                        ExplorerRepertoire(rep);
    
                        Console.WriteLine(rep);
    
                    }
    
                    FileAttributes attributes = File.GetAttributes(repertoireCourant);
    
                    if ((attributes & FileAttributes.Hidden) != FileAttributes.Hidden & (attributes & FileAttributes.System) != FileAttributes.System)
    
                    {
    
                        Console.WriteLine("Répertoire ni caché, ni de type Système");
    
                        ExplorerRepertoire(repertoireCourant);
    
                    }
    
                    string[] files = Directory.GetFiles(repertoireCourant);
    
                    foreach (string file in files)
    
                    {
    
                        Console.WriteLine(file);
    
                    }
    
                }
    
                catch (Exception e)
    
                {
    
                    Console.WriteLine("Erreur", e.ToString());
    
                }
    
            }
    
            public void ExplorationSynchrone()
    
            {
    
                this.ExplorerRepertoire(repertoire);
    
            }
    
        }
    
    }



    -
    Edité par StevenAlwick 11 novembre 2021 à 18:31:09

    • Partager sur Facebook
    • Partager sur Twitter
      10 novembre 2021 à 23:56:54

      Bonjour,

      Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Merci de colorer votre code à l'aide du bouton Code

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: vb;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        14 novembre 2021 à 12:31:29

        Moi, je vois surtout un appel récursif "infini" via la ligne 57.
        • Partager sur Facebook
        • Partager sur Twitter
        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
          15 novembre 2021 à 19:20:30

          et aussi ta fonction est censé renvoyer un string d'après sa déclaration, or elle ne contient aucun return (ce qui correspond à l'erreur que tu nous indique)

          Mais corrige surtout l'erreur soulignée par bacelar

          • Partager sur Facebook
          • Partager sur Twitter
            16 novembre 2021 à 1:40:43

            Si je retire la ligne 57, la récursivité sera terminée mais il m'est demandé de rappeler la méthode pour chaque fichiers non cachés et non systèmes, donc je bloque un peu
            • Partager sur Facebook
            • Partager sur Twitter
              16 novembre 2021 à 3:38:30

              >mais il m'est demandé de rappeler la méthode pour chaque fichiers non cachés et non systèmes

              Alors pourquoi vous l'appeler sur le REPERTOIRE "COURANT" ?

              Vous allez boucler sur le même répertoire jusqu'à exploser la pile, c'est tout.

              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                16 novembre 2021 à 13:13:04

                ta récursivité se fait en ligne 43 sinon
                • Partager sur Facebook
                • Partager sur Twitter
                  16 novembre 2021 à 15:56:31

                  Merci beaucoup pour vos messages, vous m'aidez à avancer!

                  Autant pour moi, j'ai mal lu le sujet. Est-ce-que le mot clé this permettra cette opération?

                  Sous cette forme :

                  private string ExplorerRepertoire(string repertoireCourant)
                          {
                              try
                              {
                                  string[] reps = Directory.GetDirectories(repertoireCourant);
                                  foreach (string rep in reps)
                                  {
                                      ExplorerRepertoire(rep);
                                      Console.WriteLine(rep);
                                  }
                                  FileAttributes attributes = File.GetAttributes(repertoireCourant);
                                  if ((attributes & FileAttributes.Hidden) != FileAttributes.Hidden & (attributes & FileAttributes.System) != FileAttributes.System)
                                  {
                                      Console.WriteLine("Répertoire ni caché, ni de type Système");
                                      this.ExplorerRepertoire();
                                  }
                                  string[] files = Directory.GetFiles(repertoireCourant);
                                  foreach (string file in files)
                                  {
                                      Console.WriteLine(file);
                                  }
                              }
                              catch (Exception e)
                              {
                                  Console.WriteLine("Erreur", e.ToString());
                              }
                          }

                  Et est-ce-que la récursivité ligne 43 pose problème?

                  -
                  Edité par StevenAlwick 16 novembre 2021 à 15:56:56

                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 novembre 2021 à 16:09:04

                    "this" n'a rien  voir avec la choucroute.

                    La ligne 15 de votre nouveau code est tout autant foireuse que la ligne 57 de votre ancien code.

                    Sachant que vos faites un parcourt en profondeur d'abord avec votre ligne 8 du nouveau code, à quoi sert votre ligne 15 ?

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                      16 novembre 2021 à 22:28:17

                      Pourquoi l'élément this n'a rien à voir ici?

                      Je pensais que c'était pour "explorer" les répertoires non cachés et non systèmes

                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 novembre 2021 à 10:59:21

                        this > https://docs.microsoft.com/fr-fr/dotnet/csharp/language-reference/keywords/this 

                        ligne 8 tu explores TOUS les répertoires du répertoire COURANT

                        ligne 11 à 16, tu cherches à explorer le répertoire (lequel? on ne sait pas tu ne donnes de paramètre à ta fonction dans ton code) si le répertoire COURANT n'est ni caché ni système; or tu dis que tu dois rappeler la fonction sur CHAQUE répertoire trouvé qui n'est ni caché, ni système

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Exploration de fichiers

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        • Editeur
                        • Markdown