Bonjour,

Je suis actuellement en stage et je dois télécharger un fichier d'un serveur ftp. Ma fonction fonctionne cependant, je dois faire la gestion d'évenement : Downloading et Download completed. Ainsi via une progressbar j'aurai l'avancement de mon téléchargment. J'ai essayé de gérer mais ces évènements mais ceci ne fonctionne pas du tout . Voici mon code:

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
 
Public Class FtpManager
 
 
    'Création d'un délegué
    Public Delegate Sub FileManagerEventHandler(ByVal sender As Object, ByVal e As FtpEventArgs)
    'Evènements
    Public Event Downloading As FileManagerEventHandler
    Public Event DownloadCompleted As FileManagerEventHandler
 
 
 
    Public Sub FtpDownload(ByVal user As String, ByVal password As String, ByVal source As String, ByVal cible As String)
        Dim uri As New Uri(source)
 
        Dim request As FtpWebRequest = DirectCast(WebRequest.Create(uri), FtpWebRequest)
        request.Credentials = New NetworkCredential(user, password)
        request.UseBinary = True
        request.Method = WebRequestMethods.Ftp.DownloadFile
        'Utilisé pour envoyer la commande "QUIT" au serveur afin de fermer correctement la connexion
        request.KeepAlive = False
 
        ' Variable de mesure de la taille du morceau de fichier lu. Permet d'indiquer que le fichier a été lu et écrit en totalité.
        ' Recupération de la réponse
        Dim res As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse)
        'fi = New FileInfo(String.Concat(source, uri.Segments(uri.Segments.Length - 1))
        Dim stream As Stream = (res.GetResponseStream())
        Dim writeStream As New FileStream(cible, FileMode.Create)
 
        ' Taille du tableau servant à stocker les morceaux du fichier.
        ' On épargne ainsi les ressources du serveur en ne chargeant pas la totalité du fichier.
        ' Cela permet de transférer rapidement des fichiers volumineux.
        Dim buffer As [Byte]() = New [Byte](2048) {}
        Dim bytesRead As Integer = stream.Read(buffer, 0, 2048)
        Dim test As New FileInfo(source)
        Dim totalByte As Double = test.Length
        Dim pourcentage As Double = 0
 
        While bytesRead > 0
            pourcentage = bytesRead / totalByte * 100
            Dim t As FtpEventArgs = New FtpEventArgs(pourcentage)
            If Not t Is Nothing Then
                RaiseEvent Downloading(Me, t)
            End If
            writeStream.Write(buffer, 0, bytesRead)
            bytesRead = stream.Read(buffer, 0, 2048)
        End While
        Dim e As FtpEventArgs = New FtpEventArgs("Download completed")
        If Not e Is Nothing Then
            RaiseEvent DownloadCompleted(Me, e)
        End If
        writeStream.Close()
        stream.Close()
 
 
    End Sub
 
End Class
 
Public Class FtpEventArgs
    Inherits EventArgs
 
    Private _pourcentage As Double
    Public Property POURCENTAGE() As Double
        Get
            Return _pourcentage
        End Get
        Set(ByVal value As Double)
            _pourcentage = value
        End Set
    End Property
 
    Public Sub New(ByVal theEventText As Double)
        POURCENTAGE = theEventText
    End Sub
 
    Public Sub completeDownload(ByVal pourcentage As String)
        If pourcentage.Contains("100%") Or pourcentage.Contains("Download Completed") Then
            MsgBox("Download Completed")
        End If
    End Sub
End Class
ps: je n'arrive pas non a avoir la taille du fichier que je télécharge

cordialement,
Kévin