URLDownloadToFile APIを使用してWEB上に配置されたファイルを
自動でダウンロードしようと考えています。
他のサイトで見つけたソースを参考にダウンロードすることは
できたのですが、ダウンロードの進行状況を表示させることが
できなくて困っています。
WEB上のファイルサイズを取得できればローカルファイルとの差異
からProgressbarを出せるかとも思うのですが、その取得方法が
わかりません。それとも、DHTMLオブジェクトなどで何か情報が
取れたり、他のAPIを使用して表示できたりできるのでしょうか?
よろしくお願いします。(環境:VB6.0)
<ダウンロードソース>
Option Explicit
Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Private Sub Command1_Click()
Dim SaveFname ,Dfile As String
Dim Res As Long
SaveFname = "C:\sample.txt"
DFile = "http://www.aaa.com/test/readme.txt"
Res = URLDownloadToFile(0, DFile, SaveFname, 0, 0)
DoEvents
If Res = 0 Then
Lavel1.text = "正常終了"
Else
Lavel1.text = "エラー"
End If
End Sub
URLDownloadToFile API の場合は、最後のコールバック引数から、
進捗状況を得られるようになっています。
(ただし、IBindStatusCallback を実装する必要がありますが)
あるいは、VB6の AsyncReadメソッド を使ってダウンロードさせれば、
AsyncReadProgressイベントにて進捗を把握できます。
いずれも、最大サイズと読み込み済みサイズが引数で渡されます。
ただ、サーバ側が、ファイルのサイズ情報を返していない場合は、
これらの手法を使っても無意味ですから、まずはサーバ管理者に、
サイズ情報(http応答ヘッダの「Content-Length」フィールド)が
返されるのかどうかを問い合わせておいた方が良いかもしれません。
魔界の仮面弁士さん
貴重なアドバイスありがとうございます。
結果的にはAsyncReadメソッドを使用して挑戦してみようと思います。
理由はIBindStatusCallbackというのがよくわからないので・・・。
サンプル等で教えて頂けたら幸いです。
AsyncReadメソッドについては魔界の仮面弁士さんが別のサイトで
サンプルを掲載していたものがありましたので、それを参考にして
挑戦してみます。
ツイート | ![]() |