Chuyên Đề Chương trình Download bằng C#

Thảo luận trong 'Công Nghệ Thông Tin' bắt đầu bởi Thúy Viết Bài, 5/12/13.

  1. Thúy Viết Bài

    Thành viên vàng

    Bài viết:
    198,891
    Được thích:
    167
    Điểm thành tích:
    0
    Xu:
    0Xu
    Chương trình download đây là bài tập lập trình mạng down thử bằng file: URL:http://www.winarchiver.com/WADrive28.exe path: D:WADrive28.exe nhé
    namespace Mydownload
    {
    public partial class Form1 : Form
    {
    private Thread thrDownload;
    private Stream strResponse;
    private Stream strLocal;
    private HttpWebRequest webRequest;
    private HttpWebResponse webResponse;
    private static int percentProgress;
    private delegate void UpdateProgessCallback(Int64 BytesRead, Int64 TotalBytes);
    bool pause = false;
    bool setproxy = false;
    private string server;
    Int64 maxLength;

    public Form1()
    {
    InitializeComponent();
    }


    private void UpdateProgress(Int64 BytesRead, Int64 TotalBytes)
    {

    percentProgress = Convert.ToInt32((BytesRead * 100)/TotalBytes);
    prgDownload.Value = percentProgress;
    lblProgress.Text = "Downloaded:" + BytesRead/8 + "out of" + TotalBytes/8 + "(" + percentProgress + "%)";

    }
    private void btnDownload_Click(object sender, EventArgs e)
    {
    if (setproxy == true)
    {
    server = btnServer.Text+":"+btnPort.Text+"/";

    }

    if (thrDownload != null && thrDownload.ThreadState == ThreadState.Running)
    {
    MessageBox.Show("Đang download file .", "Download in progress", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    else
    {
    lblProgress.Text = "Download Starting";
    thrDownload = new Thread(new ParameterizedThreadStart(Download));
    thrDownload.Start(0);
    btnPauseResume.Enabled = true;
    btnPauseResume.Text = "Pause";
    maxLength = Int64.Parse(btnMaxlength.Text.ToString());
    }
    }
    private void Download(object startPoint)
    {
    try
    {

    int startPointInt = Convert.ToInt32(startPoint);
    webRequest = (HttpWebRequest)WebRequest.Create(textBox1.Text);
    /* if (setproxy == true)
    {

    WebProxy proxyObject = new WebProxy(server, true);
    webRequest = (HttpWebRequest)WebRequest.Create(textBox1.Text);
    proxyObject =(WebProxy)webRequest.Proxy;
    webRequest.AddRange(startPointInt);
    proxyObject.Credentials = CredentialCache.DefaultCredentials;
    webRequest.Proxy = proxyObject;
    }*/
    if (setproxy == true)
    {
    WebProxy proxyObject = new WebProxy(server, true);
    webRequest.AddRange(startPointInt);
    webRequest.Proxy = proxyObject;
    proxyObject.Credentials = CredentialCache.DefaultCredentials;
    }
    else
    {
    webRequest.AddRange(startPointInt);
    webRequest.Credentials = CredentialCache.DefaultCredentials;
    }
    webResponse = (HttpWebResponse)webRequest.GetResponse();
    Int64 fileSize = webResponse.ContentLength;
    strResponse = webResponse.GetResponseStream();


    if (startPointInt == 0)
    {
    strLocal = new FileStream(textBox2.Text, FileMode.Create, FileAccess.Write, FileShare.None);
    }
    else
    {
    strLocal = new FileStream(textBox2.Text, FileMode.Append, FileAccess.Write, FileShare.None);
    }


    int bytesSize = 0;
    //Bộ nhớ đệm ghi lưu trữ dự liệu từ server
    byte[] downBuffer = new byte[2048];

    // Dừng khi bộ đệm trống
    if (downBuffer.Length < maxLength)
    {
    while ((bytesSize = strResponse.Read(downBuffer, 0, downBuffer.Length)) > 0)
    {
    strLocal.Write(downBuffer, 0, bytesSize);
    this.Invoke(new UpdateProgessCallback(this.UpdateProgress), new object[] { strLocal.Length, fileSize + startPointInt });

    if (pause == true)
    {
    MessageBox.Show("không thể down tiếp File bạn chọn", "Không thể thực hiện", MessageBoxButtons.OK, MessageBoxIcon.Error);
    break;
    }
    }
    }
    else
    {
    MessageBox.Show("File quá lớn không thể down", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);

    }

    }
    finally
    {

    strResponse.Close();
    strLocal.Close();
    }
    }
    private void btnStop_Click(object sender, EventArgs e)
    {
    thrDownload.Abort();
    webResponse.Close();
    strResponse.Close();
    strLocal.Close();
    prgDownload.Value = 0;
    lblProgress.Text = "Download Stopped";
    btnPauseResume.Enabled = false;
    }
    private void btnPauseResume_Click(object sender, EventArgs e)
    {

    if (thrDownload != null)
    {
    if (btnPauseResume.Text == "Pause")
    {
    pause = true;
    btnPauseResume.Text = "Resume";

    webResponse.Close();
    strResponse.Close();
    strLocal.Close();
    thrDownload.Abort();
    }
    else .
     

    Các file đính kèm:

Đang tải...