WebClientで確実に同時ダウンロードするには?
- 題名: WebClientで確実に同時ダウンロードするには?
- 著者: KOJI
- 日時: 2007/11/13 16:35:47
- ID: 20963
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: WebClientで確実に同時ダウンロードするには?
- 著者: れい
- 日時: 2007/11/16 18:32:25
- ID: 21009
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: WebClientで確実に同時ダウンロードするには?
- 著者: がる
- 日時: 2007/11/18 14:40:50
- ID: 21011
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: WebClientで確実に同時ダウンロードするには?
- 著者: KOJI
- 日時: 2007/11/18 17:16:18
- ID: 21012
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: WebClientで確実に同時ダウンロードするには?
- 著者: KOJI
- 日時: 2007/11/18 17:32:01
- ID: 21013
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: WebClientで確実に同時ダウンロードするには?
- 著者: れい
- 日時: 2007/11/18 22:40:31
- ID: 21014
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: WebClientで確実に同時ダウンロードするには?
- 著者: KOJI
- 日時: 2007/11/20 9:07:29
- ID: 21025
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: WebClientで確実に同時ダウンロードするには?
- 著者: KOJI
- 日時: 2007/11/20 9:39:44
- ID: 21026
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[5]: WebClientで確実に同時ダウンロードするには?
- 著者: れい
- 日時: 2007/11/20 11:59:21
- ID: 21029
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[6]: WebClientで確実に同時ダウンロードするには?
- 著者: KOJI
- 日時: 2007/11/20 18:23:27
- ID: 21030
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[7]: WebClientで確実に同時ダウンロードするには?
- 著者: れい
- 日時: 2007/11/20 19:32:21
- ID: 21031
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[8]: WebClientで確実に同時ダウンロードするには?
- 著者: KOJI
- 日時: 2007/11/25 18:41:34
- ID: 21049
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
はじめまして、
DOBON.NETのTipsを参考にしながらVB2005の勉強を始めましたKOJIと申します。
複数のHTMLや画像をまとめてダウンロードしたいと思いますがうまく行きません。
とりあえず下記のようにやってみましたが、乏しい知識で無理やり考えた方法なのでかなり怪しいです。
実際、いくつか0バイトのファイルができてしまったりしますし、そういう場合でもなぜか例外がスローされず、対処できません。
Dim sync_limit = 4
Dim sync_count = 0
-------------------------------------------------
Public Sub DownLoadFiles(Byval.............)
・
・
Dim i As Integer = 0
Do
If i <= urlList.Count - 1 Then
'同時ダウンロードカウントがリミットより少ないなら1つDLして
'同時ダウンロード数sync_countを+1
'sync_countがリミットの場合は素通りループ
If sync_count < sync_limit Then
Download(urlList(i), path_str)
sync_count +=1
i += 1
End If
Else
Exit Do
End If
Application.DoEvents()
Loop
・
・
End Sub
-----------------------------------------------------
'WebClientでダウンロードするメソッド
Public Sub Download(ByVal url As String, ByVal path_str As String,........)
Dim c As New WebClient
'完了イベントを関連付ける
AddHandler c.DownloadFileCompleted, AddressOf dlcompleted
Dim uni As New Uri(url)
'非同期でダウンロード
c.DownloadFileAsync(uni, path)
End Sub
-----------------------------------------------------
'WebClientの完了イベント
Public Sub dlcompleted(ByVal sender As Object, ..........)
'1つ終了するたびに同時ダウンロードカウントを引く
sync_count -= 1
'用済みになったWebClientを破棄
sender.Dispose()
End Sub
------------------------------------------------------
URLリストが全部ダウンロード完了されるまでDo〜Loopでずっとループし続けます。
sync_countという数値の変数を作り、WebClientが1つDLをはじめるたびに1追加され、完了するごとに1マイナスされます。それを変数sync_limitで制限し、同時ダウンロード数がリミットの場合は素通りさせることで同時ダウンロード数が常に一定になるようにしました。動作は良好に思えたのですが、いくつか0バイトの未完ファイルができたりしてうまくいきません。また、DL速度も遅いようです。
ファイルを1つダウンロードする方法は、DOBIN.NETさんのTipsを参考にしていろいろためしました。My.Computer.Network.DownloadFileメソッドが接続も早く安定している気がしたので、BackGroundWorkerと併用して試そうかとも思ったのですが、他に同時ダウンロードの方法が思いつかないため同じことになってしまいそうです。
とりあえず時々ファイルが0バイトでDL完了してしまうのをなんとかしたいです。
改善点や、同時DLするにあたって良い方法がありましたらご教授ください。今思いつくのは、とりあえず全てループした後に全てのファイルサイズを調べて未完ファイルをリストアップし、再度DLすることぐらいなのですが、もっと適切な方法がある気がしてなりません。
長文になってしまいすみません。
まだ始めたばかりで質問の仕方も不慣れですが、何卒よろしくお願いいたします。