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