C#多线程下载一个文件
2024-08-26 01:40:17
这里只是说明多线程下载的理论基础,嘿嘿,并没有写多线程下载的代码,标题党了,但是我相信,看完这个代码就应该能够多线程的方式去下载一个文件了.
多线程下载是需要服务器支持的,这里并没有判断服务器不支持的情况.
其原理
在发送 http 请求时标记头文件,告诉服务器我需要这个文件的 第几个字节 到 第几个字节.如果服务器不支持让你分段取文件,可以想想看服务器会怎么做. 没错,他把整个文件给你了.
一定得判断 服务器不支持 的情况.
public void Worker()
{
string url = "http://files.cnblogs.com/cnryb/HttpSer.zip";
string path = "a.zip"; using (FileStream fs = new FileStream(
path,
FileMode.OpenOrCreate,
FileAccess.Write,
FileShare.Read,
2048,
FileOptions.RandomAccess
))
{
//先下载文件的第100个字节到最后
fs.Seek(100, SeekOrigin.Begin);
Down(fs, url, 100); //下载前100个字节
fs.Seek(0, SeekOrigin.Begin);
Down(fs, url, 0, 99);
}
}
public void Down(FileStream fs, string url, int start, int end = -1)
{
HttpWebRequest hwr = WebRequest.Create(url) as HttpWebRequest;
if (end == -1)
hwr.AddRange(start);
else
hwr.AddRange(start, end);
HttpWebResponse resp = hwr.GetResponse() as HttpWebResponse;
using (Stream input = resp.GetResponseStream())
{
byte[] bs = new byte[2048];
int count;
while ((count = input.Read(bs, 0, bs.Length)) != 0)
{
fs.Write(bs, 0, count);
}
}
}
最新文章
- Java并发编程:并发容器之ConcurrentHashMap(转载)
- ThinkPHP整合支付宝担保交易
- Sublime Text3
- 分享个新浪下载图片的ProgressBar进度样式
- 《Cortex-M0权威指南》之体系结构---程序映像和启动流程
- 初次使用nodejs的问题
- Bit Map解析
- 关于java sort的几种实现方式(单纯排序,按照bean的某一个字段,按照bean的多个字段)
- jquery简易版xwPop.js弹出消息对话框插件
- BZOJ1095:[ZJOI2007]Hide 捉迷藏(动态点分治)
- windows下python虚拟环境virtualenv安装和使用
- springboot:session集中存储到redis
- kettle的下载、安装和初步使用(windows平台下)(图文详解)
- bzoj 4084 双旋转字符串
- linux mv命令详解
- TCP 协议连接与关闭的握手
- Hadoop源码阅读-HDFS-day2
- hybrid app 知识点
- 高并发大容量NoSQL解决方案探索
- 虚拟机NAT网络设置