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

使用IdFTP 下載檔案遇到之問題

尚未結案
jamlee
一般會員


發表:10
回覆:5
積分:3
註冊:2004-10-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-02 00:22:17 IP:61.228.xxx.xxx 未訂閱
下載的檔案是13K時沒有問題,可是下載93K的檔案時出現以下的錯誤訊息 為什麼會這樣呢? 程式碼如下: void __fastcall TForm1::Button1Click(TObject *Sender) { TFileStream *strm,*strm2; IdFTP2->Host="127.0.0.1"; IdFTP2->Username="anonymous"; IdFTP2->Password="anonymous"; IdFTP2->Port=2857; IdFTP2->Connect(true,3000); IdFTP2->ChangeDir("/upload"); strm = new TFileStream("C:\\SPFDISK.EXE", fmCreate); IdFTP2->Get("SPFDISK.EXE",strm,false); delete strm; IdFTP2->Noop(); IdFTP2->Disconnect(); }
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-02 12:05:04 IP:211.20.xxx.xxx 未訂閱
引言: 下載的檔案是13K時沒有問題,可是下載93K的檔案時出現以下的錯誤訊息 為什麼會這樣呢? 程式碼如下: void __fastcall TForm1::Button1Click(TObject *Sender) { TFileStream *strm,*strm2; IdFTP2->Host="127.0.0.1"; IdFTP2->Username="anonymous"; IdFTP2->Password="anonymous"; IdFTP2->Port=2857; IdFTP2->Connect(true,3000); IdFTP2->ChangeDir("/upload"); strm = new TFileStream("C:\\SPFDISK.EXE", fmCreate); IdFTP2->Get("SPFDISK.EXE",strm,false); delete strm; IdFTP2->Noop(); IdFTP2->Disconnect(); }
jamlee 你好:
(1)FTP Protocol 在上傳檔案的時候,可以事先知道要傳送的封包大小,因此,
   你可以從 OnWorkBegin event procedure 裡面,取得 AWorkCountMax 的大
   小 (不為 0)
(2)FTP Protocol 在下載檔案的時候,無法事先知道要下載的封包大小,因此,
   你在 OnWorkBegin event procedure 裡面,取得 AWorkCountMax 的大小會
   是 0,才會出現你所說的那個錯誤
(3)所以,在下載檔案的時候,程式碼要稍微改變一下,才能夠得到正確的結果
   ,例如:
int gi3=0;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   IdFTP3->Host=FTP_SERVER;
   IdFTP3->Username=FTP_USERNAME;
   IdFTP3->Password=FTP_PASSWORD;
   IdFTP3->Connect(true, 3000);
   IdFTP3->ChangeDir("/upload");
   gi3=IdFTP3->Size("24bit.bmp");
   IdFTP3->Get("24bit.bmp", "24bit.bmp", true);
   IdFTP3->Disconnect();
}
void __fastcall TForm1::IdFTP3Work(TObject *Sender, TWorkMode AWorkMode,
      const int AWorkCount)
{
   Application->ProcessMessages();
   CGauge3->Progress=(int)((double)AWorkCount*(double)100/(double)gi3);
}
void __fastcall TForm1::IdFTP3WorkEnd(TObject *Sender, TWorkMode AWorkMode)
{
   CGauge3->Progress=100;
}
(4)以上的範例,下載了一個 5 MB 的圖檔,正確無誤
-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-04-18 17:33:19 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

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