答案 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
答案 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
行。