笔记5:利用HttpWebResponse下载文件,显示下载文件大小、网速、完成大小



        前面利用HttpWebResponse类,主要是解决获取网页源代码,或者利用它进行一些网页的简单操作。

下面再用一个例子演示下载一个文件。


       本来下载很简单,直接用下面一句就完成OK啦 :

  My.Computer.Network.DownloadFile("http://www.URLtoDownloadFrom.net", "C:\filename.html")

       但这个例子演示,提前获知要下载文件的大小,正在下载时的网速,以及已经下载了多少。程序变量用了不少.     

 

注意:

   1、为了简化,没用线程,但容易产生死机错觉,故循环中加入了Application.DoEvents();

   2、时间差量(少)需大于等于1,不然,网速无穷大;

   3、单位时间下载量,每次计算完成后重新置0;

   4、用的是文本框显示状态,每次刷新会有闪烁现象。


先看一下程序效果

                          


Imports System.IO
Imports System.Net

Public Class Form1
    Private Sub btnDown_Click(sender As Object, e As EventArgs) Handles btnDown.Click
        Dim hwq As HttpWebRequest
        Dim hwp As HttpWebResponse
        Dim colHeader As WebHeaderCollection  '响应头信息集合
        Dim lngSize As Int64                  '要下载文件的总大小
        Dim lngCurSize As Int64               '已经下载大小
        Dim lngNet As Int64                   '计算网速用

        Dim stRespones As Stream              '响应流
        Dim st As FileStream                  '本地流
        Dim intCurSize As Int64
        Dim bytBuffer(512) As Byte           '缓存大小

        Dim datLast As DateTime               '最后一次时间
        Dim intDiff As Int32                  '两次时间差(秒)

        datLast = Now   '取得开始时间
        hwq = CType(HttpWebRequest.Create(txtAddress.Text), HttpWebRequest) '请求对象创建
        hwp = hwq.GetResponse        '取得响应对象
        colHeader = hwp.Headers      '取得响应头
        lngSize = colHeader.Get("Content-Length")  '取得要下载文件的大小

        stRespones = hwp.GetResponseStream '取得响应流
        st = New FileStream("D:\2.zip", FileMode.Create) '本地保存文件

        intCurSize = stRespones.Read(bytBuffer, 0, bytBuffer.Length) '响应流中读取

        Do While (intCurSize > 0) '只要有数据就继续
            st.Write(bytBuffer, 0, intCurSize)     '写入本地文件
            intDiff = DateDiff(DateInterval.Second, datLast, Now)

            lngCurSize = lngCurSize + intCurSize
            lngNet = lngNet + intCurSize              '单位时间内的下载量
            If intDiff >= 1 Then
                txtState.Text = "文件大小:" & lngSize & vbCrLf &
                                "已经下载:" & lngCurSize & vbCrLf &
                                "下载速度:" & CInt(lngNet / intDiff / 1024) & "k/s"
                datLast = Now
                lngNet = 0
            End If

            Application.DoEvents()
            intCurSize = stRespones.Read(bytBuffer, 0, bytBuffer.Length) '继续读取
        Loop
        txtState.Text = "下载完成!"

        st.Close()
        stRespones.Close()
    End Sub
End Class


      本来是想用完成率,发现用了完成量,就这样吧。

    


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值