2010-02-04 96 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