国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

用C# Builder實現文件下載

2024-07-21 02:26:21
字體:
來源:轉載
供稿:網友

一.概述:   
    本文通過一個實例向大家介紹用c# builder進行internet通訊編程的一些基本知識。我們知道.net類包含了請求/響應層、應用協議層、傳輸層等層次。在本程序中,我們運用了位于請求/響應層的webrequest類以及webclient類等來實現高抽象程度的internet通訊服務。本程序的功能是完成文件的下載。
二.實現原理:   
    程序實現的原理比較簡單,主要用到了webclient類和filestream類。其中webclient類處于system.net名字空間中,該類的主要功能是提供向uri標識的資源發送數據和從uri標識的資源接收數據的公共方法。我們利用其中的downfile()方法將文件下載到本地。然后用filestream類的實例對象以數據流的方式將文件數據寫入本地文件。這樣就完成了文件的下載。
三.實現步驟:
    1.首先,打開c# builder,file->new->c# application,name這里我們設為"download"。
    2.主界界的設置。text設為“文件下載”,startposition設為centerscreen,maximizebox設為false,我們在主窗體上添加如下控件:兩個標簽控件label1,label2、一個文本框控件textbox1、一個按鈕控件button1以及一個進度條控件progressbar1。
    label1:text為url;label2:text為下載進度;textbox1:text設為空;button1:text設為下載;
    3.程序的編碼
     //過程downfile,用于完成文件的下載
  private void downfile()
  {
   string filename;
   webclient downfile=new webclient();
   long fbytes;
   if (textbox1.text!="")
   {
     savefiledialog1.showdialog();
     filename=savefiledialog1.filename;
     if(filename!= "")
     {
      //取得文件大小
      webrequest wr_request=webrequest.create(textbox1.text);
      webresponse wr_response=wr_request.getresponse();
      fbytes=wr_response.contentlength;
      progressbar1.maximum=(int)fbytes;
      progressbar1.step=1;
      wr_response.close();
                           //開始下載數據
      downfile.downloaddata(textbox1.text);
      stream strm = downfile.openread(textbox1.text);
      streamreader reader = new streamreader(strm);
      byte[] mbyte = new byte[fbytes];
      int allmybyte = (int)mbyte.length;
      int startmbyte = 0;
      while(fbytes>0)
      {
     int m = strm.read(mbyte,startmbyte,allmybyte);
     if(m==0) break;
     startmbyte+=m;
     allmybyte-=m;
     progressbar1.value+=m;
      }
      filestream fstrm = new filestream(filename,filemode.openorcreate,fileaccess.write);
      fstrm.write(mbyte,0,startmbyte);
      strm.close();
      fstrm.close();
      progressbar1.value=progressbar1.maximum;
     }
   } else
   {
      messagebox.show("沒有輸入要下載的文件!");
   }
  }

     //雙擊“下載”按鈕,輸入以下代碼:
     thread th = new thread(new threadstart(downfile));
     th.start();

      //完整的代碼如下:
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 download
{
 /// <summary>
 /// summary description for winform.
 /// </summary>
 public class winform : system.windows.forms.form
 {
  /// <summary>
  /// required designer variable.
  /// </summary>
  private system.componentmodel.container components = null;
  private system.windows.forms.label label1;
  private system.windows.forms.textbox textbox1;
  private system.windows.forms.button button1;
  private system.windows.forms.savefiledialog savefiledialog1;
  private system.windows.forms.label label2;
  private system.windows.forms.progressbar progressbar1;

  public winform()
  {
   //
   // required for windows form designer support
   //
   initializecomponent();

   //
   // todo: add any constructor code after initializecomponent call
   //
  }

  /// <summary>
  /// clean up any resources being used.
  /// </summary>
  protected override void dispose (bool disposing)
  {
   if (disposing)
   {
    if (components != null)
    {
     components.dispose();
    }
   }
   base.dispose(disposing);
  }

  #region windows form designer generated code
  /// <summary>
  /// required method for designer support - do not modify
  /// the contents of this method with the code editor.
  /// </summary>
  private void initializecomponent()
  {
   this.label1 = new system.windows.forms.label();
   this.textbox1 = new system.windows.forms.textbox();
   this.button1 = new system.windows.forms.button();
   this.savefiledialog1 = new system.windows.forms.savefiledialog();
   this.label2 = new system.windows.forms.label();
   this.progressbar1 = new system.windows.forms.progressbar();
   this.suspendlayout();
   //
   // label1
   //
   this.label1.location = new system.drawing.point(40, 40);
   this.label1.name = "label1";
   this.label1.size = new system.drawing.size(40, 16);
   this.label1.tabindex = 0;
   this.label1.text = "url:";
   //
   // textbox1
   //
   this.textbox1.location = new system.drawing.point(72, 36);
   this.textbox1.name = "textbox1";
   this.textbox1.size = new system.drawing.size(256, 21);
   this.textbox1.tabindex = 1;
   this.textbox1.text = "";
   //
   // button1
   //
   this.button1.location = new system.drawing.point(256, 120);
   this.button1.name = "button1";
   this.button1.tabindex = 2;
   this.button1.text = "下載";
   this.button1.click += new system.eventhandler(this.button1_click);
   //
   // label2
   //
   this.label2.location = new system.drawing.point(8, 80);
   this.label2.name = "label2";
   this.label2.size = new system.drawing.size(72, 23);
   this.label2.tabindex = 3;
   this.label2.text = "下載進度:";
   //
   // progressbar1
   //
   this.progressbar1.location = new system.drawing.point(72, 80);
   this.progressbar1.name = "progressbar1";
   this.progressbar1.size = new system.drawing.size(256, 16);
   this.progressbar1.tabindex = 4;
   //
   // winform
   //
   this.autoscalebasesize = new system.drawing.size(6, 14);
   this.clientsize = new system.drawing.size(360, 173);
   this.controls.add(this.progressbar1);
   this.controls.add(this.label2);
   this.controls.add(this.button1);
   this.controls.add(this.textbox1);
   this.controls.add(this.label1);
   this.maximizebox = false;
   this.name = "winform";
   this.startposition = system.windows.forms.formstartposition.centerscreen;
   this.text = "文件下載";
   this.resumelayout(false);
  }
  #endregion

  /// <summary>
  /// the main entry point for the application.
  /// </summary>
  [stathread]
  static void main()
  {
   application.run(new winform());
  }

  private void downfile()
  {
   string filename;
   webclient downfile=new webclient();
   long fbytes;
   if (textbox1.text!="")
   {
     savefiledialog1.showdialog();
     filename=savefiledialog1.filename;
     if(filename!= "")
     {
      //取得文件大小
      webrequest wr_request=webrequest.create(textbox1.text);
      webresponse wr_response=wr_request.getresponse();
      fbytes=wr_response.contentlength;
      progressbar1.maximum=(int)fbytes;
      progressbar1.step=1;
      wr_response.close();
      //開始下載數據
      downfile.downloaddata(textbox1.text);
      stream strm = downfile.openread(textbox1.text);
      streamreader reader = new streamreader(strm);
      byte[] mbyte = new byte[fbytes];
      int allmybyte = (int)mbyte.length;
      int startmbyte = 0;
      while(fbytes>0)
      {
     int m = strm.read(mbyte,startmbyte,allmybyte);
     if(m==0) break;
     startmbyte+=m;
     allmybyte-=m;
     progressbar1.value+=m;
      }
      filestream fstrm = new filestream(filename,filemode.openorcreate,fileaccess.write);
      fstrm.write(mbyte,0,startmbyte);
      strm.close();
      fstrm.close();
      progressbar1.value=progressbar1.maximum;
     }
   } else
   {
      messagebox.show("沒有輸入要下載的文件!");
   }
  }
  private void button1_click(object sender, system.eventargs e)
  {
     thread th = new thread(new threadstart(downfile));
     th.start();
  }
 }
}

         4.按f9運行程序,輸入一下載地址,點“下載”按鈕試試。


四.結束語:  
    以上用一個簡單的例子向大家展示了如何用c# builder實現文件的下載,我們不難發現用c# builder進行internet通訊編程是非常方便的。在上面的程序中,我們僅僅用到了webclient類的一些方法,而webclient類不只是提供了文件下載的方法,還提供了文件上傳等方法,有興趣的讀者不妨自己試試,查查幫助。
      程序中使用了多線程,這是因為webclient類占有的資源校大,在下載文件會使整個窗口的顯示不完整。如果不用多線程的話,下載文件的時候,你根本沒法移動窗口或進行其它的一些操作。

注冊會員,創建你的web開發資料庫,
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 周至县| 安岳县| 禄劝| 阿鲁科尔沁旗| 乌鲁木齐县| 兰州市| 九龙坡区| 盐山县| 读书| 大兴区| 宝坻区| 张掖市| 蓝田县| 荣昌县| 五大连池市| 安化县| 广昌县| 西城区| 汝阳县| 新和县| 潍坊市| 临湘市| 恭城| 鹿邑县| 门源| 青海省| 怀安县| 科技| 龙里县| 射洪县| 南汇区| 边坝县| 雅安市| 萍乡市| 太谷县| 永兴县| 淅川县| 包头市| 新安县| 满洲里市| 土默特右旗|