IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Interrompre un téléchargement FTP


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 16
    Par défaut Interrompre un téléchargement FTP
    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

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 16
    Par défaut
    C'est bon j'ai trouvé en fin de compte, il faut juste fermer responsestream et filstream lorsque arret = true

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Juste pour info, il ne faut surtout pas hésiter à utiliser les USING.

    Ca permet de libérer automatiquement les ressources et de tout fermer une fois qu'on sort du bloc (END USING), ce qui évite ce genre d'oubli
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/05/2007, 17h41
  2. Téléchargement ftp par partie
    Par PP(Team) dans le forum C++
    Réponses: 5
    Dernier message: 25/04/2007, 09h36
  3. Problème lors du téléchargement FTP avec FTPClient
    Par Shuret dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 12/04/2007, 16h16
  4. [Windows 2000 server] Téléchargement FTP impossible sous IE6
    Par o151181 dans le forum Windows Serveur
    Réponses: 6
    Dernier message: 24/11/2004, 18h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo