Message animé pendant qu'on compte le nombre de fichier [Résolu]

Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 16 nov. 2016 à 15:50 - Dernière réponse : vb95 1696 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention
- 18 nov. 2016 à 16:39
Bonjour,
Il y a pas longtemps vb95 m'a donné la méthode de calculer le nombre de dossier et fichier qui se trouve dans un répertoire, il fonctionne trés bien (Merci vb95)
selon le nombre de fichiers ou dossiers qui se trouve dans le répertoire le logiciel sera bloqué pour un certain temps
j'ai ajouté un message au début "Patientez ..." avant l'application commence à compter, ce message disparaît a la fin bien sûr
je voulais que le message soit animé pendant qu'il compte les fichiers/Dossiers c-à-d :
1er mot : Label3.Text = "Patientez "
2eme mot : Label3.Text = "Patientez ."
3eme mot : Label3.Text = "Patientez .."
4eme mot : Label3.Text = "Patientez ..."
5eme mot : Label3.Text = "Patientez "
et ainsi de suite (en boucle)
je sais que il sera un petit peu plus longs, mais c'est pas grave
j'ai fait ça :
Imports System.IO
Imports System.Threading.Tasks
Public Class Form1
Private compteurfichiers As Integer
Private compteurrepertoires As Integer
Private Sub CompterDir(ByVal oSource As DirectoryInfo)
Try
'Compte tous les fichiers d'un répertoire (utilise le parallélisme pour de meilleures performances)
Parallel.ForEach(oSource.GetFiles(), Sub(oFichier As FileInfo)
' on compte que les fichiers ( pas les répertoires)
If oFichier.Attributes <> FileAttributes.Directory Then compteurfichiers = compteurfichiers + 1
End Sub)
'Comptage (par récursivité) de tous ses sous-répertoires
For Each oSousRepertoire As DirectoryInfo In oSource.GetDirectories()
' on compte le répertoire
compteurrepertoires = compteurrepertoires + 1
' on va compter les fichiers du répertoire
CompterDir(oSousRepertoire)
Next
Catch ex As Exception
End Try
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Label3.Text = "Patientez "
compteurfichiers = 0
compteurrepertoires = 1 ' on compte le répertoire source
CompterDir(New DirectoryInfo(TextBox1.Text))
Timer1.Start()
Label1.Text = compteurrepertoires.ToString & " Répertoires"
Label2.Text = compteurfichiers.ToString & " Fichiers"
End Sub

et ajouter ce code dans un Timer :
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If Label3.Text = "Patientez " Then
Label3.Text = "Patientez ."
ElseIf Label3.Text = "Patientez ." Then
Label3.Text = "Patientez .."
ElseIf Label3.Text = "Patientez .." Then
Label3.Text = "Patientez ..."
ElseIf Label3.Text = "Patientez ..." Then
Label3.Text = "Patientez "
End If
System.Threading.Thread.Sleep(500)
End Sub

qu'un peux me dire où est mon erreur, merci d'avance pour votre aide
Afficher la suite 

Votre réponse

32 réponses

Meilleure réponse
vb95 1696 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention - Modifié par vb95 le 16/11/2016 à 16:20
1
Merci
Bonjour Karin.code
1) Tu déclenches ton Timer une fois le comptage fini : c'est avant le début du comptage qu'il faut le déclencher
2) Inutile de mettre le
System.Threading.Thread.Sleep(500)
. Utilise la propriété Interval du timer
3) une fois le comptage fini mets un
Timer1.Stop

4) Un vrai code de défilement serait bien mieux

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. 

Merci vb95 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

vb95 1696 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention > Whismeril 12216 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention - 16 nov. 2016 à 16:36
Tout à fait exact Whismeril
bonjour à toi
Au fait j'ai modifié mes Scrabbles
Pour le dictionnaire je n'utilise plus un tableau de 26 arcs par nœud avec Redim mais une list(of Arcs) . Pourquoi mettre 26 arcs si le nœud n'en comporte qu'un seul d'utile par exemple .Et la méthode Find me permet de trouver l'indice de l'arc associé à une lettre donnée .
Les méthodes Find, Where, etc.... sont bien concises en code mais pas facile de trouver de la doc dessus mis à part les réponses anglophones .
Mais avec de la logique et du tâtonnement on avance
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 16 nov. 2016 à 16:37
Bonsoir Vb95 et Whismeril
merci de m'avoir répondu
Vb95tu veux dire comme ça :

