C# Http方式下载文件到本地类改进版
在上文基础上增加了远程文件是否存在和本地文件是否存在的判断。
类代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Net; namespace ConsoleTest { class HttpDldFile { /// <summary> /// Http方式下载文件 /// </summary> /// <param name="url">http地址</param> /// <param name="localfile">本地文件</param> /// <returns></returns> public bool Download(string url,string localfile) { bool flag = false; ; // 上次下载的文件起始位置 FileStream writeStream; // 写入本地文件流对象 long remoteFileLength = GetHttpLength(url);// 取得远程文件长度 System.Console.WriteLine("remoteFileLength=" + remoteFileLength); ) { System.Console.WriteLine("远程文件不存在."); return false; } // 判断要下载的文件夹是否存在 if (File.Exists(localfile)) { writeStream = File.OpenWrite(localfile); // 存在则打开要下载的文件 startPosition = writeStream.Length; // 获取已经下载的长度 if (startPosition >= remoteFileLength) { System.Console.WriteLine("本地文件长度" + startPosition + "已经大于等于远程文件长度" + remoteFileLength); writeStream.Close(); return false; } else { writeStream.Seek(startPosition, SeekOrigin.Current); // 本地文件写入位置定位 } } else { writeStream = new FileStream(localfile, FileMode.Create);// 文件不保存创建一个文件 startPosition = ; } try { HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(url);// 打开网络连接 ) { myRequest.AddRange((int)startPosition);// 设置Range值,与上面的writeStream.Seek用意相同,是为了定义远程文件读取位置 } Stream readStream = myRequest.GetResponse().GetResponseStream();// 向服务器请求,获得服务器的回应数据流 ];// 定义一个字节数据,用来向readStream读取内容和向writeStream写入内容 , btArray.Length);// 向远程文件读第一次 long currPostion=startPosition; )// 如果读取长度大于零则继续读 { currPostion+=contentSize; / remoteFileLength); System.Console.WriteLine("percent=" + percent + "%"); writeStream.Write(btArray, , contentSize);// 写入本地文件 contentSize = readStream.Read(btArray, , btArray.Length);// 继续向远程文件读取 } //关闭流 writeStream.Close(); readStream.Close(); flag = true; //返回true下载成功 } catch (Exception) { writeStream.Close(); flag = false; //返回false下载失败 } return flag; } // 从文件头得到远程文件的长度 private static long GetHttpLength(string url) { ; try { HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);// 打开网络连接 HttpWebResponse rsp = (HttpWebResponse)req.GetResponse(); if (rsp.StatusCode == HttpStatusCode.OK) { length = rsp.ContentLength;// 从文件头得到远程文件的长度 } rsp.Close(); return length; } catch(Exception e){ return length; } } } }
测试代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleTest { class Program { static void Main(string[] args) { HttpDldFile df = new HttpDldFile(); df.Download("http://files.cnblogs.com/files/xiandedanteng/Convertor20170624.zip","C:\\test\\Convertor20170624.zip"); } } }
C# Http方式下载文件到本地类改进版的更多相关文章
- C# Http方式下载文件到本地类
直接上代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...
- C# Http方式下载文件到本地
下文代码是从网络(http://www.cnblogs.com/hayden/archive/2012/04/26/2472815.html)得来,亲测好用.我中修改了下格式和注释,版权属于原作者“舒 ...
- PHP CURL实现远程下载文件到本地
<?php //$result=httpcopy('http://www.phpernote.com/image/logo.gif'); echo '<pre>';print_r($ ...
- 呵呵哒,LNMP下通过fread方式下载文件时,中文名称文件找不到文件
哎,整整折腾一个下午. 本来好好的,thinkphp 自动的uniq方式保存的文件名,非要使用原文件名,真心蛋疼~~ 然后就只好写个脚本 把原来的所有文件都重新命名一下 - - 然后把数据库对应字段也 ...
- C#使用WebClient下载文件到本地目录
C#使用WebClient下载文件到本地目录. 1.配置本地目录路径 <appSettings> <!--文件下载目录--> <add key="Downloa ...
- ajax方式下载文件
在web项目中需要下载文件,由于传递的参数比较多(通过参数在服务器端动态下载指定文件),所以希望使用post方式传递参数.通常,在web前端需要下载文件,都是通过指定<a>标签的href属 ...
- Http方式下载文件
代码: using System; using System.Collections.Generic; using System.IO; using System.Linq; using System ...
- Java远程下载文件到本地(http协议和ssh2协议)
Java中java.io包为我们提供了输入流和输出流,对文件的读写基本上都依赖于这些封装好的关于流的类中来实现.前段时间遇到了以下两种需求: 1.与某系统对接,每天获取最新的图片并显示在前端页面.该系 ...
- PHP实现远程下载文件到本地
PHP实现远程下载文件到本地 投稿:hebedich 字体:[增加 减小] 类型:转载 经常写采集器发布接口需要使用到远程附件的功能,所以自己写了一个PHP远程下载文件到本地的函数,一般情况下已经 ...
随机推荐
- vue---阻止默认表单提交的三种方法
vue在做表单提交的时候,需要用到一些自定义的验证规则,这个时候就需要阻止表单默认的提交方式. 方法一:直接阻止 <form id="form" @submit=" ...
- tomcat使用中的积累
一.清理tomcat缓存 项目运行出错,如:找不到某个类或方法,可能是没有部署好,而不是项目本身的问题.这个时候要重新部署.tomcat有缓存,所以有时候需要清理tomcat缓存再重新部署. 常用的几 ...
- poj1743 Musical Theme【后缀数组】【二分】
Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 35044 Accepted: 11628 D ...
- POJ3660 Cow Contest【最短路-floyd】
N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we ...
- Android中 Application的使用
Application全局唯一,如果需要放置全局的变量,需要用到Application,类似于OC中的单例类,获者OC中的AppDelegate 第一步:创建一个AppContext继承Applica ...
- MyEclipse安装及破解步骤
MyEclipse2013 (32+64)下载地址(建议使用迅雷下载)http://downloads.myeclipseide.com/downloads/products/eworkbench/2 ...
- 004-redis-命令-哈希操作,列表操作
Redis hash 命令 下表列出了 redis hash 基本的相关命令: 序号 命令及描述 1 HDEL key field1 [field2] 删除一个或多个哈希表字段 2 HEXISTS k ...
- 007-ant design 对象属性赋值,双向绑定
1.state对象属性赋值 设对象为 state={ datavalue:{ id:'', name:'', }, } 修改对象属性为: SetName=(e)=>{ let val=e.tar ...
- PHP导出excel时数字变为科学计数的解决方法
在数据导出到excel时数字格式不对,一般分为以下两种情况. 1.excel单元格设置长度不够 解决方法: //在excel.php文件中 $objActSheet = $objPHPExcel-&g ...
- redis5.0主从配置
1.下载 wget http://download.redis.io/releases/redis-5.0.3.tar.gz .tar.gz cd redis- make make test //检查 ...