CSkin博客

标题: 【断点续传】C#下载文件断点续传的类 [打印本页]

作者: 乔克斯    时间: 2016-6-23 10:44
标题: 【断点续传】C#下载文件断点续传的类
说明:

这是一个普通的下载请求:
[HTML] 纯文本查看 复制代码
GET /test.txt HTTP/1.1  
Accept:*/*  
Referer:http://192.168.1.96  
Accept-Language:zh-cn  
Accept-Encoding:gzip,deflate  
User-Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.2;.NET CLR 2.0.50727)  
Host:192.168.1.96  
Connection:Keep-Alive  


这表示从1024字节开始断点续传(加入了Range:bytes=1024-):
[HTML] 纯文本查看 复制代码
GET /test.txt HTTP/1.1  
Accept:*/*  
Referer:http://192.168.1.96  
Accept-Language:zh-cn  
Accept-Encoding:gzip,deflate  
User-Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.2;.NET CLR 2.0.50727)  
Host:192.168.1.96  
Range:bytes=1024-  
Connection:Keep-Alive  


源码:
[C#] 纯文本查看 复制代码
#region 以断点续传方式下载文件  
  
/// <summary>  
/// 以断点续传方式下载文件  
/// </summary>  
/// <param name="strFileName">下载文件的保存路径</param>  
/// <param name="strUrl">文件下载地址</param>  
public void DownloadFile(string strFileName, string strUrl)  
{  
    //打开上次下载的文件或新建文件  
    long SPosition = 0;  
    FileStream FStream;  
    if (File.Exists(strFileName))  
    {  
        FStream = File.OpenWrite(strFileName);  
        SPosition = FStream.Length;  
        FStream.Seek(SPosition, SeekOrigin.Current);//移动文件流中的当前指针  
    }  
    else  
    {  
        FStream = new FileStream(strFileName, FileMode.Create);  
        SPosition = 0;  
    }  
    try  
    {  
        HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(strUrl);  
        if (SPosition > 0)  
            myRequest.AddRange((int)SPosition);//设置Range值  
        //向服务器请求,获得服务器的回应数据流  
        Stream myStream = myRequest.GetResponse().GetResponseStream();  
        byte[] btContent = new byte[512];  
        int intSize = 0;  
        intSize = myStream.Read(btContent, 0, 512);  
        while (intSize > 0)  
        {  
            FStream.Write(btContent, 0, intSize);  
            intSize = myStream.Read(btContent, 0, 512);  
        }  
        FStream.Close();  
        myStream.Close();  
        //文件下载完成  
    }  
    catch  
    {  
        FStream.Close();  
    }  
}  

#endregion


案例源码下载:
断点续传下载文件.rar (80.5 KB, 下载次数: 117, 售价: 1 金钱)

作者: 贱贱的贱贱    时间: 2016-6-23 12:15
强强强·~·
作者: 忧郁之子    时间: 2016-6-24 18:49
好东西,谢谢分享,支持了。
作者: liqud    时间: 2016-6-28 08:50
没想到原理这么简单哈
作者: yi77b    时间: 2016-7-2 00:45
马克一下~ 感谢
作者: isml    时间: 2016-12-1 13:53
不错,学习了
作者: xifengcanyue    时间: 2017-1-12 19:25
厉害了,学习了
作者: Eval    时间: 2017-5-16 10:16
好东西,谢谢分享,支持了




欢迎光临 CSkin博客 (http://bbs.cskin.net/) Powered by Discuz! X3.2