您的位置:首页 > 编程语言 > C#

C# 带进度条的文件下载

2012-06-08 10:54 183 查看
private long fileLength;
private long downLength;//已经下载文件大小,外面想用就改成公共属性
private static bool stopDown;
public HttpDownLoad()
{
fileLength = 0;
downLength = 0;
stopDown = false;
//
//   TODO:   在此处添加构造函数逻辑
//
}

///   <summary>
///   文件下载
///   </summary>
///   <param   name= "url "> 连接 </param>
///   <param   name= "fileName "> 本地保存文件名 </param>
///   <param   name= "progressBar "> 进度条 </param>
public void httpDownFile(string url, string fileName, ProgressBar progressBar)
{
Label lable = new Label();
httpDownFile(url, fileName, progressBar, lable);
lable.Dispose();
}

///   <summary>
///   文件下载
///   </summary>
///   <param   name= "url "> 连接 </param>
///   <param   name= "fileName "> 本地保存文件名 </param>
///   <param   name= "progressBar "> 进度条 </param>
///   <param   name= "label "> 返回已经下载的百分比 </param>
public string httpDownFile(string url, string fileName, ProgressBar progressBar, Label label)
{
string strState = "No";
stopDown = false;
Stream str = null, fs = null;
try
{
//获取下载文件长度
fileLength = getDownLength(url);
downLength = 0;
if (fileLength > 0)
{
WebClient DownFile = new WebClient();
str = DownFile.OpenRead(url);
//判断并建立文件
if (createFile(fileName))
{
byte[] mbyte = new byte[1024];
int readL = str.Read(mbyte, 0, 1024);
fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write);
//读取流
while (readL != 0)
{
if (stopDown)
break;
downLength += readL;//已经下载大小
fs.Write(mbyte, 0, readL);//写文件
readL = str.Read(mbyte, 0, 1024);//读流
progressBar.Value = (int)(downLength * 100 / fileLength);
label.Text = progressBar.Value.ToString() + "% ";
Application.DoEvents();
strState = "OK";
}
str.Close();
fs.Close();
}
}
}
catch (Exception)
{
if (str != null)
str.Close();
if (fs != null)
fs.Close();
}
return strState;
}

///   <summary>
///   文件下载
///   </summary>
///   <param   name= "url "> 连接 </param>
///   <param   name= "fileName "> 本地保存文件名 </param>
public void httpDownFile(string url, string fileName)
{
try
{
WebClient DownFile = new WebClient();
DownFile.DownloadFile(url, fileName);
}
catch (Exception)
{
//MessageBox.Show(ex.Message);
}
}

///   <summary>
///   获取下载文件大小
///   </summary>
///   <param   name= "url "> 连接 </param>
///   <returns> 文件长度 </returns>
private long getDownLength(string url)
{
try
{
WebRequest wrq = WebRequest.Create(url);
WebResponse wrp = (WebResponse)wrq.GetResponse();
wrp.Close();
return wrp.ContentLength;
}
catch (Exception)
{
//MessageBox.Show(ex.Message);
return 0;
}
}

///   <summary>
///   建立文件(文件如已经存在,删除重建)
///   </summary>
///   <param   name= "fileName "> 文件全名(包括保存目录) </param>
///   <returns> </returns>
private bool createFile(string fileName)
{
try
{
if (File.Exists(fileName))
{
File.Delete(fileName);
}
Stream s = File.Create(fileName);
s.Close();
return true;
}
catch (Exception)
{
//MessageBox.Show(ex.Message);
return false;
}
}

public void downClose()
{
stopDown = true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: