我正在寫一個C#實用程序,我需要能夠從URL下載和保存文件。如何在WinForm應用程序中從網上下載文件
我的代碼正在從Web服務調用中獲取URL,但是我無法找到如何開始下載並將數據保存到磁盤文件的簡單示例。
有沒有人有這方面的一個很好的例子,或者可以提供一個例子嗎?
謝謝!
編輯 - 我應該提到這些文件的大小爲3到4 GB。所以如果對這個尺寸的文件有特殊的考慮,我會很感激任何建議。
我正在寫一個C#實用程序,我需要能夠從URL下載和保存文件。如何在WinForm應用程序中從網上下載文件
我的代碼正在從Web服務調用中獲取URL,但是我無法找到如何開始下載並將數據保存到磁盤文件的簡單示例。
有沒有人有這方面的一個很好的例子,或者可以提供一個例子嗎?
謝謝!
編輯 - 我應該提到這些文件的大小爲3到4 GB。所以如果對這個尺寸的文件有特殊的考慮,我會很感激任何建議。
WebClient.DownloadData
,該規範包含一個小樣本。使用WebRequest.GetResponseStream
並按塊保存數據塊可能更有效,但您必須自己準備WebRequest
。
更新
如果你要下載的文件3-4GB,那麼你必須做很多比.net框架提供了什麼等等。因爲WebClient將內容作爲一個整體字節[]返回,所以它是非常不合時宜的。即使假設您的VAS(虛擬地址空間)具有連續4GB在這些下載上刻錄,.Net不能分配大於2Gb(在x64上)的任何。所以你必須使用流,如在GetResponseStream()中。
其次,您必須在請求中實現HTTP範圍單元,如HTTP/1.1 section 3.12。您的請求必須包含Content-Range
標題才能夠恢復受損下載。當然,你的目標服務器將不得不接受和識別這些頭文件,並且可能會用少數服務器做的事件accept-ranges
來響應。
你的盤子滿了,下載4Gb不過是微不足道的。
只需使用WebClient.DownloadFile
(或WebClient.DownloadFileAsync
,如果你不想在下載過程中凍結UI)
既然你有龐大的文件,對於某種聯繫的復甦做好準備。
無論您從http(WebClient,TcpStream,...)中找到什麼方法,都應該從頭開始編寫恢復代碼。這應該是重點。
爲此,必須檢查從GetResponseStream()
返回的流是否支持Seek()
。
回覆:大文件 - 特別的問題是,你將不得不實施某種恢復... – 2010-10-14 22:51:15