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; }
相关文章推荐
- c# 进度条BackgroundWorker 组件用来执行诸如数据库事务、文件下载等耗时的异步操作
- warensoft .NET快速开发系列--C#实现文件下载并(多线程+WebReqeust+进度条)
- C# 带进度条的文件下载
- C# WinForm 文件上传下载, 附源码
- 转载C#文件下载的实现
- C#客户端直接从服务器下载文件到本地
- 从Visual SourceSafe (VSS)服务器下载文件(C#)
- C#下载文件和将文件转换为数据流下载的示例
- 使用C#调用旋风、快车及迅雷下载文件
- C#下载文件
- C# 文件下载四方法
- NET(C#):使用HttpWebRequest头中的Range下载文件片段
- C# 压缩打包文件下载
- C# Http文件下载公共类(支持断点续传)
- 使用C#在进度条中显示复制文件的进度
- c# 文件上传和下载
- C#用线程传参下载文件的代码
- C#用HTTP协议实现多线程文件下载和断点续传
- C#实现文件断点续传下载的方法
- c#文件下载示例的4种方法