C#文件下载(实现断点续传)
public class WebDown
{
/// 下载文件方法
/// 文件保存路径和文件名
/// 返回服务器文件名
public static bool DeownloadFile(string sourceFile, string desFile)
{
bool flag = false;
long SPosition = ;
FileStream FStream = null;
Stream myStream = null;
string fileName = sourceFile.Substring(sourceFile.LastIndexOf(@"/") + );
if (desFile.EndsWith("\\"))
{
desFile = desFile + fileName;
}
else
{
desFile = desFile + "\\" + fileName;
}
try
{
//判断要下载的文件夹是否存在
if (File.Exists(desFile))
{
//打开上次下载的文件
FStream = File.OpenWrite(desFile);
//获取已经下载的长度
SPosition = FStream.Length;
long serverFileLength = GetHttpLength(sourceFile);
if (SPosition == serverFileLength)
{//文件是完整的,直接结束下载任务
return true;
}
FStream.Seek(SPosition, SeekOrigin.Current);
}
else
{
//文件不保存创建一个文件
FStream = new FileStream(desFile, FileMode.Create);
SPosition = ;
}
//打开网络连接
HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(sourceFile);
if (SPosition > )
{
myRequest.AddRange(SPosition); //设置Range值
}
//向服务器请求,获得服务器的回应数据流
myStream = myRequest.GetResponse().GetResponseStream();
//定义一个字节数据
byte[] btContent = new byte[];
int intSize = ;
intSize = myStream.Read(btContent, , );
while (intSize > )
{
FStream.Write(btContent, , intSize);
intSize = myStream.Read(btContent, , );
}
flag = true; //返回true下载成功
}
catch (Exception ex)
{
SysLog.WriteTxtLog("下载文件时异常:" + ex.Message);
}
finally
{
//关闭流
if (myStream != null)
{
myStream.Close();
myStream.Dispose();
}
if (FStream != null)
{
FStream.Close();
FStream.Dispose();
}
}
return flag;
}
static long GetHttpLength(string url)
{
long length = ;
try
{
var req = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
req.Method = "HEAD";
req.Timeout = ;
var res = (HttpWebResponse)req.GetResponse();
if (res.StatusCode == HttpStatusCode.OK)
{
length = res.ContentLength;
}
res.Close();
return length;
}
catch (WebException wex)
{
return ;
}
}
}
C#文件下载(实现断点续传)的更多相关文章
- 【SFTP】使用Jsch实现Sftp文件下载-支持断点续传和进程监控
参考上篇文章: <[SFTP]使用Jsch实现Sftp文件下载-支持断点续传和进程监控>:http://www.cnblogs.com/ssslinppp/p/6248763.html ...
- iOS开发之网络编程--4、NSURLSessionDataTask实现文件下载(离线断点续传下载) <进度值显示优化>
前言:根据前篇<iOS开发之网络编程--2.NSURLSessionDownloadTask文件下载>或者<iOS开发之网络编程--3.NSURLSessionDataTask实现文 ...
- iOS开发之网络编程--3、NSURLSessionDataTask实现文件下载(离线断点续传下载)
前言:使用NSURLSessionDownloadTask满足不这个需要离线断点续传的下载需求,所以这里就需要使用NSURLSessionDataTask的代理方法来处理下载大文件,并且实现离线断点续 ...
- iOS 文件下载及断点续传
ios的下载我们可以使用的方法有:NSData.NSURLConnection.NSURLSession还有第三方框架AFNetworking和ASI 利用NSData方法和NSURLConnecti ...
- 【转】iOS 文件下载及断点续传
ios的下载我们可以使用的方法有:NSData.NSURLConnection.NSURLSession还有第三方框架AFNetworking和ASI 利用NSData方法和NSURLConnecti ...
- C# 文件下载之断点续传
注意,本文所说的断点续传特指 HTTP 协议中的断点续传.本文主要聊聊思路和关键代码,更多细节请参考本文附带的 demo. 工作原理 HTTP 协议中定义了一些请求/响应头,通过组合使用这些头信息.我 ...
- Winform文件下载之断点续传
在本系列的前两篇文章中,分别向大家介绍了用于完成下载任务的 WebClinet 和 WinINet 的基本用法和一些实用技巧. 今天来为大家讲述下载过程中最常遇到的断点续传问题. 首先明确一点,本文所 ...
- php大文件下载支持断点续传
<?php /** php下载类,支持断点续传 * * Func: * download: 下载文件 * setSpeed: 设置下载速度 * getRange: ...
- PHP超大文件下载,断点续传下载
源代码: <?php $sourceFile = "1.tmp"; //要下载的临时文件名 $outFile = "用户订单.xls"; //下载保存到客 ...
- Java单线程文件下载,支持断点续传功能
前言: 程序下载文件时,有时会因为各种各样的原因下载中断,对于小文件来说影响不大,可以快速重新下载,但是下载大文件时,就会耗费很长时间,所以断点续传功能对于大文件很有必要. 文件下载的断点续传: 1. ...
随机推荐
- 解决IE兼容模式的方案
在html头 加标签 强制使用最新的ie渲染 <meta http-equiv="X-UA-Compatible" content="IE=edge"&g ...
- JS判断页面加载完毕
//JS判断页面加载完毕,再隐藏加载效果层,一个简单的JS加载效果. document.onreadystatechange = function () { if (document.readySta ...
- 解决 IE6 背景缓存
解决 IE6 背景缓存 <!--[if IE 6]><script type="text/javascript">document.execCommand( ...
- dom4j解析以及生成xml字符串测试
public static void main(String[] args) { String xmlStr = "<ybjcVo>"+ "<zbGri ...
- tornado url配置
Note tornado是支持虚拟主机的,在同一端口上根据域名区分app http://www.tornadoweb.org/en/stable/web.html#application-config ...
- 把文件(项目)上传到Git@OSC
说明: 登录与配置git的操作此处忽略. 假设你已配置好git,并且已绑定oschina. 下面是把一个本地文件夹上传到git的操作: 在git@osc上新建项目.记得选择添加对应的 .gitigno ...
- DWR组件——基于远程过程调用实现Ajax
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6686115.html 一:DWR的用途 DWR(Direct Web Remoting)是一个Web远程调用 ...
- 深入理解JVM(三)——垃圾收集策略具体解释
Java虚拟机的内存模型分为五个部分.各自是:程序计数器.Java虚拟机栈.本地方法栈.堆.方法区. 这五个区域既然是存储空间,那么为了避免Java虚拟机在执行期间内存存满的情况,就必须得有一个垃圾收 ...
- 【Linux】&、&&、|、||的用法说明
在Linux系统中,&.&&.|.||的用法如下: & 表示任务在后台运行,例如:ping 127.0.0.1>a.txt& && 表 ...
- SpringCloud stream连接RabbitMQ收发信息
百度上查的大部分都是一些很简单的单消费者或者单生产者的例子,并且多是同一个服务器的配置,本文的例子为多服务器配置下的消费生产和消费者配置. 参考资料:https://docs.spring.io/sp ...