首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> C# 入門

用 Visual C# 實現檔案下載功能 (1) - 設計原理與實作步驟

     編輯:C# 入門

C# 網路程式設計入門:建立檔案下載器

.NET Framework 提供豐富的網路類別庫,位於 System.Net 命名空間。本文透過建立檔案下載器,示範高層網路程式設計核心概念與實作流程。

核心類別與架構層次

層次類別功能
請求/回應層WebRequest, WebResponse統一資源存取抽象基底
應用協定層HttpWebRequest, FtpWebRequest特定協定實作
高層封裝WebClient簡化常見操作 (下載/上傳)

實作原理

  1. WebRequest:建立 URI 請求物件,驗證網址有效性
  2. WebClient.DownloadFile:一行程式碼完成下載儲存
  3. WebClient.OpenRead:取得可讀取資料流,手動控制讀寫
  4. FileStream:將位元組寫入本地檔案
  5. 多執行緒:避免下載過程封鎖 UI 執行緒

關鍵程式碼片段

1. URI 請求驗證

try {
    WebRequest myre = WebRequest.Create(URLAddress);
} catch (WebException exp) {
    MessageBox.Show(exp.Message, "Error");
}

2. 下載與資料流讀取

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;
}

3. 檔案寫入

FileStream fstr = new FileStream(Path, FileMode.OpenOrCreate, FileAccess.Write);
fstr.Write(mbyte, 0, startmbyte);
str.Close();
fstr.Close();
statusBar.Text = "下載完畢!";

4. 多執行緒啟動

private void Start_Click(object sender, System.EventArgs e) {
    Thread th = new Thread(new ThreadStart(StartDownload));
    th.Start();
}

必要命名空間

using System.Net;      // WebRequest, WebClient
using System.IO;       // Stream, FileStream, StreamReader
using System.Threading; // Thread, ThreadStart

可能的例外類型

  • WebException:網路下載錯誤
  • UriFormatException:URI 格式無效
  • IOException:檔案存取錯誤
  • SecurityException:權限不足

介面設計步驟

  1. 新建 Windows Forms 專案「MyGetCar」
  2. 加入控制項:2 Label、2 TextBox (網址/路徑)、1 Button (下載)、1 StatusBar
  3. 設定屬性:Button.Text="開始下載"、TextBox 適當大小
  4. 雙擊按鈕產生 Click 事件處理函式

WebClient 更多功能

  • UploadFile / UploadData:檔案上傳
  • DownloadData:下載為位元組陣列
  • DownloadString:直接下載字串
  • DownloadFileAsync:非同步下載 (事件通知進度)

下一步

下篇將提供完整可編譯原始碼與架構深度分析。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved