private long fileLength;

 private long downLength;//已经下载文件大小,外面想用就改成公共属性 

 private static bool stopDown;

 public HttpDownLoad()

 {

     fileLength = ;

     downLength = ;

     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 = ;

         if (fileLength > )

         {

             WebClient DownFile = new WebClient();

             str = DownFile.OpenRead(url);

             //判断并建立文件 

             if (createFile(fileName))

             {

                 byte[] mbyte = new byte[];

                 int readL = str.Read(mbyte, , );

                 fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write);

                 //读取流 

                 while (readL != )

                 {

                     if (stopDown)

                         break;

                     downLength += readL;//已经下载大小 

                     fs.Write(mbyte, , readL);//写文件 

                     readL = str.Read(mbyte, , );//读流 

                     progressBar.Value = (int)(downLength *  / 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 ;

     }

 }

 ///   <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# 带进度条的文件下载的更多相关文章

  1. linux 复 带进度条

    rsync命令 #rsync -av --progress /mnt/yidong2/full20100526.tar.gz /mnt/yidong1/ 可以实现本机带进度条提示拷贝,可以实现不同机器 ...

  2. java进行文件上传,带进度条

    网上看到别人发过的一个java上传的代码,自己写了个完整的,附带源码 项目环境:jkd7.tomcat7. jar包:commons-fileupload-1.2.1.jar.commons-io-1 ...

  3. 赞!带进度条的 jQuery 文件拖放上传插件

    jQuery File Uploader 是一个 jQuery 文件拖放上传插件,包括 Ajax 上传和进度条效果.作者编写这个插件的想法是要保持它非常简单,不像其他的插件,很多的标记,并提供一些 H ...

  4. Extjs 使用fileupload插件上传文件 带进度条显示

    一.首先我们看看官方给出的插件的解释: 一个文件上传表单项具有自定义的样式,并且可以控制按钮的文本和 像文本表单的空文本类似的其他特性. 它使用一个隐藏的文件输入元素,并在用户选择文件后 在form提 ...

  5. Android -- 自定义带进度条的按钮

    1. 实现了一个带进度条的按钮,完成后显示提示信息,并设置按钮为不可再次被点击

  6. atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7

    atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7 1. 实现原理 1 2. 大的文件上传原理::使用applet 1 3. 新的bp 2 1. 性能提升---分割小文件上传 ...

  7. 自定义带进度条的WebView , 增加获取web标题和url 回掉

    1.自定义ProgressWebView package com.app.android05; import android.content.Context; import android.graph ...

  8. C# WPF 解压缩7zip文件 带进度条 sevenzipsharp

      vs2013附件 :http://download.csdn.net/detail/u012663700/7427461 C# WPF 解压缩7zip文件 带进度条 sevenzipsharp W ...

  9. Qt带进度条的启动界面(继承QSplashScreen,然后使用定时器)

    通过继承QSplashScreen类,得到CMySplashScreen类,然后在CMySplashScreen中定义QProgressBar变量,该变量以CMySplashScreen为父类,这样就 ...

随机推荐

  1. Socket 之 同步以及异步通信

    用netstat侦听下端口状态 同步通信: 预定义结构体,同步通信没有多线程异步委托回调,所以无需预定义结构体 客户端Client: class Program { static void Main( ...

  2. Blocks 推出矩阵公式。矩阵快速密

    Blocks 设涂到第I块时,颜色A,B都为偶数的数量为ai,一奇一偶的数量为bi,都为奇数为ci,  那么涂到第i+1快时有 a[i+1]=2*a[i]+b[i]+0*c[i]; b[i+1]=2* ...

  3. Code Jam 2008 APAC local onsites Problem C. Millionaire —— 概率DP

    题意: 你有X元钱,进行M轮赌博游戏.每一轮可以将所持的任意一部分钱作为赌注(赌注为0元表示这一轮不押),赌注可以是小数的,不是一定要整数.每一轮 赢的概率为P,赢了赌注翻倍,输了赌注就没了.如果你最 ...

  4. Maven-编译打包

    1. 打包时忽略测试阶段 mvn clean mvn package -DskipTests

  5. raspberry pi vpn

    http://raspberrypihelp.net/tutorials/1-openvpn-server-tutorialhttp://www.jacobsalmela.com/setting-up ...

  6. [Java] 使用 Spring 2 Portlet MVC 框架构建 Portlet 应用

    转自:http://www.ibm.com/developerworks/cn/java/j-lo-spring2-portal/ Spring 除了支持传统的基于 Servlet 的 Web 开发之 ...

  7. SpringMVC 的 Controller 返回各种视图的处理方式

    SpringMVC 的 Controller 可以返回各种各样的视图.比如 JSP, JSON, Velocity, FreeMarker, XML, PDF, Excel, 还有Html字符流 等等 ...

  8. DATASNAP REST WEBSERVICES中间件如何跨平台使用

    DATASNAP REST WEBSERVICES中间件如何跨平台使用   准备使用DELPHI开发移动设备开发的朋友对DATASNAP REST中间件不可不了解. DATASNAP REST新型WE ...

  9. Codevs 1287 矩阵乘法&&Noi.cn 09:矩阵乘法(矩阵乘法练手题)

    1287 矩阵乘法  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 小明最近在为线性代数而头疼, ...

  10. freeCodeCamp:Sorted Union

    写一个 function,传入两个或两个以上的数组,返回一个以给定的原始数组排序的不包含重复值的新数组. 换句话说,所有数组中的所有值都应该以原始顺序被包含在内,但是在最终的数组中不包含重复值. 非重 ...