- 締切済み
プログレスバーについて
お世話になっています。初心者VBプログラマーです。 5MB~10MBのファイルをコピーをするプログラムを作成しているのですが、やはりコピーには時間がかかるのでプログレスバーを作成することになりました。 ひとつのファイルをコピー中例えば、10MB中○○%コピー出来たかと、プログレスバーで表現できますか? DoEventsを利用するのでしょうか? 詳細サイトがありましたら教えてください。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- TAGOSAKU7
- ベストアンサー率65% (276/422)
バーを出すのではなく、WindowsAPIでコピーをしてはだめですか? ファイルコピーの進捗がわかるダイアログが出るコピーですので、プログレスバーは必要なくなると思います。 http://www.vbvbvb.com/jp/gtips/で「SHFileOperation」をキーに検索したら引っかかります。 それがいやなら・・・ 現在コピーをどのようにしているかによって変わると思います。 FileCopy コマンドでファイルコピーをしているのであれば、一つのプロジェクトで実現する方法は困難のような気がします。 それとDoEventsについて・・・ 1.DoEvents/2.FileCopy という順で行っうとしても、DoEventsを呼んだとき、それまでのVB側の処理をした後、OSからの割り込みを許可するだけで、FileCopyを実行したら、VBがコピーを終えるまで次の処理は不可能です。DoEventsの意味がありません。 CreateProcessで別プロセスを作成しFileCopyを実行する方法もありますが、アプリが不安定にる恐れががあります。 別EXEにした場合は ファイルコピーだけを行うEXEを呼び出して、他のプロセスでコピーを実行させたら、実現可能かも知れませんね。本体EXEはファイルコピーが終了するまで、定期的にFileLenでファイルサイズを読み込む必要があるので処理が重いかも知れませんが・・・ 本体EXEのみで簡潔したい&プログレスバーをどうしても使用したいのであれば、FileCopyを使用しないで、バイナリでファイルを読み込み、GetとPutを繰り返し行うと、進捗は管理できます。(処理速度未検証)
お礼
ご教授ありがとうございます。 確かに当初はこのパターンを使用しようと思っていたのですが、上書き保存の場合、表示されてしまうことと、ユーザー側で誤操作も考えられるので却下されてしまいました。プログレスバーは意外とつかえないですね・・・ありがとうございました。