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



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

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


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

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

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

 

注意:

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

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

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

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


先看一下程序效果

                          笔记5:利用HttpWebResponse下载文件,显示下载文件大小、网速、完成大小_第1张图片

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


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

    发现最近发上来的代码,会显示不全,原因是vb.net插入代码时用的是VB,但插入代码没有vb.net选项。

    苦恼,所以只有用“其它”方式插入代码,代码颜色、注释颜色就无法显示了。


    哪位如果知道解决办法,请留言。thanks.


你可能感兴趣的:(网络编程,下载文件,VB.NET,HttpWebResponse)