回 帖 发 新 帖 刷新版面

主题:[原创]VB下载网上文件代码(有进度条显示)

'添加 internet transfer control 6.0 和 windows commom controls 6.0
'form代码:

Private Sub cmdGET_Click()
StartDownLoad txtURL
End Sub

Private Sub Form_Load()
savefile.Text = App.Path
End Sub

Private Sub StartDownLoad(ByVal Geturl As String)
Dim spo%, filename$
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(App.Path & "\download") Then Set f = fso.CreateFolder(App.Path & "\download")
spo = InStrRev(Geturl, "/")
filename = Right(Geturl, Len(Geturl) - spo) '获取文件名
savefile.Text = App.Path & "\download\" & filename
Inet1.Execute Geturl, "get"   '开始下载
End Sub

Private Sub Inet1_StateChanged(ByVal State As Integer)
   'State = 12 时,用 GetChunk 方法检索服务器的响应。
   Dim vtData() As Byte
   Select Case State
   '...没有列举其它情况。
   Case icError '11
      '出现错误时,返回 ResponseCode 和 ResponseInfo。
      vtData = Inet1.ResponseCode & ":" & Inet1.ResponseInfo
   Case icResponseCompleted ' 12
      Dim bDone As Boolean: bDone = False
      '取得第一个块。
      vtData() = Inet1.GetChunk(1024, 1)
      DoEvents
      Open savefile.Text For Binary Access Write As #1     '设置保存路径文件后开始保存
      '获取下载文件长度
      If Len(Inet1.GetHeader("Content-Length")) > 0 Then ProgressBar1.Max = CLng(Inet1.GetHeader("Content-Length"))
      
      '循环分块下载
      Do While Not bDone
         Put #1, Loc(1) + 1, vtData()
         vtData() = Inet1.GetChunk(1024, 1)
         DoEvents
         ProgressBar1.Value = Loc(1)   '设置进度条长度
         If Loc(1) >= ProgressBar1.Max Then bDone = True
      Loop
       
      Close #1
      MsgBox "下载完成", vbInformation, "通知"
   End Select
   
End Sub

回复列表 (共48个回复)

31 楼

奇怪的很啊,我粘贴了网址 ,按下cmdGET以后地址自动变为那个C:\Program Files\Microsoft Visual Studio\VB98\VB下载网上文件代码(有进度条显示) 地址了


我打包了你看看!!![url=http://wumianday.vicp.net/image/2006.7.7/VB下载网上文件代码(有进度条显示).rar]下载打包[/url]

32 楼

你的原因是文本框的名字是savefile而不是txtURL,改了就可以。

33 楼

你帮我看看啊,还是不成啊,改了也不成的,我的原程序都打包了麻烦你看看

34 楼

我弄好了,自己下吧
http://upload.programfan.com/upfile/200607241619566.rar

35 楼

我认为是不是应该在下载文件之前判断一下网络是用"GET"方法或是"POST"方法,毕竟这两种传输方式和获得的数据的方式都不一样的吧!
呵呵,自己的拙见,请务见笑啊!

36 楼

回35楼的,我想应该是没有必要判断的,因为
Inet1.Execute Geturl, "get"   
我也可以写成
Inet1.Execute Geturl
后面的参数可以省略
设置GET 用于检索由 URL 属性指定的 URL 中的数据

37 楼

好帖, 收藏

38 楼

kao 来晚了,先帮你顶上。然后看~ 今后多发~

39 楼

呵呵

40 楼

好帖子!顶

但我建议 在下载时 将"cmdGET"按钮设置为不可用状态
不然下载过程中再点按钮程序将发生错误

我来回复

您尚未登录,请登录后再回复。点此登录或注册