using System; 
 using System.Drawing; 
 using System.Collections; 
 using System.ComponentModel; 
 using System.Windows.Forms; 
 using System.Data; 
 using ; 
 using System.IO; 
 using System.Threading; 
    
 namespace MyGetCar 
 { 
  /// 
  /// Form1 的摘要说明。 
  /// 
  public class Form1 : System.Windows.Forms.Form 
  { 
   private System.Windows.Forms.Label label1; 
   private System.Windows.Forms.Label label2; 
   private System.Windows.Forms.TextBox srcAddress; 
   private System.Windows.Forms.TextBox tarAddress; 
   private System.Windows.Forms.StatusBar statusBar; 
   private System.Windows.Forms.Button Start; 
    
   private WebClient client = new WebClient();
   
    
   /// 
   /// 必需的设计器变量。 
   /// 
   private System.ComponentModel.Container components = null; 
    
   public Form1() 
   { 
    // 
    // Windows 窗体设计器支持所必需的 
    // 
    InitializeComponent(); 
    
    // 
    // TODO: 在 InitializeComponent 调用后添加任何构造函数代码 
    // 
   } 
    
   /// 
   /// 清理所有正在使用的资源。 
   /// 
   protected override void Dispose( bool disposing ) 
   { 
    if( disposing ) 
    { 
     if (components != null) 
     { 
      components.Dispose(); 
     } 
    } 
    base.Dispose( disposing ); 
   } 
    
   #region Windows Form Designer generated code 
   /// 
   /// 设计器支持所需的方法 - 不要使用代码编辑器修改 
   /// 此方法的内容。 
   /// 
   private void InitializeComponent() 
   { 
    this.label1 = new System.Windows.Forms.Label();
    this.label2 = new System.Windows.Forms.Label();
    this.srcAddress = new System.Windows.Forms.TextBox();
    this.tarAddress = new System.Windows.Forms.TextBox();
    this.statusBar = new System.Windows.Forms.StatusBar();
    this.Start = new System.Windows.Forms.Button();
    this.button1 = new System.Windows.Forms.Button();
    this.SuspendLayout();
    // 
    // label1
    // 
    this.label1.Location = new System.Drawing.Point(8, 32);
     = "label1";
    this.label1.Size = new System.Drawing.Size(72, 23);
    this.label1.TabIndex = 0;
    this.label1.Text = "文件地址:";
    this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
    // 
    // label2
    // 
    this.label2.Location = new System.Drawing.Point(8, 72);
     = "label2";
    this.label2.Size = new System.Drawing.Size(72, 23);
    this.label2.TabIndex = 1;
    this.label2.Text = "另存到:";
    this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
    // 
    // srcAddress
    // 
    this.srcAddress.Location = new System.Drawing.Point(80, 32);
     = "srcAddress";
    this.srcAddress.Size = new System.Drawing.Size(216, 21);
    this.srcAddress.TabIndex = 2;
    this.srcAddress.Text = "";
    // 
    // tarAddress
    // 
    this.tarAddress.Location = new System.Drawing.Point(80, 72);
     = "tarAddress";
    this.tarAddress.Size = new System.Drawing.Size(216, 21);
    this.tarAddress.TabIndex = 3;
    this.tarAddress.Text = "";
    // 
    // statusBar
    // 
    this.statusBar.Location = new System.Drawing.Point(0, 151);
     = "statusBar";
    this.statusBar.Size = new System.Drawing.Size(312, 22);
    this.statusBar.TabIndex = 4;
    // 
    // Start
    // 
    this.Start.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
    this.Start.Location = new System.Drawing.Point(216, 112);
     = "Start";
    this.Start.Size = new System.Drawing.Size(75, 24);
    this.Start.TabIndex = 5;
    this.Start.Text = "开始下载";
    this.Start.Click += new System.EventHandler(this.Start_Click);
    
    // 
    // Form1
    // 
    this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
    this.ClientSize = new System.Drawing.Size(312, 173);
    this.Controls.Add(this.button1);
    this.Controls.Add(this.Start);
    this.Controls.Add(this.statusBar);
    this.Controls.Add(this.tarAddress);
    this.Controls.Add(this.srcAddress);
    this.Controls.Add(this.label2);
    this.Controls.Add(this.label1);
    this.MaximizeBox = false;
     = "Form1";
    this.Text = "文件下载器";
    this.ResumeLayout(false); 
   } 
   #endregion 
    
   /// 
   /// 应用程序的主入口点。 
   /// 
   [STAThread] 
   static void Main() 
   { 
    Application.Run(new Form1()); 
   } 
    
   private void StartDownload() 
   { 
    Start.Enabled = false; 
    string URL = srcAddress.Text; 
    int n = URL.LastIndexOf("?"); 
    string URLAddress = URL; 
    //string URLAddress = URL.Substring(0,n);
    string fileName = URL.Substring(n+1,URL.Length-n-1); 
    string Dir = tarAddress.Text; 
    string Path = Dir+fileName; 
    
    try 
    { 
     WebRequest myre=WebRequest.Create(URLAddress); 
    } 
    catch(WebException exp) 
    { 
     MessageBox.Show(exp.Message,"Error"); 
    } 
    
    try 
    { 
     statusBar.Text = "开始下载文件..."; 
     client.DownloadFile(URLAddress,fileName); 
     Stream str = client.OpenRead(URLAddress); 
     //StreamReader reader = new StreamReader(str); ,这句没有什么必要!个人认为
     byte[] mbyte = new byte[100000]; 
     int allmybyte = (int)mbyte.Length; 
     int startmbyte = 0; 
     statusBar.Text = "正在接收数据..."; 
     //写入到BYTE数组中,起缓冲作用
     while(allmybyte>0) 
     { 
      int m = str.Read(mbyte,startmbyte,allmybyte); 
      if(m==0) 
       break; 
    
      startmbyte+=m; 
      allmybyte-=m; 
     } 
    
     FileStream fstr = new FileStream(Path,FileMode.OpenOrCreate,FileAccess.Write); 
     fstr.Write(mbyte,0,startmbyte); 
     str.Close(); 
     fstr.Close(); 
    
     statusBar.Text = "下载完毕!"; 
    } 
    catch(WebException exp) 
    { 
     MessageBox.Show(exp.Message,"Error"); 
     statusBar.Text = ""; 
    } 
    
    Start.Enabled = true; 
   } 
    
    
   private void Start_Click(object sender, System.EventArgs e) 
   { 
    Thread th = new Thread(new ThreadStart(StartDownload)); 
    th.Start(); 
   }   
  } 
 }