在vb中下载之前获取文件大小

时间:2015-08-28 11:22:26

标签: vb.net download webbrowser-control

我一直在使用visual basic的web浏览器。现在,我想要做的是在下载之前获取文件大小,当我点击下载时我想获得alrady下载的Mbs的数量(看图片)

..

感谢您的帮助!

3 个答案:

答案 0 :(得分:7)

我做了一些研究,这可能是获得下载大小(以字节为单位)的最简单,最“最干净”的方式:

Public Function GetDownloadSize(ByVal URL As String) As Long
    Dim r As Net.WebRequest = Net.WebRequest.Create(URL)
    r.Method = Net.WebRequestMethods.Http.Head
    Using rsp = r.GetResponse()
        Return rsp.ContentLength
    End Using
End Function

归功于Reed Kimble,他告诉我在my initial MSDN question中处理WebResponse

上面的代码将读取文件的响应头,而不是读取它的主体。这意味着文件需要下载,只是为了检查它的大小。

这就是为什么有些代码要求文件首先实际下载的原因;他们正在阅读文件的正文,而不是它的标题。

希望这有帮助!

答案 1 :(得分:5)

使用WebClient ResponseHeaders

Public Shared Function GetFileSize(url As String) As Long
    Using obj As New WebClient()
        Using s As Stream = obj.OpenRead(url)
            Return Long.Parse(obj.ResponseHeaders("Content-Length").ToString())
        End Using
    End Using
End Function

Request file size before download it

答案 2 :(得分:4)

WebClient的{​​{1}}事件的args包含属性DownloadProgressChanged。这告诉你要下载的文件有多少字节。

不是最漂亮的方式,但是如果你想在下载之前获得文件的大小,你可以开始下载文件,然后立即取消它:

TotalBytesToRecieve

否则,只需删除Dim DownloadSize As Long Private Sub CheckDownloadSize(ByVal URL As String) WebClient.DownloadFile(URL, IO.Path.Combine(My.Computer.FileSystem.SpecialDirectories.Temp, "tempdownload.tmp")) End Sub Private WithEvents WebClient As New WebClient Private Sub WebClient_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles WebClient.DownloadProgressChanged DownloadSize = e.TotalBytesToReceive WebClient.CancelAsync() End Sub 行。