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 :

Progressbar avec FTP


Sujet :

VB.NET

  1. #21
    Membre régulier
    Homme Profil pro
    Technical Team Leader
    Inscrit en
    Avril 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technical Team Leader
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 235
    Points : 105
    Points
    105
    Par défaut
    j'arrive pas peux tu m'aider a faire le code stp.

  2. #22
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par tijote Voir le message
    j'arrive pas peux tu m'aider a faire le code stp.
    J arrive pas, j arrive pas .....postes deja ce que tu tentes de faire pardie.....???!!
    .... et expose ton raisonnement que je puisse te mettre sur la bonne voie car avec ce que je t'ai expliqué précédemment ca devrait exclure pas mal de doutes sur le probleme en general....


    A+

  3. #23
    Membre régulier
    Homme Profil pro
    Technical Team Leader
    Inscrit en
    Avril 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technical Team Leader
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 235
    Points : 105
    Points
    105
    Par défaut
    voila 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
     
        Public Function downloadFTP(ByVal Cheminfile As String, ByVal URL As String, ByVal bk As String, ByVal pw As String, ByVal Er As String) As String
     
            Form1.ProgressBar1.Value = 0
            Form1.ProgressBar1.Visible = True
     
            Dim requ As FtpWebRequest
            Dim resp As FtpWebResponse
            Dim respStrm As Stream = Nothing
            Dim fileStrm As FileStream = Nothing
            Dim filename As String
     
            requ = CType(WebRequest.Create(URL), FtpWebRequest)
            requ.Credentials = New NetworkCredential(bk, pw)
            requ.Method = WebRequestMethods.Ftp.DownloadFile
     
            resp = CType(requ.GetResponse(), FtpWebResponse)
            respStrm = resp.GetResponseStream()
     
            filename = Path.GetFileName(requ.RequestUri.LocalPath)
     
            fileStrm = File.Create(Cheminfile & "\" & filename)
            Dim buff(1024) As Byte
            Dim bytesread As Integer = 0
     
            While (True)
                Try
                    bytesread = respStrm.Read(buff, 0, buff.Length)
                    If (bytesread = 0) Then Exit While
                    fileStrm.Write(buff, 0, bytesread)
                    Form1.bgw.ReportProgress((bytesread * 100) / buff.Length, "Téléchargement du fichier : " & filename)
     
                Catch ex As Exception
                    Er = ex.message
                    If respStrm IsNot Nothing Then respStrm.Close()
                    If fileStrm IsNot Nothing Then fileStrm.Close()
                End Try
            End While
     
            Er = "Download de "
     
            Form1.ProgressBar1.Visible = False
     
            Return Er
     
        End Function

  4. #24
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    [B]Bon j'ai bien fais de te demander ce que tu tentais de faire car de ce que je lis tu n'as pas compris l'utilisation du BGW puisque le corps de ta fonction appelante (downloadFTP) se situe à l’extérieur de ton gestionnaire d’événements "DoWork" !!!

    Je récapitule :

    Le BGW est un gestionnaire de type "Thread UI" (Tache d'arrière-plan + mise à jour Interface du logiciel).
    Tout le code suivant :
    - susceptible de geler ton interface à cause de longues opérations de traitements
    - susceptible de mettre à jour tes contrôles (listView, listbox, fonction dessin,...etc...)

    .....etc....

    doit être initié depuis le gestionnaire d'évènements "DoWork" (RunWorkerAsync). Donc le code est placé dans le corps de la Sub "DoWork".

    En revanche si tu dois mettre à jour un contrôle tu devras appeler le gestionnaire d’événements "ProgressChanged" (ReportProgress)

    Enfin le gestionnaire d’événements "RunWorkerCompleted" est l'aboutissement du thread initié au tout début, et dans cette Sub il est possible de récupérer une annulation, une erreur, un accomplissement du process sans problèmes rencontrés.

    Je ne te donnerais pas cette fois-ci de code tout fait.

    Désolé il faut y mettre un peu de ta personne, ce code copié/collé depuis la toile montre bien que tu n'as pas saisis le concept.

    Bonne continuation.


    A+

  5. #25
    Membre régulier
    Homme Profil pro
    Technical Team Leader
    Inscrit en
    Avril 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technical Team Leader
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 235
    Points : 105
    Points
    105
    Par défaut
    Ok merci bien pour ce que tu as fait jusqu’à maintenant.

    Je n'ai qu'une initiation de VB par ma boite... j'attend un prochain DIF pour continuer... je fais avec ce que j'ai appris, désoler mais le bgw je ne connaissais pas et comme je t'ais dit dans un message précédent je n'ai pas compris le fonctionnement, c'est pas faute de l'avoir dit...

    Aujourd'hui sincèrement je n'ai pas le temps pour me pencher dessus et m'y mettre a fond... j'ai d'autre souci à gérer pour m'y consacrer franchement et comprendre le fonctionnement complet de ce gestionnaire !!

    j'ai posté clairement sur le forum pour avoir de l'aide pour savoir comment remplir la progressbar, c'est clair que je ne m'attendais pas que le fonctionnement serait avec un thread // et je ne demande pas non plus d'être jugé ou autre... mais bon de nos jour c'est clair que c'est la société qui veux cela.

    merci bonne continuation de même

  6. #26
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Cela fait quelques réponse que je te soumet pour aboutir finalement sur de telles absurdités sur la société et que tu n'as pas le temps pour creuser le sujet !!!

    Quand qqun ne veut pas s'investir je ne vois pas pourquoi je continuerais à lui prêter main forte ! Dans la vie on n'a rien sans rien.


    Bonne continuation.


    PS : il n'existe pas que le BGW comme énoncé dans les précédentes réponses !

  7. #27
    Membre régulier
    Homme Profil pro
    Technical Team Leader
    Inscrit en
    Avril 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technical Team Leader
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 235
    Points : 105
    Points
    105
    Par défaut
    et oui je n'ai pas le temps pour le moment, une fois de plus tu es qui pour juger quelqu'un !!!! là il est 07h je suis au travail, je fini à 17h ensuite je passe mon temps tous les jours dans une association pour distribuer des repas que j’élabore juste avant avec plusieurs bénévoles… je rentre chez moi vers 21h30/22h… j’ai une femme et 4 enfants donc oui j’ai pas le temps… mais t’inquiète pas tu n’es pas tout seul à avoir ce genre de comportement c’est vrai que je si je me mettais à ton niveau, je me mettrais à juger les gens pour savoir s’il s’investisse dans leur vie pour mériter ce qu’on leur offre tous les jours. Aider, tu sais ce que sa veux dire toi…

  8. #28
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Il ne faut pas se mettre dans de tels états o_O
    On a tous nos obligations dans nos vies et je n'étalerais pas les miennes ce n'est pas le sujet !

    Il faut que tu comprennes que lorsque 2 individus ne parlent pas le même langage, qu il faut un moment ou un autre que l un des 2 fasse un effort afin de conserver un échange cohérent.
    En l'occurence tu demandes de l'aide et tu ne comprends pas de quoi je te parle alors.....faut il vraiment qu on débatte pour savoir qui pisse le plus loin....??

    Donc pour reformuler tout ca :

    De l'aide je suis toujours prêt a t'en donner mais lorsque tu pourras pleinement te consacrer au sujet que tu as créés et que tu seras en mesure de parler le même langage que ceux qui s'octroient un peu de leur temps libre dans leur journée de travail pour venir en aide, en toute modestie, à ceux qui le demande.

    Cdlt.

  9. #29
    Membre régulier
    Homme Profil pro
    Technical Team Leader
    Inscrit en
    Avril 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technical Team Leader
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 235
    Points : 105
    Points
    105
    Par défaut
    ok pas de problème et merci

  10. #30
    Membre régulier
    Homme Profil pro
    Technical Team Leader
    Inscrit en
    Avril 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technical Team Leader
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 235
    Points : 105
    Points
    105
    Par défaut
    voici le code que j'utilise pour faire un downlaod

    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
     
        Public Function downloadFTP(ByVal Cheminfile As String, ByVal URL As String, ByVal bk As String, ByVal pw As String, ByVal Er As String) As String
     
            Dim requ As FtpWebRequest = CType(WebRequest.Create(URL), FtpWebRequest)
            requ.Credentials = New NetworkCredential(bk, pw)
     
            requ.Method = WebRequestMethods.Ftp.DownloadFile
            Dim resp As FtpWebResponse = CType(requ.GetResponse(), FtpWebResponse)
     
            Dim respStrm As Stream = resp.GetResponseStream()
            Dim filename As String = Path.GetFileName(requ.RequestUri.LocalPath)
            Dim fileStrm As FileStream = File.Create(Cheminfile & "\" & filename)
     
            Dim buff(1024) As Byte
            Dim bytesread As Integer = 0
     
            While (True)
                Try
                    bytesread = respStrm.Read(buff, 0, buff.Length)
                    If (bytesread = 0) Then Exit While
                    fileStrm.Write(buff, 0, bytesread)
     
                Catch ex As Exception
                    Er = ex.Message
                    If respStrm IsNot Nothing Then respStrm.Close()
                    If fileStrm IsNot Nothing Then fileStrm.Close()
                    Return Er
                    Exit Function
                End Try
            End While
            respStrm.Close()
            fileStrm.Close()
            Er = "Download de "
     
            Return Er
     
        End Function
    ce code fonctionne parfaitement donc je vais le coupler avec le bgw, quoi essayer....

    donc
    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
     
        Dim Url As String = ""
        Dim Cheminfile As String = ""
        Dim Barmax As Integer
     
        Private Sub Label4_Click(sender As Object, e As EventArgs) Handles Label4.Click
            ProgressBar1.Value = 0
            Url = "ftp://xx.xx.xxx.x/monfichier.txt"
            Cheminfile = "C:\prog\"
            Barmax = 0
            bgwDown.RunWorkerAsync()
        End Sub
     
    Private Sub bgw_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bgwDown.DoWork
     
    '1) 1ère requette pour la récupereration de la taille du fichier
            Dim requ As FtpWebRequest = DirectCast(System.Net.FtpWebRequest.Create(Url), System.Net.FtpWebRequest)
            requ.Credentials = New NetworkCredential(user, mdp)
            requ.Method = WebRequestMethods.Ftp.GetFileSize
            Dim ftpResponse As System.Net.FtpWebResponse = DirectCast(requ.GetResponse(), FtpWebResponse)
            Barmax = CInt(ftpResponse.ContentLength)
     
            '2) 2ème requette pour la recuperation du fichier car sa plante sinon
            requ = DirectCast(System.Net.FtpWebRequest.Create(Url), System.Net.FtpWebRequest)
            requ.Credentials = New NetworkCredential(user, mdp)
            requ.Method = System.Net.WebRequestMethods.Ftp.DownloadFile
            Dim respStrm As Stream = ftpResponse.GetResponseStream()
            Dim filename As String = Path.GetFileName(requ.RequestUri.LocalPath)
            Dim fileStrm As FileStream = File.Create(Cheminfile & "\" & filename)
            While (True)
    		Bla bla..
                    bgwDown.ReportProgress(bla.., blaa.., "Hébergement du fichier : " & New FileInfo("YourFilePath").Name)
            End While
            respStrm.Close()
            fileStrm.Close()
            Er = "Download de "
     
            Return Er
        End Sub
     
       Private Sub BbgwDown_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bgwDown.ProgressChanged
            If Not e.ProgressPercentage > 100 Then
                ProgressBar1.Maximum = Barmax
                ProgressBar1.Value = e.ProgressPercentage
            End If
        End Sub
    Voilà en partie mon code je lance le traitement asynchrone par le biais d'un click, puis le dowork execute le traitement et le ProgressChangedEventArgs me rempli ma barre...

    est ce que je suis sur la bonne voie là.. par contre le processus principal lui continu ou attend que le 2cd processus soit finit...

    bon si c'est good je passe à la boucle..

    merci

  11. #31
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Salut tijote,

    Lorsque tu lances le BGW : bgwDown.RunWorkerAsync()
    Tu récupères obligatoirement l'accomplissement dans la Sub : bgwDown_RunWorkerCompleted

    Je veux dire par là que si tu inities le BGW tu dois obligatoirement récupérer la fin du processus à cet endroit : bgwDown_RunWorkerCompleted()
    ex :

    1- Tu grises des boutons : titi.enabled=false, toto.enabled=false,...etc...
    2- Tu lances le processus : BGW.RunWorkerAsync()
    3- Le processus est terminé : bgwDown_RunWorkerCompleted()
    4- Tu remets les controles à leur état initial : titi.enabled=true, toto.enabled=true,...etc... dans la Sub bgwDown_RunWorkerCompleted()


    A+

  12. #32
    Membre régulier
    Homme Profil pro
    Technical Team Leader
    Inscrit en
    Avril 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technical Team Leader
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 235
    Points : 105
    Points
    105
    Par défaut
    salut

    donc j'ai modifié le label en button et rajouté le bgwDown_RunWorkerCompleted

    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
     
        Dim Url As String = ""
        Dim Cheminfile As String = ""
        Dim Barmax As Integer
     
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Button2.Enabled = False
            ProgressBar1.Visible = True
            ProgressBar1.Value = 0
            Url = "ftp://xx.xx.xxx.x/monfichier.txt"
            Cheminfile = "C:\prog\"
            Barmax = 0
            If not bgwDown.isbusy then
                 bgwDown.RunWorkerAsync()
            End if
        End Sub
     
        Private Sub bgwDown_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bgwDown.DoWork
     
            Dim buffer(1024) As Byte
            Dim bytesSoFar As Long = 0
            Dim bytesread As Integer = 0
     
            '1) 1ère requette pour la récupereration de la taille du fichier
            Dim requ As FtpWebRequest = DirectCast(System.Net.FtpWebRequest.Create(Url), System.Net.FtpWebRequest)
            requ.Credentials = New NetworkCredential(user, mdp)
            requ.Method = WebRequestMethods.Ftp.GetFileSize
            Dim ftpResponse As System.Net.FtpWebResponse = DirectCast(requ.GetResponse(), FtpWebResponse)
            Barmax = CInt(ftpResponse.ContentLength / 1024)
     
            '2) 2ème requette pour la recuperation du fichier car sa plante sinon
            requ = DirectCast(System.Net.FtpWebRequest.Create(Url), System.Net.FtpWebRequest)
            requ.Credentials = New NetworkCredential(user, mdp)
            requ.Method = System.Net.WebRequestMethods.Ftp.DownloadFile
            ftpResponse = DirectCast(requ.GetResponse(), FtpWebResponse)
            Dim respStrm As Stream = ftpResponse.GetResponseStream()
            Dim filename As String = Path.GetFileName(requ.RequestUri.LocalPath)
            Dim fileStrm As FileStream = File.Create(Cheminfile & "\" & filename)
     
            bytesread = 1
            Do Until bytesread < 1
                If bytesread > 0 Then
                    bytesread = respStrm.Read(buffer, 0, 1024)
                    fileStrm.Write(buffer, 0, bytesread)
                    bgwDown.ReportProgress((bytesread * 100) / Barmax, "Hébergement du fichier : " & New FileInfo(filename).Name)
                End If
            Loop
     
            respStrm.Dispose()
            fileStrm.Dispose()
        End Sub
     
       Private Sub BbgwDown_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bgwDown.ProgressChanged
            If Not e.ProgressPercentage > 100 Then
                ProgressBar1.Maximum = Barmax
                ProgressBar1.Value = e.ProgressPercentage
            End If
        End Sub
     
       Private Sub bgwDown_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgwDown.RunWorkerCompleted
            Button2.Enabled = True
            ProgressBar1.Value = 0
            ProgressBar1.Visible = False
        End Sub
    je récupère bien le fichier mais la progressbar déconne, je n'arrive pas à l’incrémenter par rapport au tableau de byte

    voici une petit video

  13. #33
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Je regarderais en detail a la maison ce soir. Cependant juste une remarque :

    Avec ton code actuel quand tu cliques sur le bouton pour lancer ton BGW penses bien a verifier que le process ne soit pas deja en cours d execution au quel cas une erreur pourrait survenir ! Pour parer a ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If not bgwDown.isbusy then
        bgwDown.RunWorkerAsync()
    End if
    Il faut bien parcourir toutes les methodes disponibles pour un composant de la boite a outils.

    A+

  14. #34
    Membre régulier
    Homme Profil pro
    Technical Team Leader
    Inscrit en
    Avril 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technical Team Leader
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 235
    Points : 105
    Points
    105
    Par défaut
    ok très bien

  15. #35
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Voilà ce que ca donne avec les commentaires, j'espère que ca te permettra d'avancer dans ton projet :

    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
     
        Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
            Try
                'Identification 
                Dim reqFTP As FtpWebRequest
                reqFTP = DirectCast(FtpWebRequest.Create(New Uri("FTPURI")), FtpWebRequest)
                reqFTP.UseBinary = True
                reqFTP.Credentials = New NetworkCredential("USERNAME", "PASSWORD")
                'requête FTP.Méthode = DownloadFile
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile
                Dim respons As FtpWebResponse = DirectCast(reqFTP.GetResponse(), FtpWebResponse)
                'récupération de la taille de la requête = taille du fichier puisque c'est ce que tu demandes !
                Dim fileLength As Long = respons.ContentLength
                'On travaille avec le flux
                Using responseStream As IO.Stream = respons.GetResponseStream
                    ' On créé un fichier pour réceptionné les données copiées ainsi on peut quantifier ce qui est recu
                    Using fs As New IO.FileStream("C:\TempPathFile.exe", IO.FileMode.Create)
                        Dim buffer(2048) As Byte
                        Dim bytesread As Integer = 0
                        Dim bytesSoFar As Integer
                        Do
                            bytesread = responseStream.Read(buffer, 0, buffer.Length)
                            fs.Write(buffer, 0, bytesread)
                            bytesSoFar += bytesread
                            BackgroundWorker1.ReportProgress((bytesSoFar * 100) / fileLength, "Téléchargement du fichier : ")
                        Loop Until bytesread = 0
                        responseStream.Close()
                        fs.Flush()
                        fs.Close()
                    End Using
                    responseStream.Close()
                End Using
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End Sub
    N'oublies pas de gérer l'annulation du process dans la boucle "do while" et la gestion du retour d'erreur d'annulation dans le "WorkerCompleted".

    PS : comme précédemment mentionné, je rappelle qu'il y a une méthode bien plus simple à l'aide de la classe WebClient mais tu voulais l'exemple avec le BGW donc c'est chose faite.


    A+

  16. #36
    Membre régulier
    Homme Profil pro
    Technical Team Leader
    Inscrit en
    Avril 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technical Team Leader
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 235
    Points : 105
    Points
    105
    Par défaut
    merci beaucoup pour ton aide, je vais regarder dès que j'arrive au boulot... et je te tiens au jus

  17. #37
    Membre régulier
    Homme Profil pro
    Technical Team Leader
    Inscrit en
    Avril 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technical Team Leader
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 235
    Points : 105
    Points
    105
    Par défaut
    j'ai une erreur sur le bgwDown.ProgressChanged



    fileLength = -1
    bytesread = 2049

    donc le calcul de bgwDown.ReportProgress((bytesSoFar * 100) / fileLength, "Téléchargement du fichier : ") = -204900

  18. #38
    Membre régulier
    Homme Profil pro
    Technical Team Leader
    Inscrit en
    Avril 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technical Team Leader
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 235
    Points : 105
    Points
    105
    Par défaut
    je récupère en 1er la taille avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    
                '1) 1ère requette pour la récupereration de la taille du fichier
                Dim requ As FtpWebRequest = DirectCast(System.Net.FtpWebRequest.Create(Url), System.Net.FtpWebRequest)
                requ.Credentials = New NetworkCredential(user, mdp)
                requ.Method = WebRequestMethods.Ftp.GetFileSize
                Dim ftpResponse As System.Net.FtpWebResponse = DirectCast(requ.GetResponse(), FtpWebResponse)
                Dim fileLength As Long = ftpResponse.ContentLength
    la ça fonctionne

  19. #39
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Tu n as pas besoin d etablir une autre requete pour obtenir la taille du fichier !
    C est ainsi que tu la recuperes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim fileLength As Long = respons.ContentLength
    Le snippet provient d un projet que j ai specialement concocté pour illustrer ton exemple. Il fonctionne tres bien puisque je l ai debogué avant de poster.

    Je te poste le projet en arrivant ce soir a la maison.

    A+

  20. #40
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Voilà le code de l'exemple complet avec la gestion d'erreur à la sortie du Thread :

    Ce projet de type "Windows Form" nécessite :

    - 1 formulaire (nommé Form1 par défaut)
    - 1 Progressbar (nommée Progressbar1 par défaut)
    - 1 backgroundWorker (nommé backgroundWorker1 puis paramétré avec la propriété "WorkerReportsProgress=True")

    C'est tout !

    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
     
    Imports System.Net
    Imports System.IO
     
    Public Class Form1
     
        Private _ftpUri As String = ""
        Private _userName As String = ""
        Private _password As String = ""
        Private _OutputFilePath As String = ""
     
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            If Not BackgroundWorker1.IsBusy Then
                BackgroundWorker1.RunWorkerAsync()
            End If
        End Sub
     
        Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
            Try
                'Identification 
                Dim reqFTP As FtpWebRequest
                reqFTP = DirectCast(FtpWebRequest.Create(New Uri(_ftpUri)), FtpWebRequest)
                reqFTP.UseBinary = True
                reqFTP.Credentials = New NetworkCredential(_userName, _password)
                'requête FTP.Méthode = DownloadFile
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile
                Dim respons As FtpWebResponse = DirectCast(reqFTP.GetResponse(), FtpWebResponse)
                'récupération de la taille de la requête = taille du fichier puisque c'est ce que tu demandes !
                Dim fileLength As Long = respons.ContentLength
                'On travaille avec le flux
                Using responseStream As IO.Stream = respons.GetResponseStream
                    ' On créé un fichier pour réceptionné les données copiées ainsi on peut quantifier ce qui est recu
                    Using fs As New IO.FileStream(_OutputFilePath, IO.FileMode.Create)
                        Dim buffer(2048) As Byte
                        Dim read As Integer = 0
                        Dim count As Integer
                        Do
                            read = responseStream.Read(buffer, 0, buffer.Length)
                            fs.Write(buffer, 0, read)
                            count += read
                            BackgroundWorker1.ReportProgress((count * 100) / fileLength, "Téléchargement du fichier : ")
                        Loop Until read = 0
                        responseStream.Close()
                        fs.Flush()
                        fs.Close()
                    End Using
                    responseStream.Close()
                End Using
                e.Result = "Completed"
            Catch ex As Exception
                e.Result = New Exception("Error", ex)
            End Try
        End Sub
     
        Private Sub BackgroundWorker1_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
            If Not e.ProgressPercentage > 100 Then
                Me.ProgressBar1.Value = e.ProgressPercentage
                Me.Text = e.UserState.ToString
            End If
        End Sub
     
        Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
            If e.Cancelled Then
                MsgBox("Processus annulé !")
            Else
                If TryCast(e.Result, Exception).Message = "Error" Then
                    MessageBox.Show("Une erreur est survenue ! " & vbNewLine & TryCast(e.Result, Exception).InnerException.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
                ElseIf e.Result.ToString = "Completed" Then
                    MessageBox.Show("Téléchargement terminé !", "Fin", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End If
            End If
        End Sub
     
    End Class
    A+

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Problème avec FTP
    Par sebairo dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 26/07/2006, 13h09
  2. Configuration des droits pour samba avec ftp et www
    Par Alkmie dans le forum Réseau
    Réponses: 2
    Dernier message: 07/11/2004, 14h50
  3. ProgressBar avec plusieurs procédures
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 08/09/2002, 19h03

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