2010-02-04 61 views
0

我想从网上下载数千个文件并保存到本地。什么是最有效的方法?失败在10秒内超时非常重要。如何用vb .net下载超时下载文件?

有没有更好的方法将一个流串入另一个流?也许一个较小的缓冲区,如一次1024个字节,对大文件更有效率?

Dim w_req As System.Net.HttpWebRequest = CType(System.Net.HttpWebRequest.Create("http://blah.blah.blah/blah.html"), System.Net.HttpWebRequest) 
w_req.Timeout = 10000 
Dim w_res As System.Net.HttpWebResponse = CType(w_req.GetResponse(), System.Net.HttpWebResponse) 
Dim br As New System.IO.BinaryReader(w_res.GetResponseStream()) 
Dim fs As New System.IO.FileStream(LocalFileName, IO.FileMode.CreateNew, IO.FileAccess.Write, IO.FileShare.Write) 
Dim b() As Byte = br.ReadBytes(CInt(br.BaseStream.Length)) 
fs.Write(b, 0, b.Length) 
fs.Close() 
br.Close() 
+0

为什么要使用流时,你可以很容易地使用WebClient.DownloadFile? – svick 2010-02-04 14:34:17

回答

0

如果要下载多个文件use multiple threads。这样,等待一个服务器的响应不会减慢你的应用程序。


流处理对我来说看起来很好,但我不是这些事情的专家。如果你抓取非常大的文件,它可能会减少内存消耗,以块来完成。在.net 4.0中,您将能够使用Stream.CopyTo

相关问题:Best way to copy between two Stream instances - C#

+0

......但请记住,编写正确,强大的线程化软件往往并非不平凡...... – 2010-02-04 13:37:39

+0

当然。假设我知道如何执行线程。 (我也可能做错了,但是从来不这样做。)流式传输是否正确? – Eyal 2010-02-04 13:41:33

+0

@Eyal:更新了我的答案。 – Heinzi 2010-02-04 13:58:51