亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 用visual c#實現文件下載.txt

?? c# 大量的學習資料。包括ado.net學習筆記
?? TXT
字號:
用Visual C#實現文件下載

作者: 王凱明 發表時間: 2003-11-23 11:06:45 

--------------------------------------------------------------------------------

   一.概述:    
    本文通過一個實例向大家介紹用Visual C#進行Internet通訊編程的一些基本知識。我們知道.Net類包含了請求/響應層、應用協議層、傳輸層等層次。在本程序中,我們運用了位于請求/響應層的WebRequest類以及WebClient類等來實現高抽象程度的Internet通訊服務。本程序的功能是完成網絡文件的下載。   
    二.實現原理:    
    程序實現的原理比較簡單,主要用到了WebClient類和FileStream類。其中WebClient類處于System.Net名字空間中,該類的主要功能是提供向URI標識的資源發送數據和從URI標識的資源接收數據的公共方法。我們利用其中的DownloadFile()方法將網絡文件下載到本地。然后用FileStream類的實例對象以數據流的方式將文件數據寫入本地文件。這樣就完成了網絡文件的下載。    
    三.實現步驟:    
    首先,打開Visual Studio.Net,新建一個Visual C# Windows應用程序的工程,不妨命名為"MyGetCar"。 
  接著,布置主界面。我們先往主窗體上添加如下控件:兩個標簽控件、兩個文本框控件、一個按鈕控件以及一個狀態欄控件。
    完成主窗體的設計,我們接著完成代碼的編寫。    
    在理解了基本原理的基礎上去完成代碼的編寫是相當容易。程序中我們主要用到的是WebClient類,不過在我們調用WebClient類的實例對象前,我們需要用WebRequest類的對象發出對統一資源標識符(URI)的請求。   
  try 
  { 
  WebRequest myre=WebRequest.Create(URLAddress); 
  } 
  catch(WebException exp) 
  { 
  MessageBox.Show(exp.Message,"Error"); 
  }    
    這是一個try-catch語句,try塊完成向URI的請求,catch塊則捕捉可能的異常并顯示異常信息。其中的URLAddress為被請求的網絡主機名。    
    在請求成功后,我們就可以運用WebClient類的實例對象中的DownloadFile()方法實現文件的下載了。其函數原型如下:   
     public void DownloadFile( string address, string fileName);    
    其中,參數address為從中下載數據的 URI,fileName為要接收數據的本地文件的名稱。 
  之后我們用OpenRead()方法來打開一個可讀的流,該流完成從具有指定URI的資源下載數據的功能。其函數原型如下: 
    public Stream OpenRead(string address);     
    其中,參數address同上。    
    最后就是新建一個StreamReader對象從中讀取文件的數據,并運用一個while循環體不斷讀取數據,只到讀完所有的數據。 
    還有在使用以上方法時,你將可能需要處理以下幾種異常:    
     WebException:下載數據時發生錯誤。    
     UriFormatException:通過組合 BaseAddress、address 和 QueryString 所構成的 URI 無效。    
    這部分的代碼如下:(client為WebClient對象,在本類的開頭處聲明即可)    
  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類的實例對象將這些數據寫入本地文件中:   
  FileStream fstr = new FileStream(Path,FileMode.OpenOrCreate,FileAccess.Write); 
  fstr.Write(mbyte,0,startmbyte); 
    這樣,程序主體部分的代碼已經完成了,不過要完成全部程序還需要一些工作。由于在程序接收網絡文件數據的時候運用到了while循環體,這樣會很占程序資源,表現的形式就是主窗體不能自由移動。為了解決這個問題,我們在程序中用到了多線程機制。我們在響應按鈕的事件中新建一個線程,該線程就是用來實現網絡文件下載功能的。如此,文件下載的線程和程序主線程并存,共享進程資源,使得程序順暢運行。這樣,我們在按鈕控件的消息響應函數里添加如下代碼:    
  Thread th = new Thread(new ThreadStart(StartDownload)); 
  th.Start();    
    該線程的實現函數就是StartDownload(),而上面介紹的那些代碼就是這個函數的主體部分。   
    最后,因為程序中運用到了WebRequest、WebClient、FileStream、Thread等類,所以最重要的就是在程序的開始處添加如下名字空間: 
  using System.Net; 
  using System.IO; 
  using System.Threading; 



