Bonjour, dans le cadre d'une copie de fichier, je voudrais créer un pourcentage qui montre l'avancement de la copie du fichier. Quelqu'un peut-il m'aider ?
merci
Version imprimable
Bonjour, dans le cadre d'une copie de fichier, je voudrais créer un pourcentage qui montre l'avancement de la copie du fichier. Quelqu'un peut-il m'aider ?
merci
Celà dépend du traitement que tu effectue pour la copie du fichier
comment procedes-tu ?
J'utilise un petite fonction :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Public Function aa() Dim fi As New FileInfo("E:\Emule\Code lyoko\Saison 1\Code Lyoko - 01 - Teddygozilla.avi") Dim fs As FileStream = fi.OpenRead() Dim fia As New FileInfo("C:\Documents and Settings\DIEDLER\Mes documents\pa.avi") Dim fsa As FileStream = fia.OpenWrite() Dim nBytes As Integer = 100000 Dim ByteArray(nBytes) As Byte Dim nBytesRead As Integer = 0 Do nBytesRead = fs.Read(ByteArray, 0, nBytes) Try fsa.Write(ByteArray, 0, 100000) Catch ex As Exception MsgBox(ex.ToString) End Try Loop While Not nBytesRead < 100000 fia.close fsa.close Return nBytesRead End Function 'Main
Perso, j'ai pour habitude de faire ce type de traitement dans une Classe à part
Par exemple ici une Classe FileManager qui proposerait une méthode telle que
J'ajouterai aussi une petite classe dérivée de System.EventArgs pour transmettre des paramètres lors du démarrage du traitementCode:Public Function GetBytesFromFile(ByVal filePath, ByVal nLength as Integer) As Byte()
Exemple
Ensuite je manipulerai plusieurs evenement grâce à des déléguésCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Public Class ProgressStartingEventArgs Inherits System.EventArgs Private length as Integer Private steps As Double Public ReadOnly Property FullLength() As Integer Get Return Me.length End Get End Property Public ReadOnly Property StepsCount() As Double Get Return Me.steps End Get End Property Public Sub New(ByVal maxByteLength As Integer, ByVal count As Double) MyBase.New() Me.length = maxByteLength Me.steps = count End Sub End Class
Soit basiquement
Puis dans ma classe FileManager, je déclare les 3 evènementsCode:
1
2
3 Public Delegate Sub ProgressStartingEventHandler(ByVal sender As Object, ByVal e As ProgressStartingEventArgs) Public Delegate Sub ProgressStepingEventHandler() Public Delegate Sub ProgressEndedEventHandler()
Maintenant dans la méthode GetBytesFromFile il suffira de declencher au moment opportun ces differents evenementsCode:
1
2
3 Public Event ProgressStarting As StartProgressEventHandler Public Event ProgressSteping As ProgressStepingEventHandler Public Event ProgressEnded As ProgressEndedEventHandler
Exemple
L'utilsation graphique dans la Form sera de récupérer simplement ses evenements et de les utiliser pour le paramétrage du Progressbar et sa gestionCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Public Function GetBytesFromFile(ByVal filePath, ByVal nLength as Integer) As Byte() '... 'declencher le Départ du traitement Dim length As Integer = CInt(fs.Length) Dim steps As Double = length/nlength Dim e As New ProgressStartingEventArgs(length, steps) RaiseEvent ProgressStarting(Me, e) '... 'declencher l'evenement à chaque boucle RaiseEvent ProgressStarting() '... 'declencher l'évenement de fin de traitement RaiseEvent ProgressEnded () '... End Function
Code:
1
2
3
4
5
6
7
8
9
10
11 Private WithEvents MyFileManager As New FileManager Public Sub MyFileManager_ProgressStarting(ByVal sender As Object, ByVal e As ProgressStartingEventArgs) Handles MyFileManager.ProgressStarting 'paramétrer le progressbar à l'aide de e.FullLength et e.StepsCount End Sub Public Sub MyFileManager_ProgressSteping() Handles MyFileManager.ProgressSteping 'par exemple MonProgressBar.PerformStep End Sub Public Sub MyFileManager_ProgressEnded() Handles MyFileManager.ProgressEnded traiter la progression terminée End Sub
merci bcp :) :)