none
recherche de fichier avec C# RRS feed

  • Question

  • bjrs a tout le monde j'ai un souci j'ai ecrit le programme en Bas(bref je l'ai trouver et rafistoler )pour chercher un ficchier dans un ordianteur!!!!j'ai un soucie,j'arive pas à arrêter le prog quand je trouve le fichier  .voici le bout de code et j'espère des aides votre part mercie d'avance.

    cordialement

    private string GetDirStructure(string path, string rechercher)                    
            {
                bool trouver = false;
                string res = null;
                try
                {
                    DirectoryInfo dir = new DirectoryInfo(path);                                  
                    FileInfo[] files = dir.GetFiles();                                          
                    foreach (FileInfo fi in files)
                    {
                        if (fi.Name == rechercher)
                        {
                            trouver = true;
                            res = fi.FullName;
                            label1.Text = res;
                        }

                        if (subDirs != null)
                        {
                            foreach (DirectoryInfo sd in subDirs)
                            {
                                if (trouver == true)
                                { break; }
                                else
                                {
                                    GetDirStructure(sd.FullName, rechercher);
                                }
                            }
                        }
                        else
                        { }
                    }
                }
                catch (Exception ex)
                {
                }
                return res;
            }


    après boutonclick(................)
    strig del;

    del=GetDirStructure(@"c:\","nomfichier");


    if(del != null)
    {
        Process.Start(nomfichier);
    }
    else
    {j'affiche un messageBox};

    le probleme est dans la fonction GetDirStructur() c'est fou à première vue  çà fonctionne mais déboguer  ligne par ligne vous allez vous en rendre compte que le prog ne sort plus de cette fonction GetDirStructur.

    mercie à tout le monde

    dimanche 2 mai 2010 17:38

Réponses

  • Bonjour,

    A priori tu reboucles même en ayant trouvé un fichier car l'information "trouver" n'est pas retournée. Voici un essai dérivé de ton exemple :

     

    public static FileInfo GetDirStructure(string path, string rechercher)
    {
     FileInfo fi = null;
     DirectoryInfo dir = new DirectoryInfo(path);
     FileInfo[] files = null;
     
     try
     {
     files = dir.GetFiles();
     }
     catch (UnauthorizedAccessException ex)
     {
     // impossible d'accéder aux fichiers
     System.Diagnostics.Debug.Write(ex.Message);
     }
    
     // si lecture possible
     if (files != null)
     {
     // recherche première occurence
     fi = files.FirstOrDefault(f => f.Name == rechercher);
    
     if (fi == null)
     {
      DirectoryInfo[] subs = dir.GetDirectories();
    
      foreach (DirectoryInfo d in subs)
      {
      fi = GetDirStructure(d.FullName, rechercher);
    
      // stop si trouvé
      if (fi != null)
       break;
      }
     }
     }
    
     return fi;
    }
    

    pour l'appel :

    System.IO.FileInfo fi = Class1.GetDirStructure("C:\\test", "test.txt");
    MessageBox.Show(fi.FullName);

     

    Cordialement

    lundi 3 mai 2010 12:48
    Modérateur

Toutes les réponses

  • Bonjour,

    Lorsque vous trouvez votre fichier, il suffit de stopper l'exécution de la méthode en faisant directement un return :

    if (fi.Name == rechercher)
    {
      trouver = true;
      // res = fi.FullName;
      label1.Text = fi.FullName;
      return fi.FullName;
    } 

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    dimanche 2 mai 2010 17:53
    Modérateur
  • bonsoir Gilles en fesant ce ke tu ma dit çà me retourne un erreur type:Erreur 2 'WindowsFormsAppfichier1.Form1.GetDirStructure(string, string)' : tous les chemins de code ne retournent pas nécessairement une valeur C:\Users\jéMarley\Documents\Visual Studio 2008\Projects\WindowsFormsAppfichier1\WindowsFormsAppfichier1\Form1.cs 41 24 WindowsFormsAppfichier1

    peut être que c'est à cause du "return"qui n'est pas à sa bonne place!!!!?? merci .

    cordiallement.

    dimanche 2 mai 2010 19:44
  • Bonjour,

    Cela veut tout simplement dire qu'il manque un return dans une des conditions.

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    dimanche 2 mai 2010 21:00
    Modérateur
  • je suis navrè de te dire ke çà ne fonctionne pas!!!!.

    quand la condition est rempli "if(fi.name==rechercher)"

    il sort de la dernière acolade et se remet en boucle directement sur"GetDirStructure(sd.FullName, rechercher);"et çà reprend le prog ne s"en  sort plus!!!!

    cordialement

    lundi 3 mai 2010 06:37
  • Bonjour,

    A priori tu reboucles même en ayant trouvé un fichier car l'information "trouver" n'est pas retournée. Voici un essai dérivé de ton exemple :

     

    public static FileInfo GetDirStructure(string path, string rechercher)
    {
     FileInfo fi = null;
     DirectoryInfo dir = new DirectoryInfo(path);
     FileInfo[] files = null;
     
     try
     {
     files = dir.GetFiles();
     }
     catch (UnauthorizedAccessException ex)
     {
     // impossible d'accéder aux fichiers
     System.Diagnostics.Debug.Write(ex.Message);
     }
    
     // si lecture possible
     if (files != null)
     {
     // recherche première occurence
     fi = files.FirstOrDefault(f => f.Name == rechercher);
    
     if (fi == null)
     {
      DirectoryInfo[] subs = dir.GetDirectories();
    
      foreach (DirectoryInfo d in subs)
      {
      fi = GetDirStructure(d.FullName, rechercher);
    
      // stop si trouvé
      if (fi != null)
       break;
      }
     }
     }
    
     return fi;
    }
    

    pour l'appel :

    System.IO.FileInfo fi = Class1.GetDirStructure("C:\\test", "test.txt");
    MessageBox.Show(fi.FullName);

     

    Cordialement

    lundi 3 mai 2010 12:48
    Modérateur
  • mercie,la vérité  c'est que j'ai trouver une autre moyen de sortir de la boucle,donc çà ma règler le problème.merci à tout le monde si vous voulez résoudre un autre problème chercher dans "est-il possible de graver un fichier???à partir d'un prog Csharp???????

    cordialement.

    vendredi 7 mai 2010 12:12