線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:5844
推到 Plurk!
推到 Facebook!

VS2003 C# - 檔案下載 - 使用 WebClient 物件

 
digitraveler
初階會員


發表:89
回覆:91
積分:46
註冊:2005-06-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-09-01 10:39:55 IP:59.127.xxx.xxx 訂閱
從網路上下載檔案有很多種方式 , 今天要介紹的是使用 WebClient 物件來下載檔案 , 優點是 WebClient 物件使用語法很簡單 , 缺點是有些選項要從  Web Server 打開 ( 否則下載時會出現 Forbidden(403) 錯誤  ) , 若自己無 Web Server 管理權限 , 則不適用  WebClient 物件來下載檔案 ; 反之若你有 Web Server  管理權限 , 如公司內部的 WIN32 程式自動從公司網站更版機制的運用 , 就可以使用 WebClient 物件了 ; 像我是準備研究來給數十台至數百台的 POS 程式(WIN32 程式) 透過內部網路更版機制使用 ,  Web Server 當然也是由我或資訊人員可以控制的情況下來操作

■ 檔案下載測試

[code c#]
using System.Net; //
using System.IO; //
using System.Threading; //
using System.Text; //
.....
.....
.....
.....
//---------------------------------------------------------------------------
private void button1_Click(object sender, System.EventArgs e)
{
string ap_path=System.Windows.Forms.Application.StartupPath;
if (!ap_path.EndsWith("\\")) ap_path=ap_path "\\";

string URLAddress="http://digitraveler.homelinux.com/test/WebClient.NEW";
string dl_name=ap_path "WebClient.NEW";

DownloadFile(URLAddress, dl_name);

}
//---------------------------------------------------------------------------
private bool DownloadFile(string URLAddress, string down_load_file_with_path)
{
bool r=false;

WebClient client = new WebClient();

try
{
//有些 WEB SERVER 只讓瀏覽器連 , 故要偽裝成瀏覽器時這樣設定
//client.Headers.Add("Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*");
//client.Headers.Add("Accept-Language", "zh-TW");
//client.Headers.Add("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)");
//client.Headers.Add("Accept-Encoding","gzip, deflate");


client.DownloadFile(URLAddress,down_load_file_with_path);
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 = "DOWNLOAD ...";
while(allmybyte>0)
{
int m = str.Read(mbyte,startmbyte,allmybyte);
if(m==0)
break;
startmbyte =m;
allmybyte-=m;
}
FileStream fstr = new FileStream(down_load_file_with_path, FileMode.OpenOrCreate,FileAccess.Write);
fstr.Write(mbyte,0,startmbyte);
long file_size=fstr.Length;
str.Close();
fstr.Close();
if (file_size>1200) //用長度判斷是失敗頁面 ? 還是目標檔案 ?
{
//statusBar.Text = "DOWNLOAD END";
MessageBox.Show("DOWNLOAD OK");
r=true;
}
else
{
MessageBox.Show("File Not Exists");
}

}
catch(WebException exp)
{
//網址不存在, 或沒有連上 InterNet
MessageBox.Show(exp.Message,"Error");
}

return r;

}


[/code]


■ 未來課題

1.若下載檔案不存在 , Web Server 會將失敗結果做成一頁面回傳 , 對 DownLoad() 而言 , 仍有資料 DownLoad 回來 ( 秀出檔案不存在的 HTML 頁面) , 所以無法判斷是下傳成功還是檔案不存在 , 範例-版本更新機制實作
http://tw.myblog.yahoo.com/bruce0211/article?mid=222&prev=225&next=213




編輯記錄
digitraveler 重新編輯於 2009-09-01 10:40:52, 註解 無‧
digitraveler 重新編輯於 2009-09-01 10:43:45, 註解 無‧
digitraveler 重新編輯於 2009-09-01 10:45:56, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-09-01 10:46:25 IP:122.116.xxx.xxx 訂閱
感謝分享 ^_^
eaglewolf
資深會員


發表:4
回覆:268
積分:429
註冊:2006-07-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-03-03 17:34:09 IP:211.75.xxx.xxx 未訂閱
手邊沒有VS 2003
不過 url的寫法應該是錯的
改成
string URLAddress="http://digitraveler.homelinux.com/test/WebClient.NEW";
試試

另外, 到了 .Net Framework 2.0以後
若檔案不存在
會傳回 WebException

MSDN .Net 1.1 Download 說明文件
MSDN .Net 2.0 Download 說明文件
------
先查HELP
再查GOOGLE
最後才發問

沒人有義務替你解答問題
在標題或文章中標明很急
並不會增加網友回答速度

Developing Tool:
1.Delphi 6
2.Visual Studio 2005
3.Visual Studio 2008
DBMS:
MS-SQL
digitraveler
初階會員


發表:89
回覆:91
積分:46
註冊:2005-06-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-06-12 22:08:18 IP:111.254.xxx.xxx 訂閱
感謝長官指導, URL 前面那個 TAG 是 KTOP 的 程式碼區塊自動幫我加的(應該是BUG), 我程式碼跟長官的寫法是一樣的
".Net Framework 2.0以後, 若檔案不存在, 會傳回 WebException" => 那真是太好了
小弟使用.NET 開發工具只是玩票性質, 公司並不用這個工具開發,所以用 VS2003 都沒換
小弟最近正準備由 2003 直接跳 2010 說



===================引 用 eaglewolf 文 章===================
手邊沒有VS 2003
不過 url的寫法應該是錯的
改成
string URLAddress="http://digitraveler.homelinux.com/test/WebClient.NEW";
試試

另外, 到了 .Net Framework 2.0以後
若檔案不存在
會傳回 WebException

MSDN.Net 1.1 Download 說明文件
MSDN .Net 2.0 Download 說明文件
系統時間:2024-05-01 17:36:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!