比如已知url为http://www.123.com/123.rar单击按钮将123.rar下载到指定目录下该如何实现?请给出详细源代码...3Q

解决方案 »

  1.   

    StreamWrite StreamRead文本文件操作吧
      

  2.   

            /// <summary>
            /// 下载文件通用函数。
            /// </summary>
            /// <param name="webfilepath">网上的地址URL</param>
            /// <param name="bdfilepath">保存到电脑上的路径</param>
            private static void is下载通用类主要用来下载更新后的文件(string webfilepath, string bdfilepath)
            {
                string URL = webfilepath;
                string Path = bdfilepath;
                try
                {
                    WebRequest myre = WebRequest.Create(URL);
                }
                catch (WebException exp)
                {
                    MessageBox.Show(exp.Message, "Error");
                }
                try
                {
                    client.DownloadFile(URL, Path);
                    Stream str = client.OpenRead(URL);
                    StreamReader reader = new StreamReader(str);
                    byte[] mbyte = new byte[100000];
                    int allmybyte = (int)mbyte.Length;
                    int startmbyte = 0;
                    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();                MessageBox.Show("文件下载完成!", "提示信息:"
                        , MessageBoxButtons.OK
                        , MessageBoxIcon.Information);            }
                catch (WebException exp)
                {
                    MessageBox.Show(exp.Message, "Error");
                }
            }
      

  3.   


    楼上的代码是复制别人的?怎么我见过一个和你差不多的,但是这代码都有问题,会抛出错误,按以前那个代码会抛出一个403错误,你的少了private WebClient client = new WebClient();
    加上了会抛出一个webclient请求期间发生异常的错误...
    还是不行....希望高人发个能用的代码吧...
      

  4.   

    附上以前一位网友给我的代码
    using System;
      using System.Drawing;
      using System.Collections;
      using System.ComponentModel;
      using System.Windows.Forms;
      using System.Data;
      using System.Net;
      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[Page]
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
      /// 此方法的内容。
      ///
      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.SuspendLayout();
      //
      // label1
      //
      this.label1.Location = new System.Drawing.Point(8, 32);
      this.label1.Name = "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);
      this.label2.Name = "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);
      this.srcAddress.Name = "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);
      this.tarAddress.Name = "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);
      this.statusBar.Name = "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);
      this.Start.Name = "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.AddRange(new System.Windows.Forms.Control[] {
      this.Start,
      this.statusBar,
      this.tarAddress,
      this.srcAddress,
      this.label2,
      this.label1});
      this.MaximizeBox = false;[Page]
      this.Name = "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.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 = "正在接收数据...";
      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();
      }
      }
      }