我的app中需要基本的文件下载功能,我无法使用WebClient.DownloadFile
[1]。这个(天真?)的DownloadFile
方法的实现是否足够?我没有解决这个实现的任何陷阱吗?
public static void DownloadFile(String url, String destination)
{
using (var request = (HttpWebRequest)WebRequest.Create(url))
{
request.Method = "GET";
request.Timeout = 100000; // 100 seconds
using (var response = request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
using (var fileStream = File.Open(destination,
FileMode.Create,
FileAccess.Write,
FileShare.None))
{
var MaxBytesToRead = 10 * 1024;
var buffer = new Byte[MaxBytesToRead];
var totalBytesRead = 0;
var bytesRead = responseStream.Read(buffer,
0,
MaxBytesToRead);
while (bytesRead > 0)
{
totalBytesRead += bytesRead;
fileStream.Write(buffer, 0, bytesRead);
bytesRead = responseStream.Read(buffer,
0,
MaxBytesToRead);
}
}
}
}
}
}
谢谢!
[1] .Net Compact Framework ...
答案 0 :(得分:1)
响应应具有Content-Length标头(除非content-encoding = chunked),您可以使用它来验证下载是否未中断。
除此之外,我的实现看起来还不错。
答案 1 :(得分:1)
您正在跟踪totalBytesRead
,但我无法在任何地方看到它。
由于Method = "GET"
是默认值,因此我看不到任何特定于HTTP的内容。如果您删除了(HttpWebRequest)
广告和Method =
行,那么您将能够通过其他协议(如FTP)下载。目前,如果有人提供 http:// 以外的URL,代码将抛出异常。