下载前获取文件大小 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
WebClient
的 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
否则,只需删除 .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.
希望对您有所帮助!
我一直在使用 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
WebClient
的 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
否则,只需删除 .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.
希望对您有所帮助!