前不久做的东西需要用到一个自动更新的方法所用到。
/// <summary>
/// 下载文件
/// </summary>
/// <param name="URL">下载的基本链接地址(不含文件名)</param>
/// <param name="Filename">下载的文件名</param>
/// <param name="DownLoadPath">下载到本地的路径名</param>
private bool DownLoadFile(string URL, string Filename, string DownLoadPath)
{
try
{
//从URL地址得到一个WEB请求
System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL + Filename);
//设置这个属性判断文件下载前或下载中网络是否断开(很重要)
Myrq.ReadWriteTimeout = 1000;
//从WEB请求得到WEB响应
System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
//从WEB响应得到总字节数
long totalBytes = myrp.ContentLength;
//从WEB请求创建流(读)
System.IO.Stream st = myrp.GetResponseStream();
//判断文件夹是否存在,不存在则建立新文件夹
if (!Directory.Exists(DownLoadPath))
{
Directory.CreateDirectory(DownLoadPath);
}
//记录实际下载的字节数
long totalDownloadedByte = 0;
//创建文件流(写)
System.IO.Stream so = new System.IO.FileStream(DownLoadPath + Filename, System.IO.FileMode.Create);
byte[] by = new byte[1024];
//读流
int osize = st.Read(by, 0, (int)by.Length);
while (osize > 0)
{
//已更新的文件大小
totalDownloadedByte += osize;
//写流
so.Write(by, 0, osize);
//读流
osize = st.Read(by, 0, (int)by.Length);
}
//关闭流
so.Close();
//关闭流
st.Close();
//下载的字节数判断是否下载成功了
if (totalDownloadedByte == totalBytes)
{
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
return false;
//throw new Exception("下载更新文件出错:" + ex.Message);
}
}