Fige de programme [Résolu]

Messages postés
92
Date d'inscription
mercredi 4 décembre 2002
Dernière intervention
18 mai 2018
- - Dernière réponse : Rapakooti
Messages postés
92
Date d'inscription
mercredi 4 décembre 2002
Dernière intervention
18 mai 2018
- 8 déc. 2012 à 18:20
Bonjour,
J'ai un programme qui cherche sur le disque dur des fichiers avec une fonction récursive ( je précise méme si j'aimerais elle est pas de moi

la voici

   // Procedure pour effectuer une recherche recursive des films
        private void DirSearch(string sDir, string pattern)
        {
            
           try
            {
                foreach (string f in Directory.GetFiles(sDir, pattern))
                {
                    bool skipFile = false;
                    foreach (string item in listBox6.Items)
                    {
                        if (f.ToUpper().IndexOf(item.ToUpper()) != -1)
                        {

                            skipFile = true;
                        }
                    }
                 


                    if (!skipFile)
                    {
                       
                        string test  =f.Substring(0, f.LastIndexOf(".")) + ".nfo";
                        if (File.Exists(test) != false)
                        {
                            
                            dataGridView1.Rows.Add(true, f.Substring(0, f.LastIndexOf("\") + 1), f.Substring(f.LastIndexOf("\") + 1));

                        }
                        else
                        {
                          dataGridView1.Rows.Add(false, Directory.GetDirectories(sDir), f.Substring(f.LastIndexOf("\") + 1));
                        }
                        toolStripStatusLabel1.Text = "Nombre de films : " + dataGridView1.RowCount;
                        
                    }
                }

                foreach (string d in Directory.GetDirectories(sDir))
                {
                    DirSearch(d, pattern);
  

                }
            }
            catch (System.Exception excpt)
            {
                //MessageBox.Show(excpt.Message);
            }
        }


Mais voici le problème , pendant cette recherche le problème " fige" si il y a trop de répertoire et de meme la liste et le nombre des fichiers trouvé ne s'actualise pas en temps reel, j'ai bien essayé de mettre ne pause le programme mais vu qu'il est en pause cela ne change rien.. j'ai testé de mettre une progresse barre pour faire patienter mais elle également ne s'actualise pas , et de plus je pars du principe que je ne connais pas le nombre de fichier trouvé donc pas de max possible

Auriez vous une idée pour forcé ce rafraichissement ?
merci
R A P A K O O T I
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
92
Date d'inscription
mercredi 4 décembre 2002
Dernière intervention
18 mai 2018
3
Merci
Merci probleme resolu

R A P A K O O T I

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de Rapakooti
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,

A la place de travailler avec les contrôles, utilises des collections et piles (List<T>, Stack<T>, Queue<T>) et lances cette partie dans un thread (System.Threading.Thread ou BackGroundWorker).

Ensuite, utilises un Timer pour rafraichir régulièrement l'interface par les données des collections.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Commenter la réponse de NHenry
Messages postés
92
Date d'inscription
mercredi 4 décembre 2002
Dernière intervention
18 mai 2018
0
Merci
Merci de ta réponse, qui même si elle me semble logique , me dit que j'ai du taf devant moi... afin de la mettre en place , n'ayant jamais bosser avec les collections, et que je gere le nom du fichier et la présence d'un nfo en même temps et que j'ai jamais bosse avec un BackGroundWorker, je sais j'ai pas bosse avec bcp de chose mais je me suis remit a la prog il y a peu et je me suis mis au c# en meme temps


Merci de encore de ta réponse, je laisse le sujet ouvert, je vais revenir :-)

R A P A K O O T I
Commenter la réponse de Rapakooti
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,

Manipuler les connections, ce n'est pas dur.
Le fait d'utiliser listBox6, le fait en sous-jacent.

Concernant le fait de traiter les .NFO, ne change rien à la problématique ni à ton code.

Pour le BackGroundWorker, il y a pas mal d'exemple sur le net.

Le changement n'est pas très compliqué, mais demande à comprendre en détail le code et à manipuler la notion de thread et des limitations qui y incombe.

C'est en codant que l'on devient développeur.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Commenter la réponse de NHenry
Messages postés
92
Date d'inscription
mercredi 4 décembre 2002
Dernière intervention
18 mai 2018
0
Merci
Merci je suis en train de regarder ca , et effectivement ca va etre tres utile, mais j'ai une derniere question, j'etais en train justement de regarde la listBox6, je comprend son fonctionnement avec la boucle, je suis en train de voir pour la convertir egalement en List<T>, mais ce que je comprend pas c est que je parcour la list mais a aucun moment je la "rempli" c est la ou j'avoue , je bloque pourrais tu eclairé ma lanterne?

R A P A K O O T I
Commenter la réponse de Rapakooti
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,

Je pense que c'est pour exclure des fichiers contenant une chaine spécifiée.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Commenter la réponse de NHenry
Messages postés
92
Date d'inscription
mercredi 4 décembre 2002
Dernière intervention
18 mai 2018
0
Merci
Merci encore pour ta réponse ca avance, ca avance,
alors j'ai choisis l'approche de creation de thread,
voici ou j'en suis .
j'ai un bouton qui permet de sélectionner l'emplacement des répertoires contenant les films
Voici le code qui si rapporte

 private void Bemplacement_Click_1(object sender, EventArgs e)
        {
            //Creation folderbrowser
            FolderBrowserDialog folderDlg = new FolderBrowserDialog();

            folderDlg.ShowNewFolderButton = true;

            // Montre le FolderBrowserDialog.

            DialogResult result = folderDlg.ShowDialog();
            // Si le bouton selectionnez est ok >
            if (result == DialogResult.OK)
            {

                Trepertoire.Text = folderDlg.SelectedPath;

                Environment.SpecialFolder root = folderDlg.RootFolder;

                //Effacement de la liste
                emplacement = null;
                //lance la recherche recursive
                recherche = new Thread(new ThreadStart(ThreadMethod));
               recherche.Start();
           
               }



     
        }


ce bouton créée donc un thread qui va lancé la recherche , je pensais derrière avec un timer cloner la liste ou autre car je dois gérer la presence ou pas du fichier NFO

Mais voila ou je bloque j'effectue une recherche recursive, donc j'ai modifie et allége le code de la recherche

    private void ThreadMethod()
        {
            string sdir = Trepertoire.Text;
            string pattern = "*.avi";
            try
            {
          
                foreach (string f in Directory.GetFiles(sdir, pattern))
                {
               
                 emplacement.Add(f);
                     
                }

                foreach (string d in Directory.GetDirectories(sdir))
                {
                   //VOILA LE PROBLEME 

                  DirSearch(d, pattern);


                }
            }
            catch (System.Exception excpt)
            {
                MessageBox.Show(excpt.Message);
            }
        }


Le souci se situe au niveau de la recursivité de la recherche , est ce que je dois cree un tread par recherche?? deja que je pense en cree deux en parallele pour gere l'extention du fichier et dans ce cas la comment les incrementer?

merci de vos reponse

R A P A K O O T I
Commenter la réponse de Rapakooti
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,

Tu peux faire un seul thread qui fera le listage des fichiers et la recherche du NFO.

Ensuite, il faut faire attention, créer trop de thread peut être contre productif.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Commenter la réponse de NHenry

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.