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
|
Private Sub Bgw_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles Bgw.DoWork
Try
'' la requête pour récupérer la taille du fichier
Dim dlReq As FtpWebRequest = CType(WebRequest.Create("ftp://x.x.x.x//folder/sub/distantFile.bin"), FtpWebRequest)
dlReq.Credentials = New NetworkCredential("user", "pass")
dlReq.Method = WebRequestMethods.Ftp.GetFileSize
Dim response As FtpWebResponse = DirectCast(dlReq.GetResponse(), FtpWebResponse)
Dim fileSize = response.ContentLength
'' la requête pour télécharger le fichier
dlReq = CType(WebRequest.Create("ftp://x.x.x.x//folder/sub/distantFile.bin"), FtpWebRequest)
dlReq.Credentials = New NetworkCredential("user", "pass")
dlReq.Method = WebRequestMethods.Ftp.DownloadFile
Dim dlResp As FtpWebResponse = DirectCast(dlReq.GetResponse(), FtpWebResponse)
Dim dlFile As Stream = dlResp.GetResponseStream()
Using localFile As New FileStream("C:\tmp\localFile.bin", FileMode.Create)
Dim Length As Integer = 2048
Dim buffer As Byte() = New Byte(Length - 1) {}
Dim bytesRead As Integer = dlFile.Read(buffer, 0, Length)
Dim bytes As Integer = 0
Dim totalBytesRead As Long = bytesRead
While bytesRead > 0
localFile.Write(buffer, 0, bytesRead)
Bgw.ReportProgress(CInt(totalBytesRead * 100 / fileSize), fileSize)
bytesRead = dlFile.Read(buffer, 0, Length)
totalBytesRead += bytesRead
End While
End Using
'On vérifie que le fichier téléchargé existe et qu'il pèse le bon poids.
e.Result = Tuple.Create(File.Exists("C:\tmp\localFile.bin") AndAlso New FileInfo("C:\tmp\localFile.bin").Length = fileSize, "Opération réussie")
Catch ex As Exception
e.Result = Tuple.Create(False, "Echec de l'opération : " & vbNewLine & ex.ToString)
End Try
End Sub |
Partager