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 :

ProgresseBar lors de la suppression de fichiers "FileInfo" avec "foreach"


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Décembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10
    Par défaut ProgresseBar lors de la suppression de fichiers "FileInfo" avec "foreach"
    Bonjour,
    Je suis novice et actuellement je fais une petite application de suppression pour apprendre le c#, je rencontre 1 problèmes que je ne parvient pas résoudre.

    Je cherche à afficher une "progressbar" qui progresse et qui affiche le pourcentage au file du listage dans une "Listview" avec le bouton "folderBrowserDialog1" ou lors de la suppression des fichiers effectué avec une autre bouton supprimer.

    Je n'arrive pas faire en sorte qu'elle avance progressivement (temps réel) lors de la suppression de chaque fichier ou lors du listage des fichiers. J'ai essayé avec backgroundWorker1 mais le résulta est le même, j'ai aussi essayer depuis le lien suivant https://msdn.microsoft.com/fr-fr/lib...vs.110%29.aspx.

    Partie de mon code lors de la suppression:

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
            private void BT_Selection_Repertoire_PD_Click(object sender, EventArgs e)
            {
                // ==========================================================================
                //Ouverture de la boite de dialog
                if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
                {
     
                    //Remise à zéro et création des options de la liste
                    listView1.Clear();
                    //Active la fonction classement
                    listView1.Sorting = SortOrder.Ascending;
                    //Active les checkboxes
                    listView1.CheckBoxes = true;
                    //Active l'affichage des grilles
                    listView1.GridLines = true;
                    //Active le mode détail
                    listView1.View = View.Details;
     
                    listView1.FullRowSelect = true;
     
                    //Création des colonnes
                    ColumnHeader header1, header2, header3, header4;
                    header1 = new ColumnHeader();
                    header2 = new ColumnHeader();
                    header3 = new ColumnHeader();
                    header4 = new ColumnHeader();
     
                    //Création des noms de colonnes avec quelques options (taille, etc...)
                    header1.Text = "Nom";
                    header1.TextAlign = HorizontalAlignment.Left;
                    header1.Width = 170;
     
                    header2.TextAlign = HorizontalAlignment.Left;
                    header2.Text = "Taille";
                    header2.Width = 80;
     
                    header3.TextAlign = HorizontalAlignment.Left;
                    header3.Text = "Modifier le";
                    header3.Width = 75;
     
                    header4.TextAlign = HorizontalAlignment.Left;
                    header4.Text = "Répertoire";
                    header4.Width = 400;
     
                    //Ajout des colonnes à la listView
                    listView1.Columns.Add(header1);
                    listView1.Columns.Add(header2);
                    listView1.Columns.Add(header3);
                    listView1.Columns.Add(header4);
     
     
                    //Récupération du chemin
                     string dossier_selectionner;
                     TextBox_Chemin_IM.Text = "";
                     dossier_selectionner = folderBrowserDialog1.SelectedPath;
                     DirectoryInfo dirInfo = new DirectoryInfo(dossier_selectionner);
     
                        dossier_selectionner = Path.GetFullPath(dossier_selectionner);
                        TextBox_Chemin_PD.Text = dossier_selectionner;
                        TextBox_Chemin_PD.Enabled = false;
     
                    //Ajout d'un filtre afin d'ouvrir que les fichiers texte par exemple
                    FileInfo[] files = dirInfo.GetFiles("*.*", SearchOption.AllDirectories);
     
                   //compter le nombre de fichiers dans le répertoire séléctionné
                    Label_NB_Fichier_PD.ForeColor = Color.Green;
                    Label_NB_Fichier_PD.Text = "NB Fichiers: " + files.Count();
     
     
                    //Vérifie la présence de fichier du type sélectionner auparavent			
                    if (files != null)
                    {
     
                        foreach (FileInfo file in files)
                        {
                            pBar1.Minimum = 0;
                            pBar1.Maximum = file.Name.Count();
                            pBar1.Value = pBar1.Minimum;
                            pBar1.Step = file.Name.Count();
                           // while (pBar1.Value < pBar1.Maximum)
                           // {
                           //  pBar1.Value += 1;
                           // System.Threading.Thread.Sleep(1000); 
                           // }
     
                            ListViewItem item = new ListViewItem(file.Name); 
     
                            item.SubItems.Add(normalizeSize(file.Length)); 
                            item.SubItems.Add(file.LastWriteTime.ToShortDateString());
                            item.SubItems.Add(file.Directory.ToString()); 
                            listView1.Items.Add(item); 
                            file.delete;
                            pBar1.PerformStep();
     
     
     
                        }
     
                    }
                    else
                      {
                       MessageBox.Show("Aucun Dossier N'a été Sélectionné", "Aucun Dossier Sélectionné", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                       }
                    }
     
            }


    Quelqu'un aurait-il une idée ou un exemple s'il vous plait.

    Merci d'avance pour vos retour.

  2. #2
    Membre confirmé
    Avatar de guatto
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 179
    Par défaut
    Bonsoir,

    si tu veux que le listage de tes fichiers se passe en temps réel sans que ton programme bloque, deux choix s'offre à toi, le BackgroundWorker, ou bien le Threading (je ne sais pas s'il y a d'autres) mais t'as essayé avec un Thread vu que le 1er ne fonctionne pas ? je pense que c'est plus facile.

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,

    Normal : Tu réinitialises ta ProgressBar à chaque boucle (et puis pBar1.Maximum = file.Name.Count(); )
    Donc sortir l'initialisation de la ProgressBar de la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    pBar1.Minimum = 0;
    pBar1.Maximum = files.Count();
    pBar1.Step = 1;
    listView1.BeginUpdate();
    foreach (FileInfo file in files)
    {
        ....
        pBar1.PerformStep();
    }
    listView1.EndUpdate();
    Et pourquoi systématiquement reconstruire la structure du ListView plutôt que de le faire une bonne fois pour toute par code ou en mode design ?

  4. #4
    Membre habitué
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Décembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10
    Par défaut Problème UnauthorizedAccessExceptions avec " FileInfo" et " Foreach"
    Bonjour,

    Merci pour votre retour qui fonctionne bien.

    Voila mon code corrigé:

    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
                  //Vérifie la présence de fichier du type sélectionner auparavent			
                            if (files != null)
                             {
                                    progressBar1.Minimum = 0;
                                    progressBar1.Maximum = files.Count();
                                    progressBar1.Step = 1;
     
                            //Pour chaque fichier trouvé, on récupére ces infos
                            foreach (FileInfo file in files)
                                   {
     
                                    ListViewItem item = new ListViewItem(file.Name); 
                                    item.SubItems.Add(normalizeSize(file.Length)); 
                                    item.SubItems.Add(file.LastWriteTime.ToShortDateString()); 
                                    item.SubItems.Add(file.Directory.ToString()); 
                                    listView1.Items.Add(item); 
                                    file.delete;
     
                                    Label_NB_Delete_File_PD.Text = "NB Fichiers Supprimé: " + listView1.Items.Count;
     
                                    Application.DoEvents();
                                    progressBar1.PerformStep();
                                }
    J'ai remplacé "listView1.BeginUpdate();" et "listView1.EndUpdate();" par "Application.DoEvents();" pour afficher au fure et à mesure les élément supprimer dans la listeview.

    Je rencontre un nouveau problème lors de l'accès à des dossiers et fichiers ou je ne dispose pas des droits, si l'utilisateur sélectionne pour exemple le lecteur "C:\" ou le profile "user", ma boucle s’arrête "UnauthorizedAccessException", j'ai forcé l'ouverture de mon application en tant qu’administrateur depuis le fichier "app.manifest" en modifiant la ligne "<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />" et essayé de faire des bloc TRY/CATCH mais cela ne corrige pas mon problème.

    Auriez vous une idée s'il vous plait ?

    Voici le code de mon dernier test:

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
            private void BT_Selection_Repertoire_PD_Click(object sender, EventArgs e)
            {
                // ==========================================================================
                //Ouverture de la boite de dialog
                if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
                {
                    //Remise à zéro et création des options de la liste
                    listView1.Clear();
                    //Active la fonction classement
                    listView1.Sorting = SortOrder.Ascending;
                    //Active les checkboxes
                    listView1.CheckBoxes = false;
                    //Active l'affichage des grilles
                    listView1.GridLines = true;
                    //Active le mode détail
                    listView1.View = View.Details;
     
                    listView1.FullRowSelect = true;
     
                    //Création des colonnes
                    ColumnHeader header1, header2, header3, header4;
                    header1 = new ColumnHeader();
                    header2 = new ColumnHeader();
                    header3 = new ColumnHeader();
                    header4 = new ColumnHeader();
     
                    //Création des noms de olonnes avec quelques options (taille, etc...)
                    header1.Text = "Nom";
                    header1.TextAlign = HorizontalAlignment.Left;
                    header1.Width = 170;
     
                    header2.TextAlign = HorizontalAlignment.Left;
                    header2.Text = "Taille";
                    header2.Width = 80;
     
                    header3.TextAlign = HorizontalAlignment.Left;
                    header3.Text = "Modifier le";
                    header3.Width = 75;
     
                    header4.TextAlign = HorizontalAlignment.Left;
                    header4.Text = "Répertoire";
                    header4.Width = 400;
     
                    //Ajout des colonnes à la listView
                    listView1.Columns.Add(header1);
                    listView1.Columns.Add(header2);
                    listView1.Columns.Add(header3);
                    listView1.Columns.Add(header4);
     
     
                    //Récupération du chemin
                     string dossier_selectionner;
                     TextBox_Chemin_IM.Text = "";
                     dossier_selectionner = folderBrowserDialog1.SelectedPath;
                     DirectoryInfo dirInfo = new DirectoryInfo(dossier_selectionner);
     
                    // dossier_selectionner = Path.GetPathRoot (dossier_selectionner); //=> convertion de chemin ok lettre du lecteur
                      dossier_selectionner = Path.GetFullPath(dossier_selectionner);
                      TextBox_Chemin_PD.Text = dossier_selectionner;
                      TextBox_Chemin_PD.Enabled = false;
     
     
                    try
                    {
                     //Ajout d'un filtre afin d'ouvrir que les fichiers texte (par exemple)
                     FileInfo[] files = dirInfo.GetFiles("*.*", SearchOption.AllDirectories);
     
                    //compter le nombre de fichiers dans le répertoire séléctionné
                    Label_NB_Fichier_PD.ForeColor = Color.Green;
                    Label_NB_Fichier_PD.Text = "NB Fichiers: " + files.Count();
     
                     //Vérifie la présence de fichier du type sélectionner auparavent			
                       if (files != null)
                         {
                             progressBar1.Minimum = 0;
                             progressBar1.Maximum = files.Count();
                             progressBar1.Step = 1;
                             //listView1.BeginUpdate();
     
                      //Pour chaque fichier trouvé, on récupére ces infos
                            foreach (FileInfo file in files)
                             {
                                try {
     
                                    ListViewItem item = new ListViewItem(file.Name);
                                    item.SubItems.Add(normalizeSize(file.Length)); 
                                    item.SubItems.Add(file.LastWriteTime.ToShortDateString()); 
                                    item.SubItems.Add(file.Directory.ToString()); 
                                    listView1.Items.Add(item); //Ajout à la liste
                                    Label_NB_Delete_File_PD.Text = "NB Fichiers Supprimé: " + listView1.Items.Count;
     
                                    Application.DoEvents();
                                    progressBar1.PerformStep();
                                    }
     
                                catch {} // si erreur chemin trop long (+260 caratère) correction OK
     
                             }
                        }
                    }
                    catch (UnauthorizedAccessException ex)
                    {
                        MessageBox.Show("Erreur Trouvé:" + ex , "Accès refusé", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                    }
     
                }
                else
                 {
                  MessageBox.Show("Aucun Dossier N'a été Sélectionné", "Aucun Dossier Sélectionné", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                 }
     
        }


    Merci encore de vos explication et de votre aide.

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

Discussions similaires

  1. [CS4] Message d'avertissement lors de la suppression de fichiers
    Par evevev dans le forum Dreamweaver
    Réponses: 0
    Dernier message: 25/09/2015, 07h06
  2. Problème lors d'une suppression de fichier
    Par bibiGN dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 26/05/2009, 09h23
  3. Suppression de fichier ou répertoire impossible avec EXE
    Par OhMonBato dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 19/10/2008, 13h11
  4. Exception lors de la suppression de fichier
    Par laurentibus dans le forum Général Java
    Réponses: 18
    Dernier message: 04/04/2008, 15h00
  5. Erreur lors de la suppression du fichier
    Par kynri dans le forum C
    Réponses: 5
    Dernier message: 19/01/2008, 15h03

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