/// <summary>
/// 下载远程文件
/// </summary>
/// <param name="downAddress">下载地址</param>
/// <param name="savePath">保存路径</param>
/// by http://hi.baidu.com/alocne
private void DownLoad(string downAddress,string savePath)
{
DirectoryInfo di = Directory.GetParent(savePath);
if (!di.Exists)
{
di.Create();
}
if (File.Exists(savePath))
{
fs = new FileStream(savePath, FileMode.Append, FileAccess.Write);
}
else
{
fs = new FileStream(savePath, FileMode.Create, FileAccess.Write);
}
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(downAddress);
request.AllowAutoRedirect = false;
request.Method = "GET";
request.UserAgent = "Opera/9.25 (Windows NT 6.0; U; en)";
CookieContainer cc = new CookieContainer();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.ContentLength <= fs.Length)
{
return;
}
request.Abort();
request = null;
response.Close();
request = (HttpWebRequest)HttpWebRequest.Create(downAddress);
request.AddRange((int)fs.Length);
response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
long Length = response.ContentLength + fs.Length;
//delSetProcess1 pro1 = new delSetProcess1(SetProcess1);
//this.Invoke(pro1, Length);//进度条
int i;
byte[] buffer = new byte[2048];
delSetProcess pro = new delSetProcess(SetProcess);
do
{
i = responseStream.Read(buffer, 0, 2048);
fs.Write(buffer, 0, i);
//this.Invoke(pro);
}
while (i > 0);
fs.Close();
responseStream.Close();
responseStream.Dispose();
response.Close();
responseStream = null;
response = null;
request = null;
}
调用:DownLoad(http://www.xuehi.com/1.rar,@"c:\1.rar");
遇到网络不稳定或文件太大的时候有时会断开连接出现异常而无法完成下载
可以修改代码,加异常捕捉,循环下载
阅读全文类别:c# 查看评论