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为父类,这样就 ...
随机推荐
- 关于android:inputType属性的说明
<EditText android:layout_width="fill_parent" android:layout_height="wrap_content&q ...
- BeginInvoke、ThreadPool、Task三类异步方法的区别和速度比较
速度(最快为1) 返回值 多参数 等待在时限内完成 超时后结束 ThreadPool.UnsafeQueueUserWorkItem() 1 非原生支持1 非原生支持 非原生支持3 不支持 Thr ...
- hdu-5714 拍照(二分)
题目链接: 拍照 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Proble ...
- poj 2455 Secret Milking Machine 二分+最大流 sap
题目:p条路,连接n个节点,现在需要从节点1到节点n,不重复走过一条路且走t次,最小化这t次中连接两个节点最长的那条路的值. 分析:二分答案,对于<=二分的值的边建边,跑一次最大流即可. #in ...
- selenium判断元素类型
在做级联的下拉框时发现第一次选择了下拉框(如省份),第二个下拉框可能是输入框,也可能是下拉框,这个时候就需要判断他的元素类型,来做判断 图1 图2 原理很简单:获取控件的html文件内容,拿到内容后在 ...
- git之添加ssh
1.ssh-keygen 2.cat ~/.ssh/id_rsa.pub 3.git config user.email "huangsy13@gmail.com" 4.git c ...
- VB.NET 小程序 1
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ...
- ORA-01502错误成因和解决方法
这个错误是由于索引失效造成的,重建索引后,问题就解决了. 我们看到,当使用类似 alter table xxxxxx move tablespace xxxxxxx 命令后,索引就会失效. 当然,作为 ...
- Android聊天界面刷新消息
今天,我想来分享一下自己初用线程的感受,虽然写法略显粗糙,并没有用线程Thread中核心的Looper,MessageQueue消息队列这些知识,正因为是初学线程,所以就只用最基础的来写了,慢慢学习优 ...
- 【ASP.NET】DataContract序列化,反序列化对象中包含用接口声明的属性时的处理方法
为此对象添加KnownType属性(Attribute).类型为用接口声明的属性(Property)的所有可能类型. 示例如下: public interface IKey { [DataMembe ...