/// <summary>
        /// 下载远程文件
        /// </summary>
        /// <param name="downAddress">下载地址</param>
        /// <param name="savePath">保存路径</param>
        /// by http://hi.baidu.com/alocne
        private void DownLoad(string downAddress,string savePath)
        {
            DirectoryInfo di = Directory.GetParent(savePath);
            if (!di.Exists)
            {
                di.Create();
            }
            if (File.Exists(savePath))
            {
                fs = new FileStream(savePath, FileMode.Append, FileAccess.Write);
            }
            else
            {
                fs = new FileStream(savePath, FileMode.Create, FileAccess.Write);
            }
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(downAddress);
            request.AllowAutoRedirect = false;
            request.Method = "GET";
            request.UserAgent = "Opera/9.25 (Windows NT 6.0; U; en)";
            CookieContainer cc = new CookieContainer();

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            if (response.ContentLength <= fs.Length)
            {
                return;
            }
           
            request.Abort();
            request = null;
            response.Close();

request = (HttpWebRequest)HttpWebRequest.Create(downAddress);
            request.AddRange((int)fs.Length);
            response = (HttpWebResponse)request.GetResponse();
            Stream responseStream = response.GetResponseStream();
            long Length = response.ContentLength + fs.Length;
            //delSetProcess1 pro1 = new delSetProcess1(SetProcess1);
            //this.Invoke(pro1, Length);//进度条

int i;
            byte[] buffer = new byte[2048];
            delSetProcess pro = new delSetProcess(SetProcess);
            do
            {
                i = responseStream.Read(buffer, 0, 2048);
                fs.Write(buffer, 0, i);
                //this.Invoke(pro);
            }
            while (i > 0);
            fs.Close();
            responseStream.Close();
            responseStream.Dispose();
            response.Close();
            responseStream = null;
            response = null;
            request = null;
        }

调用:DownLoad(http://www.xuehi.com/1.rar,@"c:\1.rar");

遇到网络不稳定或文件太大的时候有时会断开连接出现异常而无法完成下载

可以修改代码,加异常捕捉,循环下载

阅读全文
类别:c# 查看评论

转载于:https://www.cnblogs.com/alocne/archive/2010/04/17/1737901.html

C#断点续传HTTP下载远程文件的方法相关推荐

  1. php 远程下载大文件,php下载远程文件(支持断点续传,支持超大文件)

    断点下载的原理:http请求头添加Range参数告诉文件服务器端需要的字节范围 例如1个文本文件的字节为1000, 第一次请求Range: bytes=0-500 第二次请求Range: bytes= ...

  2. 如何通过Java下载远程文件到浏览器

    如何通过Java下载远程文件到浏览器 整体思路: 首先获取远程资源的文件输入流,使用HttpServletResponse的输出流,通过Java io转换将输入流转成输出流,写入指定文件,下载到浏览器 ...

  3. php 获取远程文件mine,使用CertUtil.exe下载远程文件

    使用CertUtil.exe下载远程文件 1.前言 经过国外文章信息,CertUtil.exe下载恶意软件的样本. 2.实现原理 Windows有一个名为CertUtil的内置程序,可用于在Windo ...

  4. PHP从远程mysql下载文件_PHP下载远程文件到指定目录

    PHP用curl可以轻松实现下载远程文件到指定目录: class Download { public static function get($url, $file) { return file_pu ...

  5. php保存成乱序,PHP实现断点续传乱序合并文件的方法

    本文实例讲述了PHP实现断点续传乱序合并文件的方法.分享给大家供大家参考,具体如下: 分割成多个文件发送,由于网络原因并不上先发就能发接收到.所以我们不能按顺序合并. 分割文件源码前面一篇文章< ...

  6. java下载网络文件_java下载网络文件的方法有哪些

    下载网络文件的方法有:字节流下载 apache的FileUtils工具包下载 NIO下载 实现代码如下:package com.dsp.rpc.metricelf; import org.apache ...

  7. java下载远程文件到本地

    /**       * 下载远程文件并保存到本地        * @param remoteFilePath 远程文件路径        * @param localFilePath 本地文件路径  ...

  8. php远程下载到本地,PHP 下载远程文件到本地的简单示例

    搜索热词 对PHP下载远程文件到本地存储的代码感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! /** * PHP下载远程文件到本地存储的代码 * * @param * @a ...

  9. Linux篇之命令行下载远程文件curl命令的介绍与使用

    一.curl简介 通常情况下,当我们不想在本机下载文件,上传至服务器时,觉得这样过于麻烦,步骤繁琐. 那么该怎么办呢? 在Linux中,服务器下载文件,提供了一种curl命令,它可以实现在Linux中 ...

  10. 【crx离线下载】Chrome 商店直接离线下载crx文件的方法

    获取插件ID 从 Chrome 商店搜索插件或直接通过链接进入插件的详情页面,其中地址栏最后的那一串字符就是ID,复制下来. https://chrome.google.com/webstore/de ...

最新文章

  1. 入职大厂,我容易吗?
  2. CSS3: 利用分层动画让元素沿弧形路径运动
  3. memcache php 到期时间,Memcache PHP会话调优:memcache如何过期密钥?
  4. 可变换大小的星星c语言源程序,五邑大学试卷_C语言程序设计_信息学院各专业_B卷1教学内容.doc...
  5. 未处理的异常: 0xC0000091: Floating-point overflow 的解决办法
  6. VS SP6补丁安装失败解决方法(Visual Studio 6.0 Service Pack 6 Setup was not completed successfully.)
  7. minus subtract deduct这三个单词的区别
  8. PostgreSQL 技术内幕(二) Greenplum-AO表
  9. 【网络安全学习实践】Windows系统密码破解防护及用户和组管理
  10. Android 打包签名 从生成keystore到完成签名
  11. 配置服务器的dns文件是什么意思,什么是服务器配置,DNS服务器如何配置
  12. Linux基本bash命令(持续更新)
  13. 小米Air笔记本以UEFI模式硬盘GPT分区启动Win7_64位系统
  14. HTML表格标签,真香
  15. Linux ethtool 命令
  16. 几米经典语录--生活永远不是童话
  17. BME680传感器-BESC空气质量IAQ算法库的三种工作模式
  18. 网络游戏外挂制作技术浅谈
  19. dw 发生以下java_Java实现小学四则运算练习
  20. Axure高级操作---富文本编辑器

热门文章

  1. log4j的使用 slf4j简单介绍
  2. kubernetes滚动更新
  3. this指向问题(call、apply、blind),自我理解的
  4. Asp.net Controller中View 和Action方法认证Authorize 及对AuthorizeAttribute扩展
  5. 5.G - 湫湫系列故事——减肥记I
  6. JAVA中的继承和覆盖
  7. poj 1027 深搜
  8. liunx 之 redHat 下 java 环境的配置和安装
  9. 杂谈:Molehill API 的体现
  10. in-band(带内) and out-of-band(带外) management