博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)WP7 断点续传
阅读量:4338 次
发布时间:2019-06-07

本文共 1890 字,大约阅读时间需要 6 分钟。

原文地址:

 

断点续传其实就是在请求流的时候请求中间流,而不是每次重新从头来过

HttpWebRequest Myrq = (HttpWebRequest)HttpWebRequest.CreateHttp(URL);

Myrq.Headers["Range"] = "bytes=1024-";//设置Range值 

这句就是请求1024位置开始到末尾的流

如果Myrq.Headers["Range"] = "bytes=1024-2048";

则表示请求1024到2048位置的数据 

有了这个方法,写断点续传就会简单许多了,错略的方法如下

public void DownFile(string URL, string Filename, ProgressBar Prog)
{
//打开上次下载的文件或新建文件
long lStartPos = 0;
IsolatedStorageFileStream fs;
 
if (IsolatedStorageFile.GetUserStoreForApplication().FileExists(Filename))
{
fs = IsolatedStorageFile.GetUserStoreForApplication().OpenFile(Filename, FileMode.Open);
lStartPos = fs.Length;
fs.Seek(lStartPos, System.IO.SeekOrigin.Current); //移动文件流中的当前指针
}
else
{
fs = IsolatedStorageFile.GetUserStoreForApplication().CreateFile(Filename);
lStartPos = 0;
}
try
{
HttpWebRequest Myrq = (HttpWebRequest)HttpWebRequest.CreateHttp(URL);
Myrq.Headers["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)";
if (lStartPos > 0)
{
Myrq.Headers["Range"] = "bytes=" + lStartPos + "-";//设置Range值
}
Myrq.BeginGetResponse(new AsyncCallback((a) =>
{
var myrp = Myrq.EndGetResponse(a);
long totalBytes = myrp.ContentLength + fs.Length;
this.Dispatcher.BeginInvoke(() => { Prog.Maximum = (int)totalBytes; });
Stream st = myrp.GetResponseStream();
//Stream so = new FileStream(Filename, FileMode.Create);
long totalDownloadedByte = fs.Length;
byte[] by = new byte[1024];
int osize = st.Read(by, 0, (int)by.Length);
while (osize > 0)
{
totalDownloadedByte = osize + totalDownloadedByte;
fs.Write(by, 0, osize);
this.Dispatcher.BeginInvoke(() => { Prog.Value = (int)totalDownloadedByte; });
osize = st.Read(by, 0, (int)by.Length);
}
fs.Close();
st.Close();
MessageBox.Show("下载完毕!");
}), null);
}
catch (Exception ex)
{
MessageBox.Show("提示" + ex.Message);
}
}

http://blog.bryht.net

http://blog.bryht.net

转载于:https://www.cnblogs.com/fcsh820/archive/2012/03/30/2424745.html

你可能感兴趣的文章
小D课堂 - 新版本微服务springcloud+Docker教程_3-03CAP原理、常见面试题
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-05 服务注册和发现Eureka Server搭建实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-06 服务注册和发现之Eureka Client搭建商品服务实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-07 Eureka服务注册中心配置控制台问题处理...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_4-03 高级篇幅之Ribbon负载均衡源码分析实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_4-05 微服务调用方式之feign 实战 订单调用商品服务...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-02 Netflix开源组件断路器
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-04 feign结合hystrix断路器开发实战下...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-03 feign结合hystrix断路器开发实战上...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_6-01 微服务网关介绍和使用场景
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-05熔断降级服务异常报警通知
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_6-03 高级篇幅之zuul常用问题分析
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-08 断路器监控仪表参数
查看>>
UI基础--烟花动画
查看>>
oracle之三 自动任务调度
查看>>
Android dex分包方案
查看>>
ThreadLocal为什么要用WeakReference
查看>>
删除本地文件
查看>>
FOC实现概述
查看>>
base64编码的图片字节流存入html页面中的显示
查看>>