using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Net; namespace XcDownLoadFile { public class DownLoadFile { /// /// 下載文件方法 /// /// 文件保存路徑和文件名 /// 返回服務(wù)器文件名 /// public bool DeownloadFile(string strFileName, string file) { bool flag = false; //打開上次下載的文件 long SPosition = 0; //實(shí)例化流對(duì)象 FileStream FStream; //判斷要下載的文件夾是否存在 if (File.Exists(strFileName)) { //打開要下載的文件 FStream = File.OpenWrite(strFileName); //獲取已經(jīng)下載的長(zhǎng)度 SPosition = FStream.Length; FStream.Seek(SPosition, SeekOrigin.Current); } else { //文件不保存創(chuàng)建一個(gè)文件 FStream = new FileStream(strFileName, FileMode.Create); SPosition = 0; } try { //打開網(wǎng)絡(luò)連接 HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create("http://www./download/" + file); if (SPosition > 0) myRequest.AddRange((int)SPosition); //設(shè)置Range值 //向服務(wù)器請(qǐng)求,獲得服務(wù)器的回應(yīng)數(shù)據(jù)流 Stream myStream = myRequest.GetResponse().GetResponseStream(); //定義一個(gè)字節(jié)數(shù)據(jù) 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); } //關(guān)閉流 FStream.Close(); myStream.Close(); flag = true; //返回true下載成功 } catch (Exception) { FStream.Close(); flag = false; //返回false下載失敗 } return flag; } } } (待研究) 我覺得這個(gè)不能實(shí)現(xiàn)斷點(diǎn)下載的,
應(yīng)該在 FStream.Write(btContent, 0,
intSize);調(diào)用下Flush()方法才可以。你不調(diào)用的話就內(nèi)存里面一直都是512個(gè)字節(jié)的,
調(diào)用這個(gè)這個(gè)方法含義就是把字節(jié)寫進(jìn)文件里面,并清空內(nèi)存的中的buffer。 |
|