CLASS DE TÉLÉCHARGEMENT HTTP AVEC GESTION DE RESUME, GESTION DE PROXY, INFO DE P
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 2010
-
4 déc. 2004 à 19:16
blq
Messages postés97Date d'inscriptionvendredi 22 octobre 1999StatutMembreDernière intervention13 juin 2016
-
27 août 2010 à 20:43
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
blq
Messages postés97Date d'inscriptionvendredi 22 octobre 1999StatutMembreDernière intervention13 juin 20161 27 août 2010 à 20:43
Je veins de tester le programme sur Visual Studio 2010 (Express), la convertion fonctionne. Mais pour faire tourner la démonstration de la Classe, il faut effectuer quelques modifications dans l'utilisation du Thread, dont j'avoue ne pas connaitre en détail le fonctionnement du Threading. Il y a peu-être mieux que ce que je propose.
dans la partie déclarion de Form1, ajouter :
Delegate Sub SetDownStartCallback(ByVal totalfilele As Integer, ByVal resumepos As Integer, ByVal timestart As Integer)
Delegate Sub SetDownProgressCallback(ByVal actual_pos As Integer)
Delegate Sub SetDownEndCallback(ByVal actual_pos As Integer)
Dans la fonction download_start_dl, modifier "pgbar.Maximum =..." par :
If pgbar.InvokeRequired Then
Dim d As New SetDownStartCallback(AddressOf downloadz_start_dl)
Me.Invoke(d, New Object() {totalfilelen, resumepos, timestart})
Else
pgbar.Maximum = totalfilelen
End If
Dans la fonction downloadz_progress, modifier "pgbar.Value =..." par :
If pgbar.InvokeRequired Then
Dim d As New SetDownProgressCallback(AddressOf downloadz_progress)
Me.Invoke(d, New Object() {actual_pos})
Else
pgbar.Value = actual_pos
End If
Dans la fonction downloadz_end_dl, modifier "lblinfo.Text =..." par :
If pgbar.InvokeRequired Then
Dim d As New SetDownEndCallback(AddressOf downloadz_end_dl)
Me.Invoke(d, New Object() {actual_pos})
Else
lblinfo.Text = "Téléchargement effectué à " & curpercent & "% " & vbCrLf & vbCrLf & _
"Temps restant estimé : " & curremain & " secondes" & vbCrLf & vbCrLf & _
actual_pos & " sur " & lenfile & " octets téléchargés " & vbCrLf & vbCrLf & _
curko & " sur " & lenfileko & " kilo octets téléchargés " & vbCrLf & vbCrLf & _
tmpspeed & " Ko/sc"
End If
Suite à l'erreur de compilattion, mes modifications sont issues de la lecture des explications de l'aide Microsoft : http://msdn.microsoft.com/...
Smerek
Messages postés8Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention 5 septembre 2008 2 janv. 2008 à 21:45
Bonjour et bravo pour cette source qui me paraît très intéressante !
J'utilise Visual Studio 2003, n'ayaht pas les moyens de racheter une licence de VS2005,c'est pour cela que je post ici et non pas sur le topic consacré à la version .Net2
Je compte me servir de cette source pour faire du téléchargement de gros fichiers (plusieurs Go), et j'aurais voulu savoir si cette classe permettait de gérer les pseudos microcoupures que l'on voit très souvent en utilisant un téléchargement "traditionnel" (sans utiliser de logiciel de téléchargement), comme par exemple en téléchargement un gros fichier, le téléchargement ne plante pas mais le fichier est corrompu.
Merci d'avance pour votre/vos réponse.
Bonne année !
François.
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 20 mars 2007 à 21:10
ouais.. on va pas arreter le hs ici, mp moi si tu veux des tutos sur les regex ou pour exposer ton problème plus concrètement
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 20 mars 2007 à 00:43
Mon souci d'expressions régulières c'est déjà pour détecter les urls de vidéos dans une page web. J'ai posté une question pour ça auquel je n'ai pas encore eu de réponses psotivies mais c'est aussi pour savoir manipuler les expressions régulière car j'ai beau chercher des tutos ou regarder le MSDN etc... lorsque j'essaye de faire une expressions régulières en fonction des explications ca marche jamais !
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 19 mars 2007 à 17:58
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 19 mars 2007 à 17:55
c'est quoi ton soucis d'expressions régulières?
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 19 mars 2007 à 17:37
Moi je vais essayer ! A part ça toujours personne pour m'aider pour les expressions régulières !
Manu
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 13 mars 2007 à 17:29
lol un navigateur en vb...?
Je pense pas que ça serve à grand chose, il y a déja une excellente concurence... Firefox, Opéra et IE... nan? (oui j'ai oublié netscape volontairement ^^)
Puis si encore c'était dans un language portable, mais la c'est meme pas le cas...
Puis même si j'aime le fait de réinventer la roue dans un soucis d'apprentissage technique, la c'est un peu abusé quand même... mais si tu te lances dedans, je te souhaite bon courage!
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 13 mars 2007 à 16:56
derien HVB ;-)
Ca serait bien de travailler en équipe. Et dit moi ca te dit de faire un super naviguateur à 2 ?
Redman
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 13 mars 2007 à 12:44
OneHacker : j'avais plus miser sur le fonctionnement de la classe que des details du sample, mais tu as raison, merci de la remarque.
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 13 mars 2007 à 12:43
presque un an plus tard...
MoiDebutantVB : merci bcp de ta remarque totalement vraie... quelle connerie que de fixer le buffer à une aussi grande taille aussi...
Je suis en train de réecrire cette classe en .net2.0, car elle renvoit des évenement qui ne sont pas thread-safe, et m'est donc devenu inutile.
Je vais ajouter la nouvelle classe propre mais j'en profiterais pour regler cette petite stupidité du buffer sur la version actuelle.
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 5 nov. 2006 à 08:12
correction de form DL pour les 2 boutons ouvrir
Imports System.Net
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Code généré par le Concepteur Windows Form "
Public Sub New()
MyBase.New()
'Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()
'Ajoutez une initialisation quelconque après l'appel InitializeComponent()
End Sub
'La méthode substituée Dispose du formulaire pour nettoyer la liste des composants.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Requis par le Concepteur Windows Form
Private components As System.ComponentModel.IContainer
'REMARQUE : la procédure suivante est requise par le Concepteur Windows Form
'Elle peut être modifiée en utilisant le Concepteur Windows Form.
'Ne la modifiez pas en utilisant l'éditeur de code.
Friend WithEvents Button2 As System.Windows.Forms.Button
Friend WithEvents sfd As System.Windows.Forms.SaveFileDialog
Friend WithEvents Button3 As System.Windows.Forms.Button
Friend WithEvents Button4 As System.Windows.Forms.Button
Friend WithEvents Button5 As System.Windows.Forms.Button
Friend WithEvents ofd As System.Windows.Forms.OpenFileDialog
Friend WithEvents urltxt As System.Windows.Forms.Label
Friend WithEvents pgbar As System.Windows.Forms.ProgressBar
Friend WithEvents lblinfo As System.Windows.Forms.Label
Friend WithEvents CheckBox1 As System.Windows.Forms.CheckBox
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.pgbar = New System.Windows.Forms.ProgressBar
Me.lblinfo = New System.Windows.Forms.Label
Me.Button2 = New System.Windows.Forms.Button
Me.sfd = New System.Windows.Forms.SaveFileDialog
Me.Button3 = New System.Windows.Forms.Button
Me.Button4 = New System.Windows.Forms.Button
Me.Button5 = New System.Windows.Forms.Button
Me.ofd = New System.Windows.Forms.OpenFileDialog
Me.urltxt = New System.Windows.Forms.Label
Me.CheckBox1 = New System.Windows.Forms.CheckBox
Me.SuspendLayout()
'
'pgbar
'
Me.pgbar.Location = New System.Drawing.Point(8, 176)
Me.pgbar.Name = "pgbar"
Me.pgbar.Size = New System.Drawing.Size(408, 24)
Me.pgbar.TabIndex = 1
'
'lblinfo
'
Me.lblinfo.Location = New System.Drawing.Point(16, 48)
Me.lblinfo.Name = "lblinfo"
Me.lblinfo.Size = New System.Drawing.Size(400, 120)
Me.lblinfo.TabIndex = 2
'
'Button2
'
Me.Button2.Location = New System.Drawing.Point(320, 232)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(96, 24)
Me.Button2.TabIndex = 8
Me.Button2.Text = "Annuler"
'
'Button3
'
Me.Button3.Location = New System.Drawing.Point(8, 232)
Me.Button3.Name = "Button3"
Me.Button3.Size = New System.Drawing.Size(96, 24)
Me.Button3.TabIndex = 11
Me.Button3.Text = "Ouvrir"
'
'Button4
'
Me.Button4.Location = New System.Drawing.Point(112, 232)
Me.Button4.Name = "Button4"
Me.Button4.Size = New System.Drawing.Size(96, 24)
Me.Button4.TabIndex = 12
Me.Button4.Text = "Ouvrir le dossier"
'
'Button5
'
Me.Button5.Location = New System.Drawing.Point(216, 232)
Me.Button5.Name = "Button5"
Me.Button5.Size = New System.Drawing.Size(96, 24)
Me.Button5.TabIndex = 13
Me.Button5.Text = "Pause"
'
'urltxt
'
Me.urltxt.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.urltxt.Location = New System.Drawing.Point(16, 8)
Me.urltxt.Name = "urltxt"
Me.urltxt.Size = New System.Drawing.Size(392, 40)
Me.urltxt.TabIndex = 14
'
'CheckBox1
'
Me.CheckBox1.Location = New System.Drawing.Point(16, 208)
Me.CheckBox1.Name = "CheckBox1"
Me.CheckBox1.Size = New System.Drawing.Size(336, 16)
Me.CheckBox1.TabIndex = 15
Me.CheckBox1.Text = "Fermer la fenetre à la fin du téléchargement"
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(424, 261)
Me.Controls.Add(Me.CheckBox1)
Me.Controls.Add(Me.urltxt)
Me.Controls.Add(Me.Button5)
Me.Controls.Add(Me.Button4)
Me.Controls.Add(Me.Button3)
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.lblinfo)
Me.Controls.Add(Me.pgbar)
Me.Name = "Form1"
Me.Text = "Téléchargement"
Me.ResumeLayout(False)
End Sub
#End Region
Public WithEvents downloadz As New HBDownloader
Dim tmpspeed As Integer
Dim curremain As Integer
Dim oldsec As Integer
Dim cursec As Integer
Dim curko As Integer
Dim curpercent As Integer
Dim lenfileko As Integer
Dim starttime As Integer
Dim lenfile As Integer
Dim posresume As Integer
Dim filename As String
Dim pathstr As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
urltxt.Text = "Source : " & urlstr
If isresume = False Then
sfd.Filter = urlstr.Substring(urlstr.LastIndexOf(".") + 1) & "files|*." & urlstr.Substring(urlstr.LastIndexOf(".") + 1)
sfd.ShowDialog()
If sfd.FileName <> "" Then
pathstr = sfd.FileName
filename = pathstr.Substring(pathstr.LastIndexOf("") + 1)
If IO.File.Exists(pathstr) = True Then IO.File.Delete(pathstr)
downloadz.start(pathstr, urlstr, isresume)
Else
End
End If
Else
ofd.Filter = urlstr.Substring(urlstr.LastIndexOf(".") + 1) & "files|*." & urlstr.Substring(urlstr.LastIndexOf(".") + 1)
ofd.ShowDialog()
If ofd.FileName <> "" Then
pathstr = ofd.FileName
filename = pathstr.Substring(pathstr.LastIndexOf("") + 1)
downloadz.start(pathstr, urlstr, isresume)
Else
End
End If
End If
Button3.Enabled = False
Button4.Enabled = False
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Diagnostics.Process.Start(pathstr)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
downloadz.stop_dl()
End
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
If Button5.Text = "Pause" Then
downloadz.stop_dl()
Button5.Text = "Reprise"
Button4.Enabled = True
Else
Button4.Enabled = False
isresume = True
Button5.Text = "Pause"
downloadz.start(pathstr, urlstr, isresume)
End If
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Diagnostics.Process.Start(New IO.FileInfo(pathstr).Directory.FullName)
End Sub
Private Sub downloadz_start_dl(ByVal totalfilelen As Integer, ByVal resumepos As Integer, ByVal timestart As Integer) Handles downloadz.start_dl
pgbar.Maximum = totalfilelen
starttime = timestart
lenfile = totalfilelen
posresume = resumepos
lenfileko = totalfilelen / 1024
oldsec = 0
cursec = 0
End Sub
Private Sub downloadz_progress(ByVal actual_pos As Integer) Handles downloadz.progress
pgbar.Value = actual_pos
curpercent = (actual_pos / lenfile * 100)
curko = actual_pos / 1024
Application.DoEvents()
cursec = ((Environment.TickCount - starttime) / 1000)
If oldsec < cursec Then
lblinfo.Text = "Téléchargement effectué à " & curpercent & "% " & vbCrLf & vbCrLf & _
"Temps restant estimé : " & curremain & " secondes" & vbCrLf & vbCrLf & _
actual_pos & " sur " & lenfile & " octets téléchargés " & vbCrLf & vbCrLf & _
curko & " sur " & lenfileko & " kilo octets téléchargés " & vbCrLf & vbCrLf & _
tmpspeed & " Ko/sc"
Me.Text = curpercent & "% de " & filename & " téléchargés"
oldsec = cursec
tmpspeed = ((actual_pos - posresume) / 1024) / cursec
curremain = (lenfileko - (actual_pos / 1024)) / tmpspeed
End If
End Sub
Private Sub downloadz_end_dl(ByVal actual_pos As Integer) Handles downloadz.end_dl
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 23 janv. 2006 à 09:22
effectivement, la gestion d'erreur laisse à desirer... il faudrait que je prenne le temps d'ammeliorer ça, et aussi un problème de debit sur les connexion très haut debit...mais en ce moment ce n'est pas facile au niveau du temps.
Merci pour les commentaires en tout cas.
cs_troll01
Messages postés2Date d'inscriptionsamedi 6 décembre 2003StatutMembreDernière intervention20 janvier 2006 20 janv. 2006 à 16:12
Bon apres un autre test il semblerai que cela fonctionne bien en fait désolé !!
Manque juste une gestion des exception notement en cas d'absence du fichier distant...
En tout cas merci pour cette solution !
cs_troll01
Messages postés2Date d'inscriptionsamedi 6 décembre 2003StatutMembreDernière intervention20 janvier 2006 20 janv. 2006 à 16:06
Sympa ce bout de code mais visiblement il change les fichiers... j'ai essayer de télécharger un fichier zip, le fichier est bien present sur le disque local mais le zip est corrompu...
Une idée?
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 4 déc. 2004 à 19:16
27 août 2010 à 20:43
dans la partie déclarion de Form1, ajouter :
Delegate Sub SetDownStartCallback(ByVal totalfilele As Integer, ByVal resumepos As Integer, ByVal timestart As Integer)
Delegate Sub SetDownProgressCallback(ByVal actual_pos As Integer)
Delegate Sub SetDownEndCallback(ByVal actual_pos As Integer)
Dans la fonction download_start_dl, modifier "pgbar.Maximum =..." par :
If pgbar.InvokeRequired Then
Dim d As New SetDownStartCallback(AddressOf downloadz_start_dl)
Me.Invoke(d, New Object() {totalfilelen, resumepos, timestart})
Else
pgbar.Maximum = totalfilelen
End If
Dans la fonction downloadz_progress, modifier "pgbar.Value =..." par :
If pgbar.InvokeRequired Then
Dim d As New SetDownProgressCallback(AddressOf downloadz_progress)
Me.Invoke(d, New Object() {actual_pos})
Else
pgbar.Value = actual_pos
End If
Dans la fonction downloadz_end_dl, modifier "lblinfo.Text =..." par :
If pgbar.InvokeRequired Then
Dim d As New SetDownEndCallback(AddressOf downloadz_end_dl)
Me.Invoke(d, New Object() {actual_pos})
Else
lblinfo.Text = "Téléchargement effectué à " & curpercent & "% " & vbCrLf & vbCrLf & _
"Temps restant estimé : " & curremain & " secondes" & vbCrLf & vbCrLf & _
actual_pos & " sur " & lenfile & " octets téléchargés " & vbCrLf & vbCrLf & _
curko & " sur " & lenfileko & " kilo octets téléchargés " & vbCrLf & vbCrLf & _
tmpspeed & " Ko/sc"
End If
Suite à l'erreur de compilattion, mes modifications sont issues de la lecture des explications de l'aide Microsoft : http://msdn.microsoft.com/...
2 janv. 2008 à 21:45
J'utilise Visual Studio 2003, n'ayaht pas les moyens de racheter une licence de VS2005,c'est pour cela que je post ici et non pas sur le topic consacré à la version .Net2
Je compte me servir de cette source pour faire du téléchargement de gros fichiers (plusieurs Go), et j'aurais voulu savoir si cette classe permettait de gérer les pseudos microcoupures que l'on voit très souvent en utilisant un téléchargement "traditionnel" (sans utiliser de logiciel de téléchargement), comme par exemple en téléchargement un gros fichier, le téléchargement ne plante pas mais le fichier est corrompu.
Merci d'avance pour votre/vos réponse.
Bonne année !
François.
20 mars 2007 à 21:10
20 mars 2007 à 00:43
19 mars 2007 à 17:58
http://www.vbfrance.com/code.aspx?ID=41850
19 mars 2007 à 17:55
19 mars 2007 à 17:37
Manu
13 mars 2007 à 17:29
Je pense pas que ça serve à grand chose, il y a déja une excellente concurence... Firefox, Opéra et IE... nan? (oui j'ai oublié netscape volontairement ^^)
Puis si encore c'était dans un language portable, mais la c'est meme pas le cas...
Puis même si j'aime le fait de réinventer la roue dans un soucis d'apprentissage technique, la c'est un peu abusé quand même... mais si tu te lances dedans, je te souhaite bon courage!
13 mars 2007 à 16:56
Ca serait bien de travailler en équipe. Et dit moi ca te dit de faire un super naviguateur à 2 ?
Redman
13 mars 2007 à 12:44
13 mars 2007 à 12:43
MoiDebutantVB : merci bcp de ta remarque totalement vraie... quelle connerie que de fixer le buffer à une aussi grande taille aussi...
Je suis en train de réecrire cette classe en .net2.0, car elle renvoit des évenement qui ne sont pas thread-safe, et m'est donc devenu inutile.
Je vais ajouter la nouvelle classe propre mais j'en profiterais pour regler cette petite stupidité du buffer sur la version actuelle.
5 nov. 2006 à 08:12
Imports System.Net
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Code généré par le Concepteur Windows Form "
Public Sub New()
MyBase.New()
'Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()
'Ajoutez une initialisation quelconque après l'appel InitializeComponent()
End Sub
'La méthode substituée Dispose du formulaire pour nettoyer la liste des composants.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Requis par le Concepteur Windows Form
Private components As System.ComponentModel.IContainer
'REMARQUE : la procédure suivante est requise par le Concepteur Windows Form
'Elle peut être modifiée en utilisant le Concepteur Windows Form.
'Ne la modifiez pas en utilisant l'éditeur de code.
Friend WithEvents Button2 As System.Windows.Forms.Button
Friend WithEvents sfd As System.Windows.Forms.SaveFileDialog
Friend WithEvents Button3 As System.Windows.Forms.Button
Friend WithEvents Button4 As System.Windows.Forms.Button
Friend WithEvents Button5 As System.Windows.Forms.Button
Friend WithEvents ofd As System.Windows.Forms.OpenFileDialog
Friend WithEvents urltxt As System.Windows.Forms.Label
Friend WithEvents pgbar As System.Windows.Forms.ProgressBar
Friend WithEvents lblinfo As System.Windows.Forms.Label
Friend WithEvents CheckBox1 As System.Windows.Forms.CheckBox
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.pgbar = New System.Windows.Forms.ProgressBar
Me.lblinfo = New System.Windows.Forms.Label
Me.Button2 = New System.Windows.Forms.Button
Me.sfd = New System.Windows.Forms.SaveFileDialog
Me.Button3 = New System.Windows.Forms.Button
Me.Button4 = New System.Windows.Forms.Button
Me.Button5 = New System.Windows.Forms.Button
Me.ofd = New System.Windows.Forms.OpenFileDialog
Me.urltxt = New System.Windows.Forms.Label
Me.CheckBox1 = New System.Windows.Forms.CheckBox
Me.SuspendLayout()
'
'pgbar
'
Me.pgbar.Location = New System.Drawing.Point(8, 176)
Me.pgbar.Name = "pgbar"
Me.pgbar.Size = New System.Drawing.Size(408, 24)
Me.pgbar.TabIndex = 1
'
'lblinfo
'
Me.lblinfo.Location = New System.Drawing.Point(16, 48)
Me.lblinfo.Name = "lblinfo"
Me.lblinfo.Size = New System.Drawing.Size(400, 120)
Me.lblinfo.TabIndex = 2
'
'Button2
'
Me.Button2.Location = New System.Drawing.Point(320, 232)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(96, 24)
Me.Button2.TabIndex = 8
Me.Button2.Text = "Annuler"
'
'Button3
'
Me.Button3.Location = New System.Drawing.Point(8, 232)
Me.Button3.Name = "Button3"
Me.Button3.Size = New System.Drawing.Size(96, 24)
Me.Button3.TabIndex = 11
Me.Button3.Text = "Ouvrir"
'
'Button4
'
Me.Button4.Location = New System.Drawing.Point(112, 232)
Me.Button4.Name = "Button4"
Me.Button4.Size = New System.Drawing.Size(96, 24)
Me.Button4.TabIndex = 12
Me.Button4.Text = "Ouvrir le dossier"
'
'Button5
'
Me.Button5.Location = New System.Drawing.Point(216, 232)
Me.Button5.Name = "Button5"
Me.Button5.Size = New System.Drawing.Size(96, 24)
Me.Button5.TabIndex = 13
Me.Button5.Text = "Pause"
'
'urltxt
'
Me.urltxt.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.urltxt.Location = New System.Drawing.Point(16, 8)
Me.urltxt.Name = "urltxt"
Me.urltxt.Size = New System.Drawing.Size(392, 40)
Me.urltxt.TabIndex = 14
'
'CheckBox1
'
Me.CheckBox1.Location = New System.Drawing.Point(16, 208)
Me.CheckBox1.Name = "CheckBox1"
Me.CheckBox1.Size = New System.Drawing.Size(336, 16)
Me.CheckBox1.TabIndex = 15
Me.CheckBox1.Text = "Fermer la fenetre à la fin du téléchargement"
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(424, 261)
Me.Controls.Add(Me.CheckBox1)
Me.Controls.Add(Me.urltxt)
Me.Controls.Add(Me.Button5)
Me.Controls.Add(Me.Button4)
Me.Controls.Add(Me.Button3)
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.lblinfo)
Me.Controls.Add(Me.pgbar)
Me.Name = "Form1"
Me.Text = "Téléchargement"
Me.ResumeLayout(False)
End Sub
#End Region
Public WithEvents downloadz As New HBDownloader
Dim tmpspeed As Integer
Dim curremain As Integer
Dim oldsec As Integer
Dim cursec As Integer
Dim curko As Integer
Dim curpercent As Integer
Dim lenfileko As Integer
Dim starttime As Integer
Dim lenfile As Integer
Dim posresume As Integer
Dim filename As String
Dim pathstr As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
urltxt.Text = "Source : " & urlstr
If isresume = False Then
sfd.Filter = urlstr.Substring(urlstr.LastIndexOf(".") + 1) & "files|*." & urlstr.Substring(urlstr.LastIndexOf(".") + 1)
sfd.ShowDialog()
If sfd.FileName <> "" Then
pathstr = sfd.FileName
filename = pathstr.Substring(pathstr.LastIndexOf("") + 1)
If IO.File.Exists(pathstr) = True Then IO.File.Delete(pathstr)
downloadz.start(pathstr, urlstr, isresume)
Else
End
End If
Else
ofd.Filter = urlstr.Substring(urlstr.LastIndexOf(".") + 1) & "files|*." & urlstr.Substring(urlstr.LastIndexOf(".") + 1)
ofd.ShowDialog()
If ofd.FileName <> "" Then
pathstr = ofd.FileName
filename = pathstr.Substring(pathstr.LastIndexOf("") + 1)
downloadz.start(pathstr, urlstr, isresume)
Else
End
End If
End If
Button3.Enabled = False
Button4.Enabled = False
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Diagnostics.Process.Start(pathstr)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
downloadz.stop_dl()
End
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
If Button5.Text = "Pause" Then
downloadz.stop_dl()
Button5.Text = "Reprise"
Button4.Enabled = True
Else
Button4.Enabled = False
isresume = True
Button5.Text = "Pause"
downloadz.start(pathstr, urlstr, isresume)
End If
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Diagnostics.Process.Start(New IO.FileInfo(pathstr).Directory.FullName)
End Sub
Private Sub downloadz_start_dl(ByVal totalfilelen As Integer, ByVal resumepos As Integer, ByVal timestart As Integer) Handles downloadz.start_dl
pgbar.Maximum = totalfilelen
starttime = timestart
lenfile = totalfilelen
posresume = resumepos
lenfileko = totalfilelen / 1024
oldsec = 0
cursec = 0
End Sub
Private Sub downloadz_progress(ByVal actual_pos As Integer) Handles downloadz.progress
pgbar.Value = actual_pos
curpercent = (actual_pos / lenfile * 100)
curko = actual_pos / 1024
Application.DoEvents()
cursec = ((Environment.TickCount - starttime) / 1000)
If oldsec < cursec Then
lblinfo.Text = "Téléchargement effectué à " & curpercent & "% " & vbCrLf & vbCrLf & _
"Temps restant estimé : " & curremain & " secondes" & vbCrLf & vbCrLf & _
actual_pos & " sur " & lenfile & " octets téléchargés " & vbCrLf & vbCrLf & _
curko & " sur " & lenfileko & " kilo octets téléchargés " & vbCrLf & vbCrLf & _
tmpspeed & " Ko/sc"
Me.Text = curpercent & "% de " & filename & " téléchargés"
oldsec = cursec
tmpspeed = ((actual_pos - posresume) / 1024) / cursec
curremain = (lenfileko - (actual_pos / 1024)) / tmpspeed
End If
End Sub
Private Sub downloadz_end_dl(ByVal actual_pos As Integer) Handles downloadz.end_dl
pgbar.Value = actual_pos
curpercent = (actual_pos / lenfile * 100)
curko = actual_pos / 1024
Application.DoEvents()
cursec = ((Environment.TickCount - starttime) / 1000)
Me.Text = curpercent & "% de " & filename & " téléchargés"
oldsec = cursec
tmpspeed = ((actual_pos - posresume) / 1024) / cursec
curremain = (lenfileko - (actual_pos / 1024)) / tmpspeed
lblinfo.Text = "Téléchargement effectué à " & curpercent & "% " & vbCrLf & vbCrLf & _
"Temps restant estimé : " & curremain & " secondes" & vbCrLf & vbCrLf & _
actual_pos & " sur " & lenfile & " octets téléchargés " & vbCrLf & vbCrLf & _
curko & " sur " & lenfileko & " kilo octets téléchargés " & vbCrLf & vbCrLf & _
tmpspeed & " Ko/sc"
Button2.Text = "Fermer"
If actual_pos = lenfile Then
MsgBox("Téléchargement terminés")
Button3.Enabled = True
Button4.Enabled = True
End If
End Sub
End Class
23 janv. 2006 à 09:22
Merci pour les commentaires en tout cas.
20 janv. 2006 à 16:12
Manque juste une gestion des exception notement en cas d'absence du fichier distant...
En tout cas merci pour cette solution !
20 janv. 2006 à 16:06
Une idée?
4 déc. 2004 à 19:16
8/10