Imports System.IO
Imports System.Threading.Tasks
Public Class Form1
Private compteurfichiers As Integer
Private compteurrepertoires As Integer
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If Label3.Text = "Patientez " Then
Label3.Text = "Patientez ."
ElseIf Label3.Text = "Patientez ." Then
Label3.Text = "Patientez .."
ElseIf Label3.Text = "Patientez .." Then
Label3.Text = "Patientez ..."
ElseIf Label3.Text = "Patientez ..." Then
Label3.Text = "Patientez "
End If
End Sub
Private Sub CompterDir(ByVal oSource As DirectoryInfo)
Try
'Compte tous les fichiers d'un répertoire (utilise le parallélisme pour de meilleures performances)
Parallel.ForEach(oSource.GetFiles(), Sub(oFichier As FileInfo)
' on compte que les fichiers ( pas les répertoires)
If oFichier.Attributes <> FileAttributes.Directory Then compteurfichiers = compteurfichiers + 1
End Sub)
'Comptage (par récursivité) de tous ses sous-répertoires
For Each oSousRepertoire As DirectoryInfo In oSource.GetDirectories()

' on compte le répertoire
compteurrepertoires = compteurrepertoires + 1
' on va compter les fichiers du répertoire
CompterDir(oSousRepertoire)
Next
Catch ex As Exception
End Try
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Label3.Text = "Patientez "
Timer1.Start()
compteurfichiers = 0
compteurrepertoires = 1 ' on compte le répertoire source
CompterDir(New DirectoryInfo(TextBox1.Text))
Label1.Text = compteurrepertoires.ToString & " Répertoires"
Label2.Text = compteurfichiers.ToString & " Fichiers"
Timer1.Stop()
End Sub

là le message ne s'affiche même pas ni avant ni après avoir compte le nombre de fichiers/Dossiers, si l’enlève Timer1.Stop le message s'affiche qu'après avoir compter le nombre de fichiers / Dossiers
vb95 1696 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention > Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 16 nov. 2016 à 16:50
bonjour Karin.code
il faut comprendre que maintenant avec la puissance de nos PC les opérations en boucle se font assez rapidement ( surtout en plus que la sub CompterDir utilise le Parrallel.ForEach : cela revient à faire plusieurs boucles simultanées)
Quelle est la valeur de la propriété Interval de ton Timer ? Par défaut c'est 100 je crois soit 100 millisecondes
Utilises un
Label3.Refresh()
à la fin de la sub duTimer pour rafraichir l'affichage du label
Je teste de mon côté
vb95 1696 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention > vb95 1696 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention - 16 nov. 2016 à 17:09
bonjour Karin.code
Après test cela ne fonctionne pas
Il faudrait mettre la sub Compterdir dans un BackGroundWorker pour éviter qu"elle bloque la Form et que le Timer puisse interférer sur la Form
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention > vb95 1696 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention - 16 nov. 2016 à 17:12
L'intervalle du Timer1 est égale à 1000 (1 Seconde)
j'ai fais comme tu à suggérer, mais rien n'a lair d'avoir changer :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Label3.Text = "Patientez "
Timer1.Start()
compteurfichiers = 0
compteurrepertoires = 1 ' on compte le répertoire source
CompterDir(New DirectoryInfo(TextBox1.Text))
Label1.Text = compteurrepertoires.ToString & " Répertoires"
Label2.Text = compteurfichiers.ToString & " Fichiers"
Timer1.Stop()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If Label3.Text = "Patientez " Then
Label3.Text = "Patientez ."
ElseIf Label3.Text = "Patientez ." Then
Label3.Text = "Patientez .."
ElseIf Label3.Text = "Patientez .." Then
Label3.Text = "Patientez ..."
ElseIf Label3.Text = "Patientez ..." Then
Label3.Text = "Patientez "
End If
Label3.Refresh()
End Sub

