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 |
Partager