zoukankan      html  css  js  c++  java
  • 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     }
  • 相关阅读:
    [noip2018]day1
    [CF1110d]JONGMAH
    BZOJ 2733 [HNOI2012]永无乡
    BZOJ 3123 [SDOI2013] 森林
    Nowcoder 练习赛26E 树上路径
    Luogu 2575 高手过招-SG函数
    BZOJ 1123[POI2008]BLO-Tarjan
    Nowcoder OI赛制测试2 F 假的数学题
    Luogu 2467[SDOI2010]地精部落
    Luogu 2216[HAOI2007]理想的正方形
  • 原文地址:https://www.cnblogs.com/lgx5/p/9748454.html
Copyright © 2011-2022 走看看