DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Web上のファイルのサイズを求めるには?

環境/言語:[.NET Framework 2.0]
分類:[.NET]

Visual Basic 2005でWebにあるファイルをダウンロードしています。

ダウンロード自体はできたのですが、初めに目的のファイルサイズを知り、
現在どのくらいまでダウンロード出来ているかを、プログレスバーに出し
たいと思います。
ダウンロードする前にファイルサイズを知ることは出来るのでしょうか?

試しに、System.IO.FileInfoでURLを入れてみましたが、やはり、
「URI フォーマットはサポートされていません。」というエラーが帰って
きました。
使ってるプロトコルが HTTP の場合、レスポンスヘッダの Content-Length によって返されますが、サーバによっては返さないこともあり確実な方法はありません。
HTTP ヘッダの参照自体は(Web へのアクセスをどうやっているか知りませんが)使ってるクラスに Headers プロパティとかが用意されているのでそれを利用できるでしょう。ContentLength なんてプロパティが用意されているかもしれません。
FTP なら SIZE コマンドを使用できますがこれもオプションらしいですね。LIST コマンドならなんとかなるかな?
Hongliangさん

アドバイスありがとうございます。

> HTTP ヘッダの参照自体は(Web へのアクセスをどうやっているか知りませんが)使ってるクラスに Headers プロパティとかが用意されているのでそれを利用できるでしょう。ContentLength なんてプロパティが用意されているかもしれません。

頂いたアドバイスと、こちらの記事を参考に

'WebRequestの作成
Dim webreq As System.Net.HttpWebRequest = _
CType(System.Net.WebRequest.Create(url), _
System.Net.HttpWebRequest)
'サーバーからの応答を受信するためのWebResponseを取得
Dim webres As System.Net.HttpWebResponse = _
CType(webreq.GetResponse(), System.Net.HttpWebResponse)

Dim lg As Long
lg = webres.ContentLength

というようにしたら、サイズを取得できました(と思っています)。
これから、いろいろテストしてみます。
■No21617に返信(FNekoさんの記事)
サイズの取得ですが、今のところ問題ないようです。
ありがとうございました。
解決済み!
■No21950に返信(FNekoさんの記事)
> ■No21617に返信(FNekoさんの記事)
> サイズの取得ですが、今のところ問題ないようです。
> ありがとうございました。

サーバーによっては Content-Length ヘッダを返さないところも
あるかもしれません。
そのときは -1 を返すとあるので、そのときの対応もあるといいかも
しれませんね。
解決済み!
■No21953に返信(ぽぴ王子さんの記事)
> サーバーによっては Content-Length ヘッダを返さないところも
> あるかもしれません。
> そのときは -1 を返すとあるので、そのときの対応もあるといいかも
> しれませんね。

アドバイスをありがとうございます。
手当をしておこうと思います。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板