1. using System;
  2. using System.Net;
  3. using System.IO;
  4. using System.Text;
  5. using System.Web;
  6. using System.Windows.Forms;
  7.  
  8. namespace test
  9. {
  10. /// <summary>
  11. /// httpDownLoad
  12. /// </summary>
  13. public class HttpDownLoad
  14. {
  15. private long fileLength;
  16. private long downLength;//已经下载文件大小,外面想用就改成公共属性
  17. private static bool stopDown;
  18. public HttpDownLoad()
  19. {
  20. fileLength = ;
  21. downLength = ;
  22. stopDown = false;
  23. //
  24. // TODO: 在此处添加构造函数逻辑
  25. //
  26. }
  27. /// <summary>
  28. /// 文件下载
  29. /// </summary>
  30. /// <param name="url">连接</param>
  31. /// <param name="fileName">本地保存文件名</param>
  32. /// <param name="progressBar">进度条</param>
  33. public void httpDownFile(string url, string fileName, System.Windows.Forms.ProgressBar progressBar)
  34. {
  35. Label lable = new Label();
  36. httpDownFile(url, fileName, progressBar, lable);
  37. lable.Dispose();
  38. }
  39. /// <summary>
  40. /// 文件下载
  41. /// </summary>
  42. /// <param name="url">连接</param>
  43. /// <param name="fileName">本地保存文件名</param>
  44. /// <param name="progressBar">进度条</param>
  45. /// <param name="label">返回已经下载的百分比</param>
  46. public void httpDownFile(string url, string fileName, System.Windows.Forms.ProgressBar progressBar, Label label)
  47. {
  48. stopDown = false;
  49. Stream str = null, fs = null;
  50. try
  51. {
  52. //获取下载文件长度
  53. fileLength = getDownLength(url);
  54. downLength = ;
  55. if (fileLength > )
  56. {
  57. WebClient DownFile = new WebClient();
  58. str = DownFile.OpenRead(url);
  59. //判断并建立文件
  60. if (createFile(fileName))
  61. {
  62. byte[] mbyte = new byte[];
  63. int readL = str.Read(mbyte, , );
  64. fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write);
  65. //读取流
  66. while (readL != )
  67. {
  68. if (stopDown)
  69. break;
  70. downLength += readL;//已经下载大小
  71. fs.Write(mbyte, , readL);//写文件
  72. readL = str.Read(mbyte, , );//读流
  73. progressBar.Value = (int)(downLength * / fileLength);
  74. label.Text = progressBar.Value.ToString() + "%";
  75. System.Windows.Forms.Application.DoEvents();
  76. }
  77. str.Close();
  78. fs.Close();
  79. }
  80. }
  81. }
  82. catch (Exception ex)
  83. {
  84. if (str != null)
  85. str.Close();
  86. if (fs != null)
  87. fs.Close();
  88. MessageBox.Show(ex.Message);
  89. }
  90. }
  91. /// <summary>
  92. /// 文件下载
  93. /// </summary>
  94. /// <param name="url">连接</param>
  95. /// <param name="fileName">本地保存文件名</param>
  96. public void httpDownFile(string url, string fileName)
  97. {
  98. try
  99. {
  100. WebClient DownFile = new WebClient();
  101. DownFile.DownloadFile(url, fileName);
  102. }
  103. catch (Exception ex)
  104. {
  105. MessageBox.Show(ex.Message);
  106. }
  107. }
  108. /// <summary>
  109. /// 获取下载文件大小
  110. /// </summary>
  111. /// <param name="url">连接</param>
  112. /// <returns>文件长度</returns>
  113. private long getDownLength(string url)
  114. {
  115. try
  116. {
  117. WebRequest wrq = WebRequest.Create(url);
  118. WebResponse wrp = (WebResponse)wrq.GetResponse();
  119. wrp.Close();
  120. return wrp.ContentLength;
  121. }
  122. catch (Exception ex)
  123. {
  124. MessageBox.Show(ex.Message);
  125. return ;
  126. }
  127. }
  128. /// <summary>
  129. /// 建立文件(文件如已经存在,删除重建)
  130. /// </summary>
  131. /// <param name="fileName">文件全名(包括保存目录)</param>
  132. /// <returns></returns>
  133. private bool createFile(string fileName)
  134. {
  135. try
  136. {
  137. if (File.Exists(fileName))
  138. {
  139. File.Delete(fileName);
  140. }
  141. Stream s = File.Create(fileName);
  142. s.Close();
  143. return true;
  144. }
  145. catch (Exception ex)
  146. {
  147. MessageBox.Show(ex.Message);
  148. return false;
  149. }
  150. }
  151. public void downClose()
  152. {
  153. stopDown = true;
  154. }
  155. }
  156. }

=====================================================================
调用
=====================================================================

HttpDownLoad ht = new HttpDownLoad();
ht.httpDownFile("http://img.baidu.com/img/post-jg.gif", "post-jg.gif", this.progressBar1);

C# 文件下载类的更多相关文章

  1. php 支持断点续传的文件下载类

    php 支持断点续传的文件下载类 分类: php class2013-06-30 17:27 17748人阅读 评论(6) 收藏 举报 php断点续传下载http测试 php 支持断点续传,主要依靠H ...

  2. [上传下载] C#FileDown文件下载类 (转载)

    点击下载 FileDown.zip 主要功能如下 .参数为虚拟路径 .获取物理地址 .普通下载 .分块下载 .输出硬盘文件,提供下载 支持大文件.续传.速度限制.资源占用小 看下面代码吧 /// &l ...

  3. PHP基础文件下载类的简单封装

    1: <?php 2: /** 3: * [FileDown 公用文件下载方法] 4: * @param [type] $filePath [文件路径(绝对路径或相对路径)] 5: */ 6: ...

  4. PowerShell实现文件下载(类wget)

    对Linux熟悉的读者可能会对Linux通过wget下载文件有印象,这个工具功能很强大,在.NET环境下提到下载文件大多数人熟悉的是通过System.Net.WebClient进行下载,这个程序集能实 ...

  5. php实现的支持断点续传的文件下载类

    通常来说,php支持断点续传,主要依靠HTTP协议中 header HTTP_RANGE实现. HTTP断点续传原理: Http头 Range.Content-Range()HTTP头中一般断点下载时 ...

  6. 封装qt http文件下载类

    #include <QApplication> #include <QtWidgets> #include <QtNetwork> //downloads one ...

  7. Android 实现网络多线程APK文件下载

    (转自:http://blog.csdn.net/mad1989/article/details/38421465) 实现原理 (1)首先获得下载文件的长度,然后设置本地文件的长度. (2)根据文件长 ...

  8. android下载简单工具类

    功能是实现下载文件,图片或MP3等,为了简单起见使用单线程,此代码为MarsAndroid教程的复制品,放在此处,留着参考. 首先是一个得到字节流随后保存到内存卡上的工具类: package com. ...

  9. Android实现网络多线程文件下载

    实现原理 (1)首先获得下载文件的长度,然后设置本地文件的长度. (2)根据文件长度和线程数计算每条线程下载的数据长度和下载位置. 如:文件的长度为6M,线程数为3,那么,每条线程下载的数据长度为2M ...

随机推荐

  1. C# - Abstract Classes

     Abstract classes are closely related to interfaces. They are classes that cannot be instantiated, ...

  2. 左右TS分析流

    字节.在TS流里能够填入非常多类型的数据.如视频.音频.自己定义信息等.他的包的结构为,包头为4个字节,负载为184个字节(这184个字节不一定都是有效数据.有一些可能为填充数据). 工作形式: 由于 ...

  3. (插播)unity的 异常捕捉和 ios Android 崩溃信息的捕捉。

    近期 做些准备性得工作和有意思的事情.所以近期做了一个适合ios和android 错误信息捕捉的unity插件. 两个功能,app崩溃也就是闪退 是开发人员 非常头疼的一件事,还有就是一些莫名得错误 ...

  4. Android 4.4 KitKat NotificationManagerService使用具体解释与原理分析(一)__使用具体解释

    概况 Android在4.3的版本号中(即API 18)增加了NotificationListenerService,依据SDK的描写叙述(AndroidDeveloper)能够知道,当系统收到新的通 ...

  5. java.util.Timer demo good

    package timer; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import org ...

  6. CodeForces 28D Don&#39;t fear, DravDe is kind dp

    主题链接:点击打开链接 为了让球队后,删除是合法的.也就是说,对于每一个车辆, l+r+c 一样,按l+r+c分类. 然后dp一下. #include <cstdio> #include ...

  7. 讨论oracle在rowid和rownum

    [ 概要 ] 刚刚接触oracle的同学可能经常会被rowid和rownum这两个词弄混, 弄清楚这两个家伙对于我们写sql会有非常大的帮助, 以下偶就抛砖引玉, 简单地谈谈他们之间的差别吧. [ 比 ...

  8. TreeMap cannot be cast to java.lang.Comparable

    /** * Constructs a new, empty tree map, using the natural ordering of its * keys. All keys inserted ...

  9. Git & Github 一页简明笔记(转)main

    由于小组工程需要使用git&github的版本控制来协作,但我对其使用并不熟悉,特此写篇一页的笔记放在手边,备随时查阅. 使用方法:常用命令供随时查阅,其余内容供新手了解. 0. 常用命令一览 ...

  10. Javascript学习5 - 函数

    原文:Javascript学习5 - 函数 在Javascript中,函数和对象是交织在一起的.有些函数的特性与对象相关联.这一点的内容在第六部分会讨论到. 这一部分主要讨论函数与其它比较熟悉的语言( ...