Добрый день .. Пытаюсь сделать загручик файлов необходимы датчики скорости ,сколько загруженно ,весь размер .. Я сам новичёк но не могу понять Как это сделать
Использую Этот класс
| Код | using System; using System.Collections.Generic; using System.Text; using System.Net; using System.IO; using System.Threading; using System.Windows.Forms;
namespace Dwn123 { class Downloader { public DateTime DwNLoadChange; private const int chunkSize = 1024; private bool doDownload = true; public bool AcceptRanges = false; private string url; private string filename; private Thread downloadThread;
public long FileSize { get; private set; } public long Progress { get; private set; } public Downloader(string Url, string Filename) { this.url = Url; this.filename = Filename; this.CheckAcceptRanges(); }
public void StartDownload() { Progress = 0; FileSize = 0; commenceDownload(); }
public void PauseDownload() { doDownload = false; downloadThread.Join(); }
public void ResumeDownload() { doDownload = true; commenceDownload(); }
private void commenceDownload() { downloadThread = new Thread(downloadWorker); downloadThread.Start(); }
public void CheckAcceptRanges() { HttpWebRequest request = WebRequest.Create(this.url) as HttpWebRequest; request.Method = "HEAD"; var response = request.GetResponse() as HttpWebResponse; foreach (string sKey in response.Headers.Keys) { if (sKey.ToString() == "Accept-Ranges") { this.AcceptRanges = true; break; } else { this.AcceptRanges = false; } } }
public void downloadWorker() { HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url); FileMode filemode; if (Progress == 0) //Если сущетвет процесс "закачки" { filemode = FileMode.CreateNew; } else { filemode = FileMode.Append; myHttpWebRequest.AddRange((int)Progress); } using (FileStream fs = new FileStream(filename, filemode))
using (HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse()) { Stream receiveStream = myHttpWebResponse.GetResponseStream(); FileSize = myHttpWebResponse.ContentLength;
byte[] read = new byte[chunkSize]; int count;
while ((count = receiveStream.Read(read, 0, chunkSize)) > 0 && doDownload) { fs.Write(read, 0, count); count = receiveStream.Read(read, 0, chunkSize);
Progress += count; } } } } }
|
|