quand j'ai ajouté un
 System.Threading.Thread.Sleep(500)
(qui met l'application en pause)
je voulais que les résultats du timer auront le temps s'afficher
Commenter la réponse de vb95
cs_Le Pivert 5505 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention - 16 nov. 2016 à 17:12
0
Merci
Bonjour,

Pourquoi ne pas mettre un label avec défilement de texte comme ceci:

http://codes-sources.commentcamarche.net/source/53734-amusons-nous-avec-un-label
vb95 1696 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention > cs_Le Pivert 5505 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention - 16 nov. 2016 à 18:12
C'est bien cela cs_Le Pivert mais on ne peut pas reporter la progression du comptage des fichiers et répertoires vu que l'on ne sait pas leur nombre
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 16 nov. 2016 à 17:25
Salut cs_Le Privert
merci pour ta réponse
le problème si la form est bloqué alors lui aussi bloqué
Salut Vb95
Il faudrait mettre la sub Compterdir dans un BackGroundWorker pour éviter qu"elle bloque la Form et que le Timer puisse interférer sur la Form
maintenant je suis vraiment intéressé si il y a une méthode pour que la form ne soit pas bloqué je veux bien savoir comme ça résoudra beaucoup de mes problèmes, s'il te plait explique moi
cs_Le Pivert 5505 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention > Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 16 nov. 2016 à 17:33
 Private Sub action()
     compteurfichiers = 0
        compteurrepertoires = 1 ' on compte le répertoire source
        CompterDir(New DirectoryInfo(TextBox1.Text))
    End Sub


tu mets action où j'ai mis:

'ici le code de l'action a démarrer

et dans le button 1

BackgroundWorker1.RunWorkerAsync()
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention > cs_Le Pivert 5505 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention - 16 nov. 2016 à 18:06
Salut cs_Le Privert et Vb95
Avec les dernières modifications cela fonctionne très bien Merci, je peux même utiliser cette méthode pour le poste précédent (celui de copier le contenue d'un disque vers un dossier) il bloque aussi l'application
juste une dernière question pour cs_Le Privert
à quoi sert :
MyThread.ReportProgress(pourcent)

car il y a une erreur qui s'affiche (Ce BackgroundWorker précise qu'il ne signale aucune progression. Modifiez WorkerReportsProgress afin qu'il signale bel et bien une progression.)
je l'ai enlevé et cela fonctionne sans problème
ps : désolé vous répondu tellement vite que je n'ai pas eu le temps de testé et répondre lol :)
cs_Le Pivert 5505 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention > Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 16 nov. 2016 à 18:31
Commenter la réponse de cs_Le Pivert
vb95 1696 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention - 16 nov. 2016 à 17:25
0
Merci
Rebonjour à tous
Pour cs_Le Pivert : c'est bien ce que l'on veut faire mais le problème c'est que le Timer est bloqué par les Threads de la Sub CompterDirà mon avis .
Pour Karin.code : même avec un BackGrondWorker cela ne fonctionne pas . Pourquoi ? c'est la question
Le
System.Threading.Thread.Sleep(500)
là où il est placé ne met pas l'application en pause : il rallonge la duéee du processus du Timer et il y a un risque qu'un nouveau déclenchement du Timer intervienne avant que le processus du déclenchemnt précédent ne soit terminé

Commenter la réponse de vb95
vb95 1696 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention - 16 nov. 2016 à 18:14
0
Merci
Salut Karin.code

Sur la form tu mets les contrôles suivant
-1 bouton Button1 pour lancer la recherche
-3 Labels 1, 2 et 3 pour afficher les résultats (Label3 affiche le message ( adapte ta taille à la longueur du message)
- 1 Timer1
- 1 BackGroundWorker

Qu'est ce que le BackGround ?
imagine tu construis une voiture : tu fais sous-traiter la construction du moteur . Rien ne t’empêche de monter la carrosserie de la voiture, de monter l'intérieur pendant que ton sous-traitant fabrique le moteur
Le moteur ici c'est le comptage des fichiers et répertoires en BackGround et le reste de la voiture c'est ta Form qui n'est pas bloquée : je pense que tu vois l'analogie .
Ce sont 2 processus différents qui n'interfèrent pas

Teste ceci

Imports System.ComponentModel
Imports System.IO
Imports System.Threading.Tasks

Public Class Form1

Private Message As String = "Patientez "
Private compteurfichiers As Integer
Private compteurrepertoires As Integer

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

Timer1.Enabled = False
Label3.Visible = False
Label3.BackColor = Color.White

End Sub
Private Sub Timer1_Tick_1(sender As Object, e As EventArgs) Handles Timer1.Tick

Message = Message.Substring(1, Message.Length - 1) & Message.Substring(0, 1)
Label3.Text = Message

End Sub

Private Sub CompterDir(ByVal oSource As DirectoryInfo)

Try
'Compte tous les fichiers d'un répertoire (utilise le parallélisme pour de meilleures performances)
Parallel.ForEach(oSource.GetFiles(), Sub(oFichier As FileInfo)
' on compte que les fichiers ( pas les répertoires)
If oFichier.Attributes <> FileAttributes.Directory Then compteurfichiers = compteurfichiers + 1
End Sub)
'Comptage (par récursivité) de tous ses sous-répertoires
For Each oSousRepertoire As DirectoryInfo In oSource.GetDirectories()

' on compte le répertoire
compteurrepertoires = compteurrepertoires + 1
' on va compter les fichiers du répertoire
CompterDir(oSousRepertoire)
Next
Catch ex As Exception
End Try

End Sub
Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click

Label3.Text = Message
Label3.Visible = True
Timer1.Enabled = True
Timer1.Start()
compteurfichiers = 0
compteurrepertoires = 1 ' on compte le répertoire source
BackgroundWorker1.RunWorkerAsync() ' on lance le processus de comptage en BackGround (tâche de fond)

End Sub

Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

' processus de comptage en BackGround
CompterDir(New DirectoryInfo("C:\")) ' répertoire racine C:\ pour l'exemple ( à modifier )

End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted

' fin processus Background et retour dans le processu de la form du projet
Label1.Text = compteurrepertoires.ToString & " Répertoires"
Label2.Text = compteurfichiers.ToString & " Fichiers"
Label3.Text = String.Empty
Label3.Visible = False
Timer1.Stop()
Timer1.Enabled = False

End Sub

End Class

Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 16 nov. 2016 à 18:27
Salut Vb95
Je comprend ton bien exemple, et le comme marche super bien
Merci à vous
J'attend la réponse de cs_Le Pivert sur ma question
et je met le sujet comme résolu, ok
Commenter la réponse de vb95
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 16 nov. 2016 à 18:52
0
Merci
Salut cs_Le Pivert

Le lien que tu m'a donné ne fonctionne pas, peut-être que c'est provisoire je vais essayer plus tard



Merci
vb95 1696 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention - 16 nov. 2016 à 19:08
bizarre : il fonctionne nickel chez moi
tu peux avoir la même chose ici : http://plasserre.developpez.com/cours/vb-net/?page=windows-forms5#LX-R

Suppose que tu traite 500 fichiers dans un BackGround pour un traitement assez lourd
Dans ton code de traitement BackGround tu auras une boucle for

For i = 0 to 499
' le traitement pour chaque fichier
MyThread.ReportProgress(pourcent)
Next

Vu que le BackGround ne peut pas accéder à un contrôle de la Form tu ne peux pas avoir une barre de progression pour voir l'avancement

Le
MyThread.ReportProgress(pourcent)
permet de signaler à la Form le pourcentage effectué dans le BackGround ; il faut
autoriser le Background à reporter l'avancement du processus en BackGround

Et c'est la procédure
BackgroundWorker1_ProgressChanged
dans la form qui se charge d'afficher le pourcentage sur la barre de progression

Mais dans ton cas vu que l'on ne sait pas le nombre de fichiers ou de répertoires inutile de mettre une barre de progression
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention > vb95 1696 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention - 16 nov. 2016 à 21:12
oui je comprend merci
c'est utile, je ne peux pas l'utiliser pour ce projet mais je peux l'utiliser pour le projet " Copier le contenu du disque ", je calcul tout d'abord le nombre de fichier dans le disque aprés j'utilise ce code pour savoir le nombre de fichiers copier, dit moi si je me trompe
vb95 1696 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention > Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 16 nov. 2016 à 21:46
Dans ce projet " Copier le contenu du disque " tu pourrais .
Mais il faut placer le
MyThread.ReportProgress(pourcent)
uniquement pour la copie de fichiers et surtout pas à la création de répertoire .
De plus avec une progression depuis un BackGround la Progressbar de progression doit aller de 0 à 100 ( la progression est en pourcentage : si tu as 200 fichiers et que tu en as traiter 50 , le pourcentage est de 25 %)
Mais si mes souvenirs sont bons pour copier le contenu du disque je ne l'ai pas adapter du comptage des fichiers et répertoires ? Car dans ce cas là je ne sais si cela va fonctionner directement !
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention > vb95 1696 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention - 16 nov. 2016 à 22:04
Salut vb95
Je vais essayer et te tenir au courant
Bon nuit
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention > vb95 1696 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention - 18 nov. 2016 à 10:53
Salut vb95
On regardant le code de 'Compter le nombre de fichiers/Dossiers" j'ai remarqué cette partie compteurrepertoires = compteurrepertoires + 1
alors j'ai eu l'idée de l'ajouter dans le code "Copier le contenu d'un disque"
voici le code Complet :
Imports System.IO
Imports System.Threading.Tasks
Public Class Form1
Private CopieCpier As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Timer2.Enabled = True
Timer2.Start()
CopieCpier = 0
BackgroundWorker2.RunWorkerAsync()
End Sub
#Region " Copier Fichiers / Dossiers"
Private Destination As String
Private Source As String
Private Sub CopyDir(ByVal oSource As DirectoryInfo, ByVal oDestination As DirectoryInfo)
Try
oDestination.Create() 'Création du répertoire de destination (le cas échéant)
'Copie de tous ses fichiers (utilise le parallélisme pour de meilleures performances)
Parallel.ForEach(oSource.GetFiles(), Sub(oFichier As FileInfo)
oFichier.CopyTo(Path.Combine(oDestination.FullName, oFichier.Name))
CopieCpier = CopieCpier + 1
End Sub)
'Copie (par récursivité) de tous ses sous-répertoires
For Each oSousRepertoire As DirectoryInfo In oSource.GetDirectories()
CopyDir(oSousRepertoire, oDestination.CreateSubdirectory(oSousRepertoire.Name))
Next
Catch ex As Exception
End Try
End Sub
Private Sub BackgroundWorker2_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker2.DoWork
ActionCopier()
End Sub
Sub ActionCopier()
Destination = TextBox1.Text
Source = TextBox2.Text
If Directory.Exists(Destination) = True Then
If MessageBox.Show("Le répertoire destination existe déjà : voulez-vous l'effacer ?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = DialogResult.No Then
Exit Sub
Else
Directory.Delete(Destination, True)
End If
End If
CopieCpier = 0
CopyDir(New DirectoryInfo(Source), New DirectoryInfo(Destination))
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Label1.Text = CopieCpier.ToString
End Sub
Private Sub BackgroundWorker2_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker2.RunWorkerCompleted
MessageBox.Show("copie terminée")
Label1.Text = CopieCpier.ToString
Timer2.Stop()
End Sub
#End Region
End Class

cela fonctionne très bien dans le Label1 le nombre de fichier copier s'afficher (Chaque fois qu'un fichier est copier la valeur du Label1 augment de 1
j'aurais bien aimer qu'au lieu d'afficher le nombre du fichier copier, on affiche la taille copier, j'ai beau essayé mais j'arrive pas, tu n'a pas une idée?
Commenter la réponse de Karin.code
cs_Le Pivert 5505 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention - 18 nov. 2016 à 13:31
0
Merci
Une petite recherche sur Google t'aurait permis de le trouver:

https://msdn.microsoft.com/fr-fr/library/99h600fc(v=vs.100).aspx
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 18 nov. 2016 à 14:24
Salut cs_Le Pivert
Merci pour ta réponse
Pour moi il y a pas de déférence, j'explique :
quand j'utilise
CopieCpier = CopieCpier + 1

il compte le nombre de fichier Déjà copier
quand j'utilise
 CopieCpier = oFichier.Length

il donne la taille des fichiers après qu'il soit copier ( la taille finale)
ce que je voulais c'est d'avoir la taille qui progresse en même temps que le fichier copier
par exemple si on copie un fichier de taille 780 Mo, le fichier ne sera pas copier dans une seconde il va prendre du temps c-à-d commence avec 0 octets -> 50 Ko -> 32 Mo -> 521 Mo -> ... -> enfin 780 Mo
ce que je veux que cette progression s'affiche dans un label si c'est possible bien sûr
j'espère que j'ai bien expliqué
cs_Le Pivert 5505 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention > Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 18 nov. 2016 à 15:12
Quand un fichier est lourd, un message s'ouvre et t'indique la progression de la copie. C'est dans Windows. Donc je ne vois pas l'utilité d'en mettre un en plus!
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention > cs_Le Pivert 5505 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention - 18 nov. 2016 à 16:05
non aucun message indiquant la progression de la copie s'ouvre je viens de vérifier j'ai essayé de copier un fichier Rar lourd d'une taille 15.3 Go et aucun message ne s'affiche
c'est ça l'utilité de ce code, c'est une méthode furtive
cs_Le Pivert 5505 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention > Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 18 nov. 2016 à 16:25
A ce moment là il faut changer de méthode de copie pour avoir cette option. Comme tu l'indiques, c'est une méthode furtive. Donc quand c'est furtif, c'est caché, donc pas de message.
C'est au choix avoir un message ou pas de message.

Voici une méthode où tu auras un message sans traitement lourd qui va ralentir la progression de la copie.

https://msdn.microsoft.com/fr-fr/library/ms127963(v=vs.110).aspx
Commenter la réponse de cs_Le Pivert
vb95 1696 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention - 18 nov. 2016 à 16:24
0
Merci
Bonjour Karin.code et cs_Le Pivert
La demande de Karin.code est possible mais lourde à mettre en œuvre
1)On ne profiterait plus de la copie en "Parallel" qui permet au processeur de copier plusieurs fichiers en même temps dans des threads différents .
2) De plus pour la copie d'un gros fichier ( dixit Karin.code) il faudrait gérer un flux de lecture et un flux d'écriture :je prends un bout du fichier source , je le mets dans le flux de lecture, je copie ce flux de lecture dans le flux d'écriture et ce flux d'écriture est ajouté au contenu du fichier . Une fois là j'affiche la taille copiée ( par un Delegate si le copie se passe en BackGround) et je boucle jusqu'à la fin du fichier . et tout cela à répéter pour chaque fichier ( si le fichier est petit je lis tout le fichier en une seuls fois)
Je l'ai fait dans un projet mais pour une toute autre approche : le flux de lecture était remplacé par la lecture du contenu des secteurs du disque dur ( voir http://codes-sources.commentcamarche.net/source/100338-acces-direct-disques-et-partitions-vb-net) et j'en faisais un fichier exploitable
3) L'implantation de cette possibilité ralentirait ton programme à coup sûr
4)Pourquoi réinventer ce que Windows sait faire et de faire du similaire encore plus compliqué ?
La question à de poser est : "Est-ce que cela vaut le coup ?
Ce n'est que mon humble avis
Au plaisir de vous lire
cs_Le Pivert 5505 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention - 18 nov. 2016 à 16:29
Tout à fait d'accord avec toi VB95
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 18 nov. 2016 à 16:34
Salut vb95
Merci pour ta réponse
Est-ce que cela vaut le coup ?
je vais répondre à ta question
cela ne vaut pas le coup
si il ralentit la copie des fichier c'est inutile, je voulais juste améliorer l'apparence du logiciel
dans cette application je préfère choisir la rapidité et la qualité au lieu de l'apparence
vb95 et cs_Le Pivert merci pour votre aide
vb95 1696 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 novembre 2018 Dernière intervention > Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 18 nov. 2016 à 16:39
Choix qui me paraît plus que raisonnable !
Au plaisir
Commenter la réponse de vb95

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.