下载前获取文件大小 vb

Get file size before download it in vb

我一直在使用 Visual Basic 开发 Web 浏览器。现在,我想做的是在下载文件之前获取文件大小,当我单击下载时,我想获取已下载的数量Mbs(看图)

感谢您的帮助!

使用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

WebClientDownloadProgressChanged 事件的参数包含 属性 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

否则,只需删除 .CancelAsync() 行。

我做了一些研究,这可能是获取下载大小(以字节为单位)的最简单且 "cleanest" 的方法:

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, who told me to dispose the WebResponse in my initial MSDN question


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

这就是为什么有些代码需要首先实际下载文件的原因;他们正在读取文件的 body 而不是 headers.


希望对您有所帮助!