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;
}
}
}