C#文件下载(实现断点续传)

  1    public class WebDown
  2     {
  4         /// 下载文件方法
  6         /// 文件保存路径和文件名
  7         /// 返回服务器文件名
  9         public static bool DeownloadFile(string sourceFile, string desFile)
 10         {
 11             bool flag = false;
 12             long SPosition = 0;
 13             FileStream FStream = null;
 14             Stream myStream = null;
 15             string fileName = sourceFile.Substring(sourceFile.LastIndexOf(@"/") + 1);
 16             if (desFile.EndsWith("\\"))
 17             {
 18                 desFile = desFile + fileName;
 19             }
 20             else
 21             {
 22                 desFile = desFile + "\\" + fileName;
 23             }
 24             try
 25             {
 26                 //判断要下载的文件夹是否存在
 27                 if (File.Exists(desFile))
 28                 {
 29                     //打开上次下载的文件
 30                     FStream = File.OpenWrite(desFile);
 31                     //获取已经下载的长度
 32                     SPosition = FStream.Length;
 33                     long serverFileLength = GetHttpLength(sourceFile);
 34                     if (SPosition == serverFileLength)
 35                     {//文件是完整的,直接结束下载任务
 36                         return true;
 37                     }
 38                     FStream.Seek(SPosition, SeekOrigin.Current);
 39                 }
 40                 else
 41                 {
 42                     //文件不保存创建一个文件
 43                     FStream = new FileStream(desFile, FileMode.Create);
 44                     SPosition = 0;
 45                 }
 46                 //打开网络连接
 47                 HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(sourceFile);
 48                 if (SPosition > 0)
 49                 {
 50                     myRequest.AddRange(SPosition);             //设置Range值
 51                 }
 52                 //向服务器请求,获得服务器的回应数据流
 53                 myStream = myRequest.GetResponse().GetResponseStream();
 54                 //定义一个字节数据
 55                 byte[] btContent = new byte[512];
 56                 int intSize = 0;
 57                 intSize = myStream.Read(btContent, 0, 512);
 58                 while (intSize > 0)
 59                 {
 60                     FStream.Write(btContent, 0, intSize);
 61                     intSize = myStream.Read(btContent, 0, 512);
 62                 }
 63                 flag = true;        //返回true下载成功
 64             }
 65             catch (Exception ex)
 66             {
 67                 SysLog.WriteTxtLog("下载文件时异常:" + ex.Message);
 68             }
 69             finally
 70             {
 71                 //关闭流
 72                 if (myStream != null)
 73                 {
 74                     myStream.Close();
 75                     myStream.Dispose();
 76                 }
 77                 if (FStream != null)
 78                 {
 79                     FStream.Close();
 80                     FStream.Dispose();
 81                 }
 82             }
 83             return flag;
 84         }
 85         static long GetHttpLength(string url)
 86         {
 87             long length = 0;
 88             try
 89             {
 90                 var req = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
 91                 req.Method = "HEAD";
 92                 req.Timeout = 5000;
 93                 var res = (HttpWebResponse)req.GetResponse();
 94                 if (res.StatusCode == HttpStatusCode.OK)
 95                 {
 96                     length = res.ContentLength;
 97                 }
 98                 res.Close();
 99                 return length;
100             }
101             catch (WebException wex)
102             {
103                 return 0;
104             }
105         }
106     }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值