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:
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.
Problème UnauthorizedAccessExceptions avec " FileInfo" et " Foreach"
Bonjour,
Merci pour votre retour qui fonctionne bien.
Voila mon code corrigé:
Code:
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:
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.