ファイルをダウンロードする際の進行状況を取得するには?

解決


JULIO  2005-02-09 23:18:12  No: 119534

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


魔界の仮面弁士  2005-02-09 23:42:27  No: 119535

URLDownloadToFile API の場合は、最後のコールバック引数から、
進捗状況を得られるようになっています。
(ただし、IBindStatusCallback を実装する必要がありますが)

あるいは、VB6の AsyncReadメソッド を使ってダウンロードさせれば、
AsyncReadProgressイベントにて進捗を把握できます。

いずれも、最大サイズと読み込み済みサイズが引数で渡されます。

ただ、サーバ側が、ファイルのサイズ情報を返していない場合は、
これらの手法を使っても無意味ですから、まずはサーバ管理者に、
サイズ情報(http応答ヘッダの「Content-Length」フィールド)が
返されるのかどうかを問い合わせておいた方が良いかもしれません。


JULIO  2005-02-15 01:08:24  No: 119536

魔界の仮面弁士さん

貴重なアドバイスありがとうございます。
結果的にはAsyncReadメソッドを使用して挑戦してみようと思います。
理由はIBindStatusCallbackというのがよくわからないので・・・。
サンプル等で教えて頂けたら幸いです。

AsyncReadメソッドについては魔界の仮面弁士さんが別のサイトで
サンプルを掲載していたものがありましたので、それを参考にして
挑戦してみます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加