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. Largest Rectangle in a Histogram 常用技巧 stack的运用

    Largest Rectangle in a Histogram

  2. 9. Android框架和工具之 SlidingMenu(抽屉菜单)

    详见为知笔记:Android / Android用户界面优化 / Android SlidingMenu菜单栏程序设计

  3. 【HTML5 1】39个让你受益的HTML5教程

    闲话少说,本文作者为大家收集了网上学习HTML5的资源,期望它们能够帮助大家更好地学习HTML5. 好人啊! 只是,作者原来说的40个仅仅有39个,由于第5个和第8个是反复的. 原文在此! 1. 五分 ...

  4. 【Android Api 翻译1】Android Texting(2)Testing Fundamentals 测试基础篇

    Testing Fundamentals The Android testing framework, an integral part of the development environment, ...

  5. EL表达式与JSTL(C)标签

    一.EL表达式: Expression Language提供了在 JSP 脚本编制元素范围外(例如:脚本标签)使用运行时表达式的功能.脚本编制元素是指页面中能够用于在JSP 文件中嵌入 Java 代码 ...

  6. 怒刷DP之 HDU 1069

    Monkey and Banana Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  7. 在centos中创建nginx启动脚本

    1. 建立脚本文件nginxd [root@could]# vi /etc/init.d/nginxd 插入以下内容 #!/bin/bash## chkconfig: - 85 15# descrip ...

  8. 网络流sap算法模版

    递归版sap: #include<cstdio> #include<iostream> #include<cstring> #include<algorith ...

  9. 面对一个“丢失了与用户“签订”的协议的修改”时进行的思考。

    对于上图中的gauge,将value与label之间的比例值调整了,调整为1:1.2.这意味着,在新系统中打开老报表,老报表中的这个gauge的value可能会比以前大,二者可能是用户厌恶的效果. 严 ...

  10. LINQ to SQL 语句(2)之 Select/Distinct

    LINQ to SQL 语句(2)之 Select/Distinct [1] Select 介绍 1 [2] Select 介绍 2 [3] Select 介绍 3 和  Distinct 介绍 Se ...