C# 带进度条的文件下载
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# 带进度条的文件下载的更多相关文章
- linux 复 带进度条
rsync命令 #rsync -av --progress /mnt/yidong2/full20100526.tar.gz /mnt/yidong1/ 可以实现本机带进度条提示拷贝,可以实现不同机器 ...
- java进行文件上传,带进度条
网上看到别人发过的一个java上传的代码,自己写了个完整的,附带源码 项目环境:jkd7.tomcat7. jar包:commons-fileupload-1.2.1.jar.commons-io-1 ...
- 赞!带进度条的 jQuery 文件拖放上传插件
jQuery File Uploader 是一个 jQuery 文件拖放上传插件,包括 Ajax 上传和进度条效果.作者编写这个插件的想法是要保持它非常简单,不像其他的插件,很多的标记,并提供一些 H ...
- Extjs 使用fileupload插件上传文件 带进度条显示
一.首先我们看看官方给出的插件的解释: 一个文件上传表单项具有自定义的样式,并且可以控制按钮的文本和 像文本表单的空文本类似的其他特性. 它使用一个隐藏的文件输入元素,并在用户选择文件后 在form提 ...
- Android -- 自定义带进度条的按钮
1. 实现了一个带进度条的按钮,完成后显示提示信息,并设置按钮为不可再次被点击
- atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7
atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7 1. 实现原理 1 2. 大的文件上传原理::使用applet 1 3. 新的bp 2 1. 性能提升---分割小文件上传 ...
- 自定义带进度条的WebView , 增加获取web标题和url 回掉
1.自定义ProgressWebView package com.app.android05; import android.content.Context; import android.graph ...
- C# WPF 解压缩7zip文件 带进度条 sevenzipsharp
vs2013附件 :http://download.csdn.net/detail/u012663700/7427461 C# WPF 解压缩7zip文件 带进度条 sevenzipsharp W ...
- Qt带进度条的启动界面(继承QSplashScreen,然后使用定时器)
通过继承QSplashScreen类,得到CMySplashScreen类,然后在CMySplashScreen中定义QProgressBar变量,该变量以CMySplashScreen为父类,这样就 ...
随机推荐
- Largest Rectangle in a Histogram 常用技巧 stack的运用
Largest Rectangle in a Histogram
- 9. Android框架和工具之 SlidingMenu(抽屉菜单)
详见为知笔记:Android / Android用户界面优化 / Android SlidingMenu菜单栏程序设计
- 【HTML5 1】39个让你受益的HTML5教程
闲话少说,本文作者为大家收集了网上学习HTML5的资源,期望它们能够帮助大家更好地学习HTML5. 好人啊! 只是,作者原来说的40个仅仅有39个,由于第5个和第8个是反复的. 原文在此! 1. 五分 ...
- 【Android Api 翻译1】Android Texting(2)Testing Fundamentals 测试基础篇
Testing Fundamentals The Android testing framework, an integral part of the development environment, ...
- EL表达式与JSTL(C)标签
一.EL表达式: Expression Language提供了在 JSP 脚本编制元素范围外(例如:脚本标签)使用运行时表达式的功能.脚本编制元素是指页面中能够用于在JSP 文件中嵌入 Java 代码 ...
- 怒刷DP之 HDU 1069
Monkey and Banana Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- 在centos中创建nginx启动脚本
1. 建立脚本文件nginxd [root@could]# vi /etc/init.d/nginxd 插入以下内容 #!/bin/bash## chkconfig: - 85 15# descrip ...
- 网络流sap算法模版
递归版sap: #include<cstdio> #include<iostream> #include<cstring> #include<algorith ...
- 面对一个“丢失了与用户“签订”的协议的修改”时进行的思考。
对于上图中的gauge,将value与label之间的比例值调整了,调整为1:1.2.这意味着,在新系统中打开老报表,老报表中的这个gauge的value可能会比以前大,二者可能是用户厌恶的效果. 严 ...
- LINQ to SQL 语句(2)之 Select/Distinct
LINQ to SQL 语句(2)之 Select/Distinct [1] Select 介绍 1 [2] Select 介绍 2 [3] Select 介绍 3 和 Distinct 介绍 Se ...