下面就是程序的源代碼: 
   
  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 
  /// 
  /// 設計器支持所需的方法 - 不要使用代碼編輯器修改 
  /// 此方法的內容。 
  /// 
  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; 
  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(); 
  } 
  } 
  }      
    四.總結:   
    以上我通過一個實例向大家展示了如何用Visual C#實現網絡文件的下載,我們不難發現用Visual C#進行Internet通訊編程是非常方便的。在上面的程序中,我們僅僅用到了WebClient類的一些方法,而WebClient類不光提供了網絡文件下載的方法,還提供了文件上傳的方法,有興趣的讀者不妨一試――用之實現一個文件上傳器。同時這個程序只是一個非常簡單的例子,程序下載完一個網頁后,它所獲得的僅僅是主頁面的內容,并不能獲得其中的圖片、CSS等文件,所以要做出一個比較好的文件下載器還需讀者進一步改進之。
 

--------------------------------------------------------------------------------
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天堂在线亚洲视频| 日韩欧美一级在线播放| 欧美精品 国产精品| www国产亚洲精品久久麻豆| 亚洲精品国产成人久久av盗摄 | 国产欧美中文在线| 日韩国产在线观看一区| eeuss鲁片一区二区三区在线观看| 欧美一区二区在线免费观看| 亚洲视频免费观看| 国产精品系列在线播放| 日韩一区二区电影网| 亚洲无人区一区| 91搞黄在线观看| 中文字幕中文在线不卡住| 国模冰冰炮一区二区| 91精品免费在线| 香蕉加勒比综合久久| 日本精品免费观看高清观看| 中文字幕日本不卡| 成人少妇影院yyyy| 国产欧美日韩综合| 精品一区二区成人精品| 欧美一区二区免费| 日本怡春院一区二区| 欧美亚洲日本一区| 一区二区三区不卡在线观看| av在线不卡网| 亚洲女子a中天字幕| 99精品国产91久久久久久| 国产精品久线观看视频| 国产69精品久久777的优势| 精品少妇一区二区三区日产乱码| 久久99国产乱子伦精品免费| 日韩欧美一二三区| 国产在线一区观看| 国产视频一区在线播放| 成人午夜av电影| 欧美国产国产综合| 色综合天天狠狠| 亚洲一区二区成人在线观看| 欧美日韩极品在线观看一区| 青青草一区二区三区| 日韩欧美国产小视频| 国产美女视频一区| 国产日韩欧美a| 99久久精品情趣| 国产精品美女久久久久久| 国产精品一区免费在线观看| 国产欧美精品区一区二区三区 | 欧美日韩第一区日日骚| 偷窥国产亚洲免费视频| 777奇米四色成人影色区| 久久激情五月婷婷| 中文在线资源观看网站视频免费不卡| fc2成人免费人成在线观看播放| 亚洲女人小视频在线观看| 欧美在线观看一区| 蜜臀久久久久久久| 国产午夜亚洲精品午夜鲁丝片| av一区二区三区黑人| 亚洲成年人影院| 精品盗摄一区二区三区| 91一区一区三区| 久久精品99国产精品| 日本一区二区三区国色天香 | 国产 日韩 欧美大片| 亚洲欧洲精品天堂一级| 欧美一级夜夜爽| av网站免费线看精品| 美脚の诱脚舐め脚责91 | 精品理论电影在线| 色婷婷综合久久久中文字幕| 久久成人免费网站| 一区二区三区欧美日韩| 欧美精品一区二区三区久久久 | 一区二区三区高清| 亚洲精品一区二区三区精华液| 91免费版在线看| 狠狠色狠狠色合久久伊人| 亚洲另类中文字| 久久久久久免费网| 制服丝袜国产精品| 91在线无精精品入口| 老司机精品视频一区二区三区| 亚洲男人的天堂在线观看| 26uuu亚洲综合色| 欧美撒尿777hd撒尿| caoporn国产一区二区| 九九国产精品视频| 丝袜亚洲另类丝袜在线| 亚洲免费观看视频| 蜜桃av噜噜一区| 亚洲精品乱码久久久久久| 国产日本欧美一区二区| 欧美精品一区二区三区四区 | 日本韩国欧美国产| 国产91丝袜在线播放九色| 美女视频一区二区| 日韩精品一二区| 亚洲午夜日本在线观看| 亚洲欧洲精品一区二区精品久久久| 欧美变态凌虐bdsm| 6080国产精品一区二区| 欧美性视频一区二区三区| 不卡一区二区在线| 成人深夜在线观看| 不卡视频一二三| 不卡av在线网| 色综合久久久网| 91麻豆swag| 色综合视频在线观看| 一本色道久久综合狠狠躁的推荐| fc2成人免费人成在线观看播放| 国产iv一区二区三区| 成人免费毛片a| 粉嫩久久99精品久久久久久夜 | 中文久久乱码一区二区| 欧美韩国日本不卡| 中文字幕一区二区三区在线观看 | 夜夜揉揉日日人人青青一国产精品| 亚洲欧美一区二区视频| 亚洲激情综合网| 亚洲一区在线观看免费| 日韩高清在线电影| 麻豆精品视频在线| 国产传媒久久文化传媒| 不卡一区中文字幕| 中文字幕中文字幕一区| 亚洲色图一区二区三区| 亚洲精品成人a在线观看| 偷拍日韩校园综合在线| 韩国三级电影一区二区| 成人18视频在线播放| 日本精品视频一区二区三区| 欧美日本视频在线| 久久无码av三级| 一区精品在线播放| 亚洲福利一区二区三区| 免费观看一级欧美片| 成人在线一区二区三区| 欧洲一区二区三区在线| 欧美一级搡bbbb搡bbbb| 久久久久久综合| 亚洲精品一二三| 久久精品国产99国产| 91小宝寻花一区二区三区| 777xxx欧美| 国产精品久久久久一区二区三区 | 国产精品伦一区二区三级视频| 中文字幕欧美一| 免费av成人在线| av激情亚洲男人天堂| 日韩欧美视频在线| 亚洲欧美日韩国产中文在线| 欧美日韩综合在线| 国产色产综合产在线视频| 亚洲精品网站在线观看| 免费观看在线色综合| 波多野结衣亚洲一区| 欧美精品日韩综合在线| 欧美极品少妇xxxxⅹ高跟鞋| 香蕉成人伊视频在线观看| 福利视频网站一区二区三区| 欧美人牲a欧美精品| 国产精品短视频| 美女视频黄免费的久久| 91九色02白丝porn| 国产午夜精品久久| 青青草国产成人av片免费| 91小视频免费看| 国产欧美一区二区三区沐欲| 日本特黄久久久高潮| 在线日韩一区二区| 国产精品视频一二| 久久69国产一区二区蜜臀| 欧美色倩网站大全免费| 国产精品免费人成网站| 精品一区二区三区在线播放| 欧美影院一区二区三区| 中文字幕一区二区三区乱码在线 | 奇米888四色在线精品| 国产在线不卡一卡二卡三卡四卡| 欧美日韩在线三级| 欧美精品一区二区高清在线观看| 精品成人一区二区三区四区| 日日骚欧美日韩| 99麻豆久久久国产精品免费| 337p亚洲精品色噜噜| 一区二区高清免费观看影视大全 | 国产成人综合在线观看| 日韩欧美国产一区二区在线播放| 亚洲成av人片在www色猫咪| 97久久精品人人澡人人爽| 国产精品久久福利| 成人精品电影在线观看| 国产精品久久免费看| 91免费国产在线观看| 一区二区三区电影在线播| 欧美三级在线看|