- PR -

ファイルコピー中のプログレスバー表示について

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-31 11:29
引用:

Chataさんの書き込み (2004-05-31 09:25) より:

上記の件でお聞きしたいのですが、「ループの中で処理済みを%で計算」というのは
コピー元ファイルの内、現在どれくらいの容量のコピーが済んでいるのかを算出する
という事だど思うのですが、この算出方法が判りません。


 こういうことを聞くから不安なのですが。。。おそらく、ある程度実装がすんでいて、その中でプログレスバーを表示する処理を追加しようとしていると思いますが、どのように実装していますか?あるいは、どのように実装しようとしていますか?

 パーセンテージの計算方法を聞く、ということが、「処理済みのバイト数がわからない」ということと判断しています。パーセンテージの計算式がわからない、ということではないですよね?処理済みのバイト数がわかっているなら、パーセンテージを出すなど、現在値を全体値で割って100掛けるなんてことは、小学校の算数で習うはずですから。

 計算式がわからないというのは論外として、処理済みのバイト数については、どのように実装しているかで変わりますから、「このようにしています」ということを示さなければ、一般論でしか答えられません。
 その中で、一部のAPIコールや、System.IO.File.Copyメソッドを使っているなら、コピー処理が終了するまでメソッドから抜けられないので、「処理済みのバイト数がいくらか」を知ることができません。イコール、プログレスバーを表示することができません。また、APIコールでも、SHFileOperationを使うなら、OSが勝手にプログレスダイアログを表示してくれます。


 Cになりますが、『できるプログラマになるための APIで学ぶWindows徹底理解』の、P56にプログレスバーが表示可能な「少しずつコピーする」方法について例題があり、上記URLからプログラムがダウンロードできます。
Hirashige
常連さん
会議室デビュー日: 2002/10/26
投稿数: 29
投稿日時: 2004-05-31 14:11
引用:

Chataさんの書き込み (2004-05-31 09:25) より:
ご返答、有り難うございます。

引用:

Hirashigeさんの書き込み (2004-05-30 16:54) より:

 Value値には進行状況をセットします。

 (省略)

 私は、Maximum値はデフォルトの100のままで、Value値はループの中で処理済みを%に計算してセットしています。



上記の件でお聞きしたいのですが、「ループの中で処理済みを%で計算」というのは
コピー元ファイルの内、現在どれくらいの容量のコピーが済んでいるのかを算出する
という事だど思うのですが、この算出方法が判りません。

もし宜しければ、ご教授下さる様お願い致します。



 プログレスバーの使い方を主眼に返事を書きましたので、Chataさんが何をどういう方法でコピーをされようとしているのかは、深く考えていませんでしたが....
 コピーの方法による対応は、他の方がより詳しくお答えになっている通りだとおもいます。
 単純なコピーではなく、何らかの理由で(例えば何かの変換を行いながら)地道に読み書きして自力で別ファイルにコピーする。または、複数のファイルをコピーする際ファイルサイズの合計を取っておいて、コピーの済んだファイルサイズの比率(%)をvalueにセットする(進み方がファイルサイズによって跳びますが)等なら有効かと思います。(前レスの際は、この二つぐらいを念頭に置いて書きました)
 
Chata
会議室デビュー日: 2004/04/16
投稿数: 12
投稿日時: 2004-05-31 15:01
いろいろと教えて頂き、誠に有り難うございました。

大変恥ずかしい話、

引用:

処理済サイズを求めるのは、コピー方法、あるいはOSやファイルシステム等の各種環境に依存すると思います。



というのも知らなかった次第です。
現在は、ShFileOperation()API関数で処理しているのですが、
意味も理解せず、何かの本に掲載されていたのをそのまま使用して
いたため、小変更が効かずプログレスバーを使用した他の方法で
出来るのか知りたくて問い合わせをさせて頂きました。

従いまして、紹介して頂いた
『できるプログラマになるための APIで学ぶWindows徹底理解』
を購入して、勉強しようと思います。

本当にいろいろ有り難うございました。
Chata
会議室デビュー日: 2004/04/16
投稿数: 12
投稿日時: 2004-05-31 15:02
いろいろと教えて頂き、誠に有り難うございました。

大変恥ずかしい話、

引用:

処理済サイズを求めるのは、コピー方法、あるいはOSやファイルシステム等の各種環境に依存すると思います。



というのも知らなかった次第です。
現在は、ShFileOperation()API関数で処理しているのですが、
意味も理解せず、何かの本に掲載されていたのをそのまま使用して
いたため、小変更が効かずプログレスバーを使用した他の方法で
出来るのか知りたくて問い合わせをさせて頂きました。

従いまして、紹介して頂いた
『できるプログラマになるための APIで学ぶWindows徹底理解』
を購入して、勉強しようと思います。

本当にいろいろ有り難うございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-31 15:54
引用:

Chataさんの書き込み (2004-05-31 15:02) より:

従いまして、紹介して頂いた
『できるプログラマになるための APIで学ぶWindows徹底理解』
を購入して、勉強しようと思います。


 ちょっと待ってください。そういう理由でなら、買う必要はありません。2095+税円は、決して安いとは思いませんし、コピーについてだけなら、たった数ページしかボリュームがありません。また、先にも書いていますが、C言語による方法なので、.NET Frameworkで行うなら、かなり「???」なことになります。記事も、「時間がかかる処理中はメッセージ処理ができず、アプリケーションが黙りになる。それを回避する方法」として書かれているので、プログレスバーや経過量を表示するようにはなっていません。それらは自分で考えなければなりません。

 プログラムを参考にするだけなら、『apip3.lzh』をダウンロードすれば事足ります。これから.NET Frameworkを使用するなら、不要とまではいいませんが、特に知らなくても不自由はしないので、プログラムをダウンロードして、それを解読して、その上で必要だと思ったら買う、位でいいと思います。
#『上記URLからプログラムがダウンロードできます』というのは、
#『特に買うまでもない』ということを含んでいました。

スキルアップ/キャリアアップ(JOB@IT)