- ベストアンサー
VBでコピー時間を表示したい。
VB6.0の標準EXEを使って、CD-ROMからローカルディスクに コピーするプログラムを作っています。 エクスプローラなどでコピーする際、残り時間が表示されると思いますが、VBでも残り時間を表示(計算)する方法ってありますか? エクスプローラでも残り時間表示が完全に正しいとは 思っていないのですが、コピーの目安にはなっていると 思います。 やったことがあるとか、こんなコマンドを知っているとか ありましたら、教えてください。 宜しくお願いします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
以下を宣言に追加 'ダイアログ・ボックスが表示される場合、自動的に<全てはい>を自動設定する定数 Public Const FOF_NOCONFIRMATION = &H10& 'utdShellOpStructを設定しているところで、 .fFlags = FOF_NOCONFIRMATION を追加
その他の回答 (7)
- TAGOSAKU7
- ベストアンサー率65% (276/422)
さっきの補足です。 さっきのURLは私がアドバイスをして、補足に >上書き保存の場合、表示されてしまうことと、ユーザー側で誤操作も考えられるので却下されてしまいました。 とありますが、フラグの設定で強制上書きモードが使用できます。 よってユーザー側の誤操作云々は考慮しないでもいいです。 ただし、CDを途中で抜かれてしまうと、確かにオペレーションのエラーメッセージがでます。しかし、、、これは、、、オペレーションのコピーコマンドではなく、VBのコピーコマンドを使用しても、同じこと・・・ (on error を使用したら出ないなどの、しょーもない反論は却下) コピー状態の進捗を表すのは、やっぱりVBではAPIがベストと思います。
補足
ありがとうございます。 SHFileOperation関数は確かに使えますね。 一つ質問なのですが、SHFileOperation関数での 上書きの指定ってどのようにすればよろしいのでしょうか?
- TAGOSAKU7
- ベストアンサー率65% (276/422)
さらに履歴
- imogasi
- ベストアンサー率27% (4737/17069)
#3の者です。#4のご解答を拝見して、#3ではレコード数をみることしか例に挙げていませんでしたが、バイナリなファイルでは、プログラムのはじめに、ファイルサイズとして全バイト数を捉える指令があれば、途中バイト数を捉えれば、処理割合がつかめますね。 しかし入出力オリエンティドな処理に限りでしょうが。 一度にメモリに全部読みこみ、あと演算に時間がかかるようなものはだめでしょうが。
お礼
ファイル(レコード)数よりかは、単純に”残り何分でコピーが終了します”のようなかんじで処理経過を表示したかったのですが、難しそうですね。 なんとか他の方法で検討してみます。
- taknt
- ベストアンサー率19% (1556/7783)
ああ 残り時間ですね。 転送するサイズと転送したサイズで、それまでにかかった時間から 計算するのが一般的かと思います。
お礼
返信ありがとうございます。 やはり残り時間を割り出すのは難しいのですね。 時間を計測できるか処理を見直して見ます。
- imogasi
- ベストアンサー率27% (4737/17069)
素人の呟きと思って、読んでください。 ●1番質問の件を目指しているのは、(1)プログレスバーコントロールでしょう(下記URL)。そのほか(2)テキストボックス内に、文字(四角の記号、や%数字)表示(3)ラベルコントロールのWidthを色を変えたものを広げて行くなど。 別に場所としてはステータスバーに表示などあるようです。 ●進行状況(全体に対する現状)を捉えるのは、どうするのか私は疑問でしたが、結局レコードを読む式のもので無いと掴めないこと思うようになりました。 (1)MoveLastやRecordCount(ファイル全レコード数)的な指令が使えて、全体数を最初に捉えられること。 (2)レコードを読むごとに+1などして、最初からのレコード番号(何番目)が捉えられる指令が組めること。 が必要であること。毎レコードを読む速さは同じと仮定 しているか、無視できるほど小さいことが底にあるわけです。本当は僅かに違うはず。 ●例えば、ソートなど読みこみフェーズ、ソートフェーズ、出力フェーズなどのあるアルゴリズムを使った時は 各フェーズは、文章で「何々を実行中」とでも出してその中での進捗状況を他のフェーズと分けて、出さざるを 得ないでしょう。通しで考え様としても、入出力とメモリ内処理では、雲泥の差があって、上手く統一化できないと思います。 ●本件質問はファイル「コピー」などであり、全レコード数を最初に求め、読みこむ毎にレコード数をカウントし、決めた定数番目(定数割合番目)にくれば、目盛の%をアップしていけば良い。結局実経過時間の長さを考えることからは逃げていますよね。 http://www.asahi-net.or.jp/~ZN3Y-NGI/YNxv9g1810.html ●実時間で「後何分です」などと表示したいとなれば 実際の終了時間を別に測定して、プログラムに組みこむのだろうか。しかしマシンが変るとおかしなことになりそう。この理由からか、この型の表示はあまり見かけませんね。この件の説明に関心があるんですが、見たことがありません。読書範囲が狭いから?世の中初等的な本ばかり? 時間経過はTimerをセットして知れますが。やる前からAPIを使おうがVBだろうが、必要全体時間は判り様がない気がする。
- TAGOSAKU7
- ベストアンサー率65% (276/422)
975あたりのサンプル
- taknt
- ベストアンサー率19% (1556/7783)
秒単位でよければ、このやり方で http://coroco.hp.infoseek.co.jp/memo/vb/keika1/ ミリ秒単位ならば、このやり方で http://homepage1.nifty.com/Wan/vbtips/vbt002.htm スタート時の時間を取得し、差で計ります。
お礼
ありがとうございました。 これでかなりの要求をクリアできました。