Bonjour a tous,

J'aimerais savoir comment interrompre proprement un download ou upload d'un serveur FTP via vb.et

Voilà mon code pour le téléchargement :

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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
 
Imports System.IO
Imports System.Net
Imports System.Text
Public Class DownloadFTP
 
    Shared Sub downloadFichier(ByVal strUrlFichier As String, _
                                ByVal strCheminDestinationFichier As String, _
                                ByVal identifiant As String, _
                                ByVal motDePasse As String)
        ' strUrlFichier : Uri du fichier sur le serveur FTP
        ' strCheminDestinationFichier : Uri du fichier sur le disque dur
        ' identifiant : login du compte FTP utilisé
        ' motDePasse : mot de passe du compte FTP utilisé
        ' Instanciation de deux Uri qui vont contenir les chemins source et destination
 
        Dim monUriFichier As New System.Uri(strUrlFichier)
        Dim monUriDestinationFichier As New System.Uri(strCheminDestinationFichier)
        ' Vérification de la validité de l'Uri du fichier sur le serveur FTP
        If Not (monUriFichier.Scheme = Uri.UriSchemeFtp) Then
            MessageBox.Show("L'Uri du fichier sur le serveur FTP n'est pas valide", _
                            "Une erreur est surevnue", MessageBoxButtons.OK, MessageBoxIcon.Warning)
            ' Si Uri non valide, arrêt du téléchargement
            Exit Sub
        End If
        ' Vérification de la validité de l'Uri de l'emplacement du fichier de destination
        If Not (monUriDestinationFichier.Scheme = Uri.UriSchemeFile) Then
            MessageBox.Show("Le chemin de destination n'est pas valide !", _
                            "Une erreur est surevnue", _
                            MessageBoxButtons.OK, MessageBoxIcon.Warning)
            ' Si Uri non valide, arrêt du téléchargement
            Exit Sub
        End If
        ' Création des 2 flux et du reader nécessaire pour la récupération du fichier
        Dim monResponseStream As Stream = Nothing
        Dim monFileStream As FileStream = Nothing
        Dim monReader As StreamReader = Nothing
 
 
        Try
            ' Requête demandant le fichier se trouvant sur le serveur FTP
            Dim downloadRequest As FtpWebRequest = CType(WebRequest.Create(monUriFichier), FtpWebRequest)
            ' Vérification de la présence des identifiants d'un compte, si aucun alors
            ' la connexion se fait en mode anonyme
            If Not identifiant.Length = 0 Then
                Dim monCompteFtp As New NetworkCredential(identifiant, motDePasse)
                downloadRequest.Credentials = monCompteFtp
            End If
            ' Flux de données issu du fichier sur le serveur FTP
            Dim downloadResponse As FtpWebResponse = CType(downloadRequest.GetResponse(), FtpWebResponse)
            monResponseStream = downloadResponse.GetResponseStream()
            ' Chemin de destination du fichier sur le disque dur
            Dim nomFichier As String = monUriDestinationFichier.LocalPath.ToString
            ' Création du fichier de destination sur le disque dur
            monFileStream = File.Create(nomFichier)
            ' Tableau d'octets qui va contenir les données issues du flux
            Dim monBuffer(1024) As Byte
            Dim octetsLus As Integer
            ' Lecture du buffer, puis écriture des données dans le fichier
            Dim stat As New FtpStatusCode
 
            If Form1.RdoFTPS.Checked = True Then
                downloadRequest.EnableSsl = True
 
            End If
 
            While (True)
                System.Windows.Forms.Application.DoEvents()
                If arret = True Then
                    MsgBox("Fin de la transaction")
                    octetsLus = 0
                    monBuffer = Nothing
                    downloadResponse.Close()
                    monFileStream.Close()
                    monResponseStream.Close()
                    downloadRequest = Nothing
                    monResponseStream.Dispose()
 
                    Exit Sub
 
                End If
 
                ' Lecture du flux
                octetsLus = monResponseStream.Read(monBuffer, 0, monBuffer.Length)
                Form1.ProgressBar1.Step = octetsLus
                Form1.ProgressBar1.Maximum = Form1.Grd1.Item(2, (Form1.Grd1.CurrentRow.Index)).Value.ToString
                Form1.ProgressBar1.PerformStep()
 
                If octetsLus = 0 Then
                    Exit While
                End If
                ' Ecriture dans le fichier
                monFileStream.Write(monBuffer, 0, octetsLus)
            End While
 
            MessageBox.Show("Téléchargement effectué.")
            ' Gestion des exceptions
 
        Catch ex As UriFormatException
            Form1.RichTextBox1.Text = Form1.RichTextBox1.Text & ex.Message & vbCrLf
        Catch ex As WebException
            Form1.RichTextBox1.Text = Form1.RichTextBox1.Text & ex.Message & vbCrLf
        Catch ex As IOException
            Form1.RichTextBox1.Text = Form1.RichTextBox1.Text & ex.Message & vbCrLf
        Finally
            If arret = True Then
                Form1.RichTextBox1.Text = Form1.RichTextBox1.Text & "Arrêt du transfert effectué" & vbCrLf
                Form1.ProgressBar1.Value = 0
 
            Else
 
                ' Fermeture du reader et des deux streams si nécessaire
                If monReader IsNot Nothing Then
                    monReader.Close()
                ElseIf monResponseStream IsNot Nothing Then
                    monResponseStream.Close()      '<-------- erreur ici
                End If
                ' Fermeture du flux et du fichier
                If monFileStream IsNot Nothing Then
                    monFileStream.Close()
                End If
            End If
        End Try
        Form1.ProgressBar1.Value = 0
    End Sub
 
End Class
Le pb c'est que lorsque ma variable arret se met a "true" lorsque j'essaye de re télécharger mon fichier il retourne une erreur comme quoi l'objet est en cours d'utilisation ou une erreur de traitement a la fin de mon code (monResponseStream.Close())

Si quelqu'un peut m'aider

PS: Dans mon programme principale j'utilise un objet FTP client, donc si vous préférez l'une des 2 méthodes pas de soucis