ファイルのコピー必要時間は 得られますか?

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
wakaba
記事: 32
登録日時: 2007年1月27日(土) 14:03

ファイルのコピー必要時間は 得られますか?

#1 投稿記事 by wakaba »

AB初心者です : プログラムも 素人です

ファイルを コピーするために必要な ”概算”時間が 得られないのでしょうか?
もちろん 機種には 依存するでしょうが・・
コピー時間を 知らせるために今のところ 次のように 表示しています

1. 自分のPC(Celeron 2.6G)で10Mbyte あたりの コピー時間を 計って 単位あたりの 時間を決定する
2.GetFileSize(hFile,0) により ファイルサイズを得て 数式により 算出後表示

なお コピーファイルは MAX 20個です

条件の違いにより 5~6秒は 違っても良いので 何か簡単な方法はあるでしょうか?
Tomorrow
記事: 72
登録日時: 2005年6月04日(土) 10:09

Re: ファイルのコピー必要時間は 得られますか?

#2 投稿記事 by Tomorrow »

> 何か簡単な方法はあるでしょうか?
簡単な方法は、、、思いつきません。やはり単位時間当たりのコピーバイト数を算出するのが一般的かと思います。
「今のところ」は、「コピー時間を計って」というのは「自分のPCで」とあるのをみると、手動でしょうか?
その部分をプログラムで実現することはできると思います。
> 条件の違いにより 5~6秒は 違っても良いので
 

エクスプローラでのコピーやIEでのダウンロードを想像していただければ、概算時間表示はかなりアバウトなものと思います。
↓で入手できるFireFileCopyでは残り時間を表示してくれますので、感覚をつかむといいと思います。
http://www.k3.dion.ne.jp/~kitt/pc/sw/ffc/

ファイルコピーの性質というか特徴というか、、コピー開始時は早く、徐々に遅くなっていき、ある程度経つと一定速度に落ち着くという感じで、しばらく様子を見ないと正確な予測は難しいです。
さらにOSや他アプリが仕事をしているとコピー速度は大きくふらつきます。
リアルタイムに残り時間が変更されていくのはそのためです。
SPIRIT
記事: 9
登録日時: 2005年5月31日(火) 22:59
お住まい: 兵庫県神戸市
連絡する:

Re: ファイルのコピー必要時間は 得られますか?

#3 投稿記事 by SPIRIT »

エクスプローラーでコピーする時に表示されるダイアログを表示するような方法でも良いのであれば、

コード: 全て選択

SHFileOperation
というAPIを使う方法があります。

今は私はプログラミングができる環境にいないので、サンプルを出して提供することはできませんが
インターネットで
SHFileOperation Declare
などと入力して調べていただければ色々なサンプルが出てきます。

少なくとも自分で実装するのよりは楽だと思いますが、いかがでしょうか。
…ご参考までに。m(_ _)m
wakaba
記事: 32
登録日時: 2007年1月27日(土) 14:03

説明不足でした!

#4 投稿記事 by wakaba »

説明不十分な質問に 回答をしてもらい ありがとうです

>「今のところ」は、「コピー時間を計って」というのは「自分のPCで」とあるのをみると、手動でしょうか?
>その部分をプログラムで実現することはできると思います。

単純な方法で 複数の50MByte以上の ファイルを 数回コピーして ストップウォッチで 計りました

>エクスプローラーでコピーする時に表示されるダイアログを表示するような方法でも>良いのであれば   SHFileOperation
>というAPIを使う方法があります。

自分に作成できるか解りませんが 調べてみます

説明が 充分でなかったかもしれません
1.選択された ファイルを どれくらいの時間で コピーできるかを EditBoxに 表示しています
2.ファイルが 追加された時に 大まかなコピー時間を 知らせたかったのです

私が考えたのは 次のような感じです

1.小さなファイルを 擬似的に コピーしてみて 現在の環境で 単位あたりのコピー時間を 得る
2.数学計算で 実際のファイルの コピー時間を 合計して 表示する


>ファイルコピーの性質というか特徴というか、、コピー開始時は早く、徐々に遅くなっていき、ある程度経つと
>一定速度に落ち着くという感じで、しばらく様子を見ないと正確な予測は難しいです。

このような 動きを 計算に入れていなかったので 小さな擬似ファイルでは うまくいかないと思いました
Tomorrow
記事: 72
登録日時: 2005年6月04日(土) 10:09

Re: 説明不足でした!

#5 投稿記事 by Tomorrow »

> >エクスプローラーでコピーする時に表示されるダイアログを表示するような方法でも>良いのであれば   SHFileOperation
> >というAPIを使う方法があります。
>
> 自分に作成できるか解りませんが 調べてみます
こちらの関数はエクスプローラ上でコピー、移動、削除、リネームを実行するのと同じ効果が得られるようです。
実行するとファイルをコピーするので、
> 2.ファイルが 追加された時に 大まかなコピー時間を 知らせたかったのです
という使い方はできなさそうです。
> このような 動きを 計算に入れていなかったので 小さな擬似ファイルでは うまくいかないと思いました
そうですね。
あまりに小さすぎるファイルだと最新のハード性能では一瞬でコピーが終了してしまい、サイズによる差がないかもしれません。
逆に大きすぎると計測に時間がかかってしまいます。
それに小さいファイルを大量にコピーするのと大きなファイル1個をコピーするのとでも違いがあります。
たいてい前者の方が遅くなると思います。

ベンチマークソフトでHDDや外付けドライブの読み書き速度を計れるものがありますよね。CrystalMarkとかHDBENCHとか。
それらでは少なくとも10MB以上、デフォルトでは100MB程度の一時ファイルを作るよう設定されています。
それに倣って、10~100MB位のファイルで速度計測してみるのがいいかもしれません。

まあ、いろいろ考えていても始まらないので、wakaba さんが考えられた方法でまず作ってみて、性能が足りなかったら改良することにしてはいかがでしょう?
返信する