請問使用URLdownloadtofile如何知道所要下載的檔案大小以及是否下載完成? |
|
qubeley2004
一般會員 發表:52 回覆:71 積分:24 註冊:2004-07-13 發送簡訊給我 |
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
#include HRESULT URLDownloadToFile( LPUNKNOWN pCaller, LPCSTR szURL, LPCSTR szFileName, DWORD dwReserved, LPBINDSTATUSCALLBACK lpfnCB);
The steps involved in using
Using IBindStatusCallback
HRESULT OnProgress( ULONG ulProgress, ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText );
|
qubeley2004
一般會員 發表:52 回覆:71 積分:24 註冊:2004-07-13 發送簡訊給我 |
抱歉..我還是看不懂要怎樣去使用OnProgress
URLDownloadToFile(NULL,"http://tw.yimg.com/i/tw/hp/spirit/yahoo_logo.gif","C:\\1.jpg",0,NULL);
程式碼只有這樣,煩在請教是要在哪邊加上語法呢??
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
給你一個我的實作吧,這樣比較容易懂。因為要傳入的是一個物件的指標,而此物件要繼承interface,也就是把此抽象化的類別實作出來,在實作每個虛member function的過程中,我們只要把精力放在onProgress上,因為URLDownloadToFile的最後參數雖指向整個object,但它主要是call這個method。 我把需作實這個interface的class寫成一個unit,請加入你的project中,然後在URLDownloadToFile前面個的create 這個object,然後把指標指給它最後一個參教。 // header 的部份,onProgress外的method都以inline的形式完成實作了,僅留onProgress這個在cpp檔 //--------------------------------------------------------------------------- #ifndef Unit2H
STDMETHOD(OnStartBinding)( STDMETHOD(GetPriority)( STDMETHOD(OnLowResource)( STDMETHOD(OnProgress)( STDMETHOD(OnStopBinding)( STDMETHOD(GetBindInfo)( STDMETHOD(OnDataAvailable)( STDMETHOD(OnObjectAvailable)( STDMETHOD_(ULONG,AddRef)() STDMETHOD_(ULONG,Release)() STDMETHOD(QueryInterface)( #endif //以下是檔身cpp的部份 //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- STDMETHODIMP DlCallback::OnProgress ( ULONG ulProgress, ULONG ulProgressMax, /* if(ulProgressMax > 0)
if(Form1->Abort) */ return S_OK; //上面的method裡有放著我的實作,我已經mark起來,但你應該可以猜出我在做什麼!
String url = Form1->Edit1->Text;
應該夠清楚了吧?! 希望能有幫助!,如果想要完整的demo,我是寫好了…你可以email給我,我寄給你!
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
忘了重要的一件事,在你的form的unit中要加入 #pragma comment(lib,"C:\Program Files\Borland\CBuilder6\Lib\Psdk\urlmon.lib") //下面這行你不一定需要,只要在用到shlwapi中的StrFormatByteSize function時才要加
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
qubeley2004
一般會員 發表:52 回覆:71 積分:24 註冊:2004-07-13 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
===================引 用 文 章=================== 蕭兄~
非常感謝您的回答,寫的非常詳細,讓我獲益良多
不過小弟有個問題就是
Form1->Abort
上面那個Abort這個是什麼阿??有的話我就complier不能過了
你好,關於Form1->Abort 這個property是我自己加在Form1裡的。並非原來TForm裡的屬性。
private: bool FAbort; // 自己加的 public: // User declarations __fastcall TForm1(TComponent* Owner); __property bool Abort = { read=FAbort, write=FAbort }; // 自己加的 是為了記載使用者是否有按下cancel button,若有則記為true。如此callback function就會知道該結束下載…
對了,順便一提,這個URLDownloadToFile是可以續傳的,如果ie的temporary internet file 沒有被清空的話。 結論: 你若沒有要讓使用者自行cancel download,你可以不用實作這部份,就不用管這個Abort的地方了!
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
qubeley2004
一般會員 發表:52 回覆:71 積分:24 註冊:2004-07-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |