HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
1201
Gunspikeダウンロードの進捗状況を調べたい7解決


Gunspike

リンク

2021/12/1(Wed) 16:23:17|NO.94578

netrequest_getで100MBぐらいのファイルをダウンロードするようにしようとしているのですが
進捗状況が完了したか完了してないか以外全く分かりません。
どのようにしたら進捗状況が調べられるでしょうか?



この記事に返信する


zrs90(5さい)

リンク

2021/12/1(Wed) 19:40:16|NO.94580

かなり前の記事なので、hsp3.6で動作するか
わかりませんが...

http://hsp.tv/play/pforum.php?mode=pastwch&num=25635

スマホ投稿(pcなし)なのでチェック出来ない。
動かなかったら、申し訳ない。



猪野

リンク

2021/12/2(Thu) 19:04:48|NO.94588

ファイルサイズはnetfileinfoで取得できるファイル情報の中に含まれているので、getstr等で取り出してください。
受信済みのデータサイズはnetsizeで取得します。

サンプルのget_binary.hspを参考にしてざっと書いてみました。
*getFileSizeでファイルサイズの取得を、*updateで進捗状況の取得と表示を行っています。

#include "hspinet.as" *startup url="http://hsp.tv/images/bbs/" file="mascot8.jpg" state=0 netinit if stat { dialog "接続に失敗しました。" end } *main gosub *entry logmes strf("ファイルサイズ:%d",fileSize) do gosub *update logmes strf("受信済みサイズ:%d",dataSize) await 50 until state gosub *exit stop *entry neturl url gosub *getFileSize fileSize=stat netrequest_get file mes "ダウンロードを開始します。" return *getFileSize info="" key="Content-Length: " val="" netfileinfo info,file if stat { dialog "ファイル情報を取得できませんでした。" return -1 } index=instr(info,,key) if index=-1 { dialog "ファイルサイズを取得できませんでした。" return -1 } getstr val,info,index+strlen(key) return int(val) *update netexec state if fileSize=-1 { return } netsize dataSize title strf("進捗率:%d%%",dataSize*100/fileSize) return *exit if state<0 { dialog "エラーが発生しました。" end } sdim buf,netgetv_size() netgetv_data buf mes strf("ダウンロードが完了しました。\n%d/%d bytes",dataSize,fileSize) memfile buf,,dataSize celload "mem:" celput stat return



猪野

リンク

2021/12/3(Fri) 00:25:15|NO.94589

すみません、修正します。

上記のスクリプトでは受信サイズが一定値を超えた時に進捗率が正しくなくなってしまうため、*updateの

title strf("進捗率:%d%%",dataSize*100/fileSize)


title strf("進捗率:%.0f%%",double(dataSize)/fileSize*100)
としてください。

不具合の詳細については、こちらの記事が参考になるかと思います。
http://hsp.tv/play/pforum.php?mode=pastwch&num=40667



Gunspike

リンク

2021/12/3(Fri) 02:01:47|NO.94590

>>猪野さん
dataSizeがダウンロードが完了するまで0から増えないようなのですが
HSPのnetsizeのバグでしょうか?



猪野

リンク

2021/12/3(Fri) 09:49:04|NO.94591

こちらの確認不足です。重ね重ねすみません。

調べたところ、netsizeは現在正しく機能しないようです。
バグというより未実装に当たるものかと思います。

そのため、進捗を知りたい場合はnetrequestでダウンロードを行い、逐次existでファイルサイズを確認してください。

*entryの

netrequest_get file


netrequest file
に、

*updateの

netsize dataSize


exist file dataSize=strsize
に、

*exitを以下のように修正してください。

*exit if state<0 { dialog "エラーが発生しました。" end } mes strf("ダウンロードが完了しました。\n%d/%d bytes",dataSize,fileSize) celload file celput stat return



Gunspike

リンク

2021/12/3(Fri) 10:34:29|NO.94592

ありがとうございます!
解決しました!



リンク

2021/12/4(Sat) 08:37:37|NO.94596

良かったですね



ONION software Copyright 1997-2023(c) All rights reserved.