• 締切済み

プログレスバーについて

お世話になっています。初心者VBプログラマーです。 5MB~10MBのファイルをコピーをするプログラムを作成しているのですが、やはりコピーには時間がかかるのでプログレスバーを作成することになりました。 ひとつのファイルをコピー中例えば、10MB中○○%コピー出来たかと、プログレスバーで表現できますか? DoEventsを利用するのでしょうか? 詳細サイトがありましたら教えてください。

みんなの回答

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

バーを出すのではなく、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を繰り返し行うと、進捗は管理できます。(処理速度未検証)

soushi_ni
質問者

お礼

ご教授ありがとうございます。 確かに当初はこのパターンを使用しようと思っていたのですが、上書き保存の場合、表示されてしまうことと、ユーザー側で誤操作も考えられるので却下されてしまいました。プログレスバーは意外とつかえないですね・・・ありがとうございました。

関連するQ&A

  • C#でプログレスバーを作るには?

    C#でプログレスバーを作るにはどうしたらいいのでしょうか? 例えばいくつものファイルをコピーする処理をしているプログラムがあるとします。 そういったときプログレスバーをどうカウントアップさせていけばよいのでしょうか?

  • 探しています~プログレスバーのまき戻しについて

    何か処理中のものがあり、進捗状態がプログレスバーに表示されているのですが、キャンセルボタンを押すとその処理を中断できて、それまで進んでいたプログレスバーの進捗が徐々に減っていき、最終的にゼロに戻るという仕組みの画面というか、UIを探しています。 ソフトのインストールとかファイルのコピーとか色々探しているのですがなかなか見つかりません。 似たような動作をするプログラムを作りたいので参考にしたいのですが・・・。 どなたか知っている方がいれば教えてください!

  • FlashCS4 プログレスバーの作成

    Flash CS4を使用しています。 CS4は、まだ解説書があまり販売していないため、分りません。 SWFファイルを作りました。これにプログレスバーをつけたいのですが、flaファイルにどのようなアクションスクリプトを書けば良いのでしょうか?CS4での作成方法を教えてください。 購入したばかりで初心者です。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • Labelでプログレスバーの表示

    いつも大変お世話になっております。 動作が重いマクロ、プログラムが多いため、 プログレスバーを表示させたいと思っています。 フォームを20個以上準備しており、 それに対し プログレスバーを使いたいのが10個程度であり、 今後増えるかもしれません。 そのため、標準モジュールを利用し、簡単に プログレスバーを設定できないかと思っています。 '=================== 【標準モジュール Module1】 Sub Bar_progressBarData(Byval UserFormName as string, Byval MaxData as Long,LabelName as string) 'UserFormName 引用するところ?のユーザーフォーム名 'MaxData バーの最大値設定 'LabelName バー表示するラベル名 'ProgressBarの初期設定などをやる End sub '------------------------- Sub Bar_progressBarInt(Byval UserFormName as string, Byval MaxData as Long,LabelName as string) 'UserFormName 引用するところ?のユーザーフォーム名 'MaxData バーの最大値設定 'LabelName バー表示するラベル名 'ProgressBarの値を増やしていく(増加させていくプログラム) End sub '================= 【UserForm Test】 Sub DataChangeGraph() 'ループが多いデータ Call Bar_progressBarInt(Me.Name,10,"Label1")'バーの値を増加させていく End Sub Private Sub UserForm_Initialize() Call Bar_progressBarData(Me.Name,10,"Label1")'初期設定(例として、max10にしました) End Sub Maxの値、プログレスデータに使用する値は グローバルに設定してしまうというのも楽かもしれません。 しかし、この続きの肝心なプログラムが分かりません。 「プログレスバーの作り方」 h ttp://www.h3.dion.ne.jp/~sakatsu/ProgressBarTopic.htm このサイトが良いと評判でしたので、 見ましたが何をしているのか良く分かりませんでした。 Widthを設定? Dim sngBarMaxWidth As Single? そして、私がやりたいこととは少し違うようです。 私がやりたいのは、フォーム上に毎回プログレスバー用のプログラムを書くのが面倒だったので、 標準モジュールとしてSubプロシージャを作成(日本語? そして、それを引用してプログレスバーの設定を簡単に終わらせる ということがしたかったのです。 できれば、ラベルなど Excelに標準で備わっているものを使用したいと思っています。 プログレスバー専用のツール(参照設定などを用いるもの) はその後にエラーが出たとき困るので、使いたくありません。 なんとなく伝わったでしょうか? 回答よろしくお願い致します。 Excel2003 VBA

  • MFCを使わないで、プログレスバーを表示したい。

    複数のファイルで構成されているフォルダがあって、そのフォルダのコピーを作成する処理を行うとします。 その処理の進行状況を、ダイアログボックス上に貼り付けたプログレスバーコントロールで表示したい と思っているのですが、MFCを使用しない例はネットなどで検索しても見つけることができません。 例えば、フォルダの容量の「現在○○%コピーしました。」とか、それが無理なら全体の何ファイル目を処理 しているかなどを、プログレスバーで表示することは可能ですか。 数値的な表示が無理なら、現在処理中かどうかを表示するだけでも構いません。 ご教授の程、よろしくお願いいたします。 環境:VC++6.0, WIN32 API

  • プログレスバーの作成と設置方法について

    カテゴリー違いの質問かもしれませんので、何卒よろしくお願いいたします。 現在、自分のホームページのトップ画面が表示されるまで時間がかかる為、プログレスバーを設置したいと考えています。 ただ、自分自身HTMLタグの知識程度しかないために、他のサイトをいろいろと拝見しても、その説明すら理解できなくてお手上げ状態です。 こんな私でも、プログレスバーの作成と設置が出来る方法があるでしょうか? また、作成・設置が出来ないまでも、何から始めていったら良いかアドバイス頂けたらありがたいです。(参考書籍など・・・・・とにかく超初心者です。) 勝手な質問で、大変申し訳ありませんが何卒、よろしくお願いいたします。                             敬具

  • vb.net コピーの進捗をプログレスバーで

    質問ばかりでもうしわけないのですが タイトルにあるようにコピーの状況を プログレスバーで表示できたらなと思い作成したのですが うまく動きません。 プログレスバー自身単独では動くのですがコピーと合わせると フリーズしてしまいます。 プログラミング経験と発想力が乏しいのでご教授いただけたら幸いです Private Sub Bt_1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_1.Click Dim fname1 As String = "C:\フォルダ名A" Dim fname2 As String = "C:\フォルダ名B" Dim ber1 As Integer If IO.Directory.Exists(fname1) = True Then Me.Lb_1.Text = "テキスト文字" For ber1 = 0 To 20 Me.ProgressBar1.Value = ber1 System.IO.File.Copy("コピー元テキストファイルA", "コピー先テキストファイルA", True) My.Computer.FileSystem.CopyDirectory("コピー元フォルダA", "コピー先フォルダA", True) My.Computer.FileSystem.CopyDirectory("コピー元フォルダB", "コピー先フォルダB", True) Next ber1 If IO.Directory.Exists(fname2) = True Then System.IO.File.Copy("コピー元ファイルB", "コピー先ファイルB", True) End If MessageBox.Show("終了報告テキスト", "タブ名") ' System.IO.Directory.Delete("コピー元", True) Me.ProgressBar1.Value = 0 Application.Exit() こんな感じで作成しております。 ファイル自身が1GBぐらいあるので フリーズしていないかプログレスバーや%表示でしらせたいので 教えていただけると助かります。 よろしくお願いします。

  • ファイルコピーの制御について

    ファイルコピーの制御について お世話になります。VB2010でプログラムの開発をしています。 皆様にお伺いしたいのは、ファイルコピーの制御が実装できるかという ことです。 サイトなどで調べると実装は難しいようですが、ライセンスコードなどを 記載しているconfigファイルをコピーできなくしたいのです。 難しいようであれば、当該configファイルがオリジナルか、コピーされた ものかを判断できるという方法でもかまいません。 「オリジナル」というのは、VBプログラムからStreamWriterなどを使って 書き出したファイルを指します。 どうぞ、よろしくお願い致します。

  • Timer

    VB6.0で開発しています。 SQL問合せ中や、SHELLでDOSプロンプト実行中、 ファイルの圧縮中など、 処理時間が掛かるものにプログレスバーを表示しています。 Timerで時間毎に動いていればいいって感じなのですが、 SQL問合せ中など、動いてくれません。 画面をリフレッシュしても、DoEventsを入れてもダメです。 何か方法ありますか?

  • ユーザにディレクトリを選択させる方法

    ダイアログをだしてユーザにディレクトリを選択させ その指定したディレクトリにファイルを作成する処理 を行いたいのですがわかりません。 ※ユーザがダイアログから選んだディレクトリ名がStringで取得できる までを教えてください。ファイル作成方法は調査済みです。 どういうプログラミングでをすればいいでしょうか ダイアログの設定方法(プロパティ等)やプログラミング コードをできれば詳細に教えてください プログラマ1年目の新米でわからない事だらけで 調査が思う様に進んでいません。宜しくお願いいたします ちなみにVB2005を利用しています。

専門家に質問してみよう