国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#實現文件斷點續傳下載的方法

2020-01-24 01:51:57
字體:
來源:轉載
供稿:網友

本文實例講述了C#實現文件斷點續傳下載的方法。分享給大家供大家參考。具體實現方法如下:

using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.IO;using System.Text;using System.Net;namespace simpleDemo{ class Program {  /// <summary>  /// 下載文件保留字  /// </summary>  public static string PERSIST_EXP = ".cdel";  /// <summary>   public static void Main(string[] args)  {   string path = "D://aa.txt";   string ec = getFileEncoding(path, "GB2312");   print("coding: " + ec);   // string content = fileReader(path, Encoding.GetEncoding(ec));   // print(content);   //fileWriter(path, "測試內容11", Encoding.GetEncoding(ec));   string url = "http://www.XXX.com/20120920172200024.flv";   string path1 = "D://aa1.flv";   download(url, path1);   //gapDownload(url, path1);   //t(url);  }  public static void t(string url) {   HttpWebRequest request = (System.Net.HttpWebRequest)HttpWebRequest.Create(url);   //WebResponse response = httpClient.CreateGetHttpResponse(url, 3000, null, null);   try {    WebResponse response = request.GetResponse();    WebHeaderCollection headers = response.Headers;    print(response.ContentLength);    request = (System.Net.HttpWebRequest)HttpWebRequest.Create(url);    request.AddRange(11); //設置Range值    WebResponse response1 = request.GetResponse();    print(response1.ContentLength);    foreach (string key in headers)    {     print(key + "----- " + headers.Get(key));    }    string disposition = headers.Get("Content-Disposition");    print(disposition);   }catch(Exception e){    print(e.Message);   }   //string fileName = disposition.Substring(disposition.IndexOf("/""));   //print(fileName);  }  public static void download(string url, string path) {   if (File.Exists(path))   {    print("文件己存在!是否重新下載?");    return;   }   else {    path = path + PERSIST_EXP;    simpleDownload(url,path);//開始下載   }   }  /// <summary>  /// 下載網絡資源(支持斷點續傳)  /// </summary>  /// <param name="url"></param>  /// <param name="path"></param>  public static void simpleDownload(string url, string path)  {   HttpWebRequest request = httpClient.getWebRequest(url, 0);   WebResponse response = null;   FileStream writer = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);   long lStartPos = writer.Length; ;//當前文件大小   long currentLength = 0;   long totalLength = 0;//總大小    if (File.Exists(path))//斷點續傳   {    response = request.GetResponse();    long sTotal = response.ContentLength;    if (sTotal == lStartPos) {     close(writer);     File.Move(path, path.Replace(PERSIST_EXP, ""));     print("下載完成!");     return;    }    request = httpClient.getWebRequest(url, (int)lStartPos);    //設置Range值    writer.Seek(lStartPos, SeekOrigin.Begin);//指針跳轉    response = request.GetResponse();    totalLength = response.ContentLength + lStartPos; //總長度    currentLength = lStartPos; //當前長度   }   else   {    response = request.GetResponse();    totalLength = response.ContentLength;   }   Stream reader = response.GetResponseStream();   byte[] buff = new byte[1024];   int c = 0; //實際讀取的字節數   while ((c = reader.Read(buff, 0, buff.Length)) > 0)   {    currentLength += c;    writer.Write(buff, 0, c);    progressBar(currentLength, totalLength);//進度條    writer.Flush();   }   close(writer);   if (currentLength == totalLength)   {    File.Move(path, path.Replace(PERSIST_EXP, ""));    print("下載完成!");   }   if (reader != null)   {    reader.Close();    reader.Dispose();    response.Close();   }  }  private static void close(FileStream writer)  {   if (writer != null)   {    writer.Close();    writer.Dispose();   }  }  /// <summary>  /// 進度條  /// </summary>  /// <param name="currentLength">當前長度</param>  /// <param name="totalLength">總長度</param>  public static void progressBar(Object currentLength, Object totalLength)  {   double aaa = System.Convert.ToDouble(currentLength);   double bbb = System.Convert.ToDouble(totalLength);   print(currentLength + "/" + totalLength + "__" + (aaa / bbb).ToString("0.00 %"));  }  /// <summary>  /// 系統輸出  /// </summary>  /// <param name="obj"></param>  public static void print(Object obj){   Console.WriteLine(obj);  }  public static void printStr(string[] str)  {   foreach (string d in str)   {    print(d);   }  }  /// <summary>  /// 文件寫  /// </summary>  /// <param name="path">文件路徑</param>  /// <param name="content">要寫入的內容</param>  public static void fileWriter(string path,string content,Encoding encoding)  {   if (File.Exists(path))   {    StreamWriter sw = new StreamWriter(path, true, encoding);    sw.WriteLine(content);    sw.Flush();    sw.Close();   }  }  /// <summary>  /// 讀文件,返回內容  /// </summary>  /// <param name="path">文件路徑</param>  /// <param name="enCoding">默認編碼格式</param>  /// <returns></returns>  public static string fileReader(string path,Encoding enCoding) {   StringBuilder sb = new StringBuilder();   if(enCoding == null){    enCoding = Encoding.Default;   }   //讀取文件   StreamReader sr = new StreamReader(path, enCoding);    string s = "";    while ((s = sr.ReadLine()) != null)    {     sb.AppendLine(s);    }    if(sr != null)     sr.Close();   return sb.ToString();  }  /// <summary>  /// 獲取文件編碼格式  /// </summary>  /// <param name="path">文件路徑</param>  /// <param name="defaultEncoding">默認編碼</param>  /// <returns></returns>  public static string getFileEncoding(string path, string defaultEncoding) {   string ed = defaultEncoding;   if (File.Exists(path)) {    FileStream fs = new FileStream(path, FileMode.Open);    ed = GetEncoding(fs, defaultEncoding);    if (fs != null)     fs.Close();    }   return ed;  }  /// <summary>  /// 取得一個文本文件流的編碼方式。  /// </summary>  /// <param name="stream">文本文件流。</param>  /// <param name="defaultEncoding">默認編碼方式。當該方法無法從文件的頭部取得有效的前導符時,將返回該編碼方式。</param>  /// <returns></returns>  public static string GetEncoding(FileStream stream, string defaultEncoding)  {   string targetEncoding = defaultEncoding;   if (stream != null && stream.Length >= 2)   {    //保存文件流的前4個字節    byte byte1 = 0;    byte byte2 = 0;    byte byte3 = 0;    byte byte4 = 0;    //保存當前Seek位置    long origPos = stream.Seek(0, SeekOrigin.Begin);    stream.Seek(0, SeekOrigin.Begin);    int nByte = stream.ReadByte();    byte1 = Convert.ToByte(nByte);    byte2 = Convert.ToByte(stream.ReadByte());    if (stream.Length >= 3)    {     byte3 = Convert.ToByte(stream.ReadByte());    }    if (stream.Length >= 4)    {     byte4 = Convert.ToByte(stream.ReadByte());    }    //根據文件流的前4個字節判斷Encoding    //Unicode {0xFF, 0xFE};    //BE-Unicode {0xFE, 0xFF};    //UTF8 = {0xEF, 0xBB, 0xBF};    if (byte1 == 0xFE && byte2 == 0xFF)//UnicodeBe    {     targetEncoding = Encoding.BigEndianUnicode.BodyName;    }    if (byte1 == 0xFF && byte2 == 0xFE && byte3 != 0xFF)//Unicode    {     targetEncoding = Encoding.Unicode.BodyName;    }    if (byte1 == 0xEF && byte2 == 0xBB && byte3 == 0xBF)//UTF8    {     targetEncoding = Encoding.UTF8.BodyName;    }    //恢復Seek位置     stream.Seek(origPos, SeekOrigin.Begin);   }   return targetEncoding;  } }}using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.Net.Security;using System.Security.Cryptography.X509Certificates;using System.IO;namespace simpleDemo{ /// <summary> /// 公用 Http 請求類 /// </summary> class httpClient {  /// <summary>  /// 獲取基礎WebRequest  /// </summary>  /// <param name="url">請求地址</param>  /// <param name="lStartPos">請求的開始位置</param>  /// <returns></returns>  public static HttpWebRequest getWebRequest(string url, int lStartPos)  {   HttpWebRequest request = null;   try   {    request = (System.Net.HttpWebRequest)HttpWebRequest.Create(url);    request.AddRange(lStartPos); //設置Range值   }   catch (Exception ex)   {    Program.print(ex.Message);   }   return request;  } }}

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 虞城县| 梅河口市| 永昌县| 惠东县| 万全县| 旺苍县| 瑞丽市| 海原县| 定陶县| 昌黎县| 长宁县| 绥滨县| 西贡区| 永寿县| 台湾省| 西昌市| 崇义县| 余庆县| 卢龙县| 阜平县| 民权县| 靖远县| 林周县| 镇远县| 客服| 江永县| 阿城市| 祁连县| 沙洋县| 喀喇沁旗| 高雄市| 武冈市| 郁南县| 崇文区| 都江堰市| 宁武县| 田阳县| 壤塘县| 安多县| 尼勒克县| 阳泉市|