All pastes #232073 Raw Edit

Untitled

public text v1 · immutable
·published 2006-11-01 05:18 UTC
rendered paste body
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Threading;

namespace sDownQVGA
{
    public partial class sDown : Form
    {
        private string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
        private About _about = new About();
        delegate void SetTextCallback(string text);

        public sDown()
        {
            InitializeComponent();
        }

        private void DownloadFile(String remoteFilename, String localFilename)
        {
            // Function will return the number of bytes processed
            // to the caller. Initialize to 0 here.
            int bytesProcessed = 0;

            // Assign values to these objects here so that they can
            // be referenced in the finally block
            Stream remoteStream = null;
            Stream localStream = null;
            WebResponse response = null;

            // Use a try/catch/finally block as both the WebRequest and Stream
            // classes throw exceptions upon error
            try
            {
                // Create a request for the specified remote file name
                WebRequest request = WebRequest.Create(remoteFilename);
                if (request != null)
                {
                    debug.Text = "Connecting...";
                    debug.Refresh();

                    // Send the request to the server and retrieve the
                    // WebResponse object
                    response = request.GetResponse();
                    if (response != null)
                    {
                        debug.Text = "Downloading...";
                        debug.Refresh();

                        // Once the WebResponse object has been retrieved,
                        // get the stream object associated with the response's data
                        remoteStream = response.GetResponseStream();

                        // Create the local file
                        localStream = File.Create(localFilename);

                        // Allocate a 1k buffer
                        byte[] buffer = new byte[1024];
                        int bytesRead;

                        progressBar1.Visible = true;
                        progressBar1.Refresh();

                        rate.Visible = true;
                        rate.Refresh();

                        // Simple do/while loop to read from stream until
                        // no bytes are returned
                        do
                        {
                            // Read data (up to 1k) from the stream
                            bytesRead = remoteStream.Read(buffer, 0, buffer.Length);

                            // Write the data to the local file
                            localStream.Write(buffer, 0, bytesRead);

                            // Increment total bytes processed
                            bytesProcessed += bytesRead;

                            UpdateProgress(bytesProcessed, response.ContentLength);
                        } while (bytesRead > 0);
                        UpdateProgress(0, 0);
                        rate.Visible = false;
                        rate.Refresh();
                        progressBar1.Visible = false;
                        progressBar1.Refresh();
                        debug.Text = "Success! " + bytesProcessed + " bytes written.";
                    }
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                debug.Text = "";
            }
            finally
            {
                // Close the response and streams objects here
                // to make sure they're closed even if an exception
                // is thrown at some point
                if (response != null) response.Close();
                if (remoteStream != null) remoteStream.Close();
                if (localStream != null) localStream.Close();
            }
        }

        private void UpdateProgress(int value, long max)
        {
            value = value / 1000;
            max = max / 1000;

            progressBar1.Minimum = 0;
            progressBar1.Maximum = (int)max;
            progressBar1.Value = value;

            rate.Text = "" + value + "kB / " + Convert.ToInt64(max) + "kB";
            rate.Refresh();
        }

        private void BeginDownload()
        {
            string[] split = SetSaveAs(textBoxURL.Text.Split('/'));
            string tmp = split[(split.Length - 1)];

            if (textBoxSaveAs.Text == "")
            {
                DownloadFile(textBoxURL.Text, path + "\\" + tmp);
            }
            else
            {
                DownloadFile(textBoxURL.Text, path + "\\" + textBoxSaveAs.Text);
            }
        }

        private void textBoxSaveAs_GotFocus(object sender, EventArgs e)
        {
            if (textBoxSaveAs.Text == "")
            {
                string[] split = textBoxURL.Text.Split('/');
                textBoxSaveAs.Text = split[(split.Length - 1)];
            }
        }

        private void menuItem3_Click(object sender, EventArgs e)
        {
            _about.Show();
        }

        private void menuItem4_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void menuItem2_Click(object sender, EventArgs e)
        {
            string[] split = textBoxURL.Text.Split('/');
            string tmp = split[(split.Length - 1)];
            textBoxSaveAs.Text = tmp;

            new Thread(new ThreadStart(BeginDownload)).Start();
        }

        private void SetSaveAs(string text)
        {
            if (textBoxSaveAs.InvokeRequired)
            {
                SetTextCallback d = new SetTextCallback(SetSaveAs);
                this.Invoke(d, new object[] { text });
            }
            else
            {
                string[] split = textBoxURL.Text.Split('/');
                string tmp = split[(split.Length - 1)];
            }
        }
    }
}