WebClient類是簡化場景的類。一旦你通過簡單的場景(你有),你必須回退一點,並使用WebRequest。
使用WebRequest,您將可以訪問響應流,並且您可以遍歷它,讀取一點並寫一點點,直到完成。
例子:
public void MyDownloadFile(Uri url, string outputFilePath)
{
const int BUFFER_SIZE = 16 * 1024;
using (var outputFileStream = File.Create(outputFilePath, BUFFER_SIZE))
{
var req = WebRequest.Create(url);
using (var response = req.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
var buffer = new byte[BUFFER_SIZE];
int bytesRead;
do
{
bytesRead = responseStream.Read(buffer, 0, BUFFER_SIZE);
outputFileStream.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
}
}
}
}
注意,如果WebClient.DownloadFile工作,那麼我把它叫做最好的解決方案。我在發佈「DownloadFile」答案之前寫了上面的內容。我也是在早上寫的,所以可能需要一點鹽(和測試)。
感謝您的詳細解答和代碼段! 這對於我想在數據到達時處理數據的情況非常有用! – 2009-07-03 13:43:22
這段代碼中的異常處理或重試機制呢?網絡斷開連接等。 – 2013-06-18 07:11:38