110,534
社区成员
发帖
与我相关
我的任务
分享
public static bool DownFile(string url, string filepath, int maxsize, bool allowAutoRedirect, long begin, int reDown)
{
HttpWebRequest request = null;
HttpWebResponse response = null;
FileStream filestream = null;
Stream stream = null;
var curr = begin;
try
{
request = (HttpWebRequest)WebRequest.Create(url);
request.AllowAutoRedirect = allowAutoRedirect;
request.AddRange(begin);
response = (HttpWebResponse)request.GetResponse();
filestream = new FileStream(filepath, begin == 0 ? FileMode.Create : FileMode.Append);
stream = response.GetResponseStream();
byte[] buff = new byte[maxsize];
var len = response.ContentLength;
if (len <= 0)
{
throw new Exception("ContentLength为零或负数!");
}
Double total = len + begin;
int n = 0;
while ((n = stream.Read(buff, 0, buff.Length)) > 0)
{
filestream.Write(buff, 0, n);
curr += n;
}
return true;
}
catch (Exception e)
{
//先释放
if (request != null)
request.Abort();
if (response != null)
response.Dispose();
if (filestream != null)
filestream.Dispose();
if (stream != null)
stream.Dispose();
if (reDown > 0)
{
reDown -= 1;
//重新下载
return DownFile(url, filepath, maxsize, allowAutoRedirect, curr, reDown);
}
else
{
if (File.Exists(filepath))
File.Delete(filepath);
return false;
}
}
finally
{
if (request != null)
request.Abort();
if (response != null)
response.Dispose();
if (filestream != null)
filestream.Dispose();
if (stream != null)
stream.Dispose();
}
}