ファイル単純コピーの進行状況を取得する方法

このQ&Aのポイント
  • VB.NETのSystem.IO.File.Copy関数を使用してファイルをコピーする際、進行状況を監視する方法を調査しています。
  • ローカルコンピュータ内でのコピーでは問題ありませんが、LAN環境でのコピーでは回線の状況により切断や遅延が発生する可能性があります。
  • 現在の案としては、コピー開始前にファイルサイズを取得し、コピー中のファイルサイズの変化を監視する方法を検討しています。
回答を見る
  • ベストアンサー

ファイル単純コピーの進行状況を取得する方法

毎度(?)お世話になっております。m(_ _)m VB.NET の System.IO.File.Copy(FromFile , ToFile) 関数において、そのコピーの進行状況を取得する方法を調べております。 ローカルコンピュータ内ならばそれほど問題にはならないのですが、 LAN環境の他のマシンとのやり取りをする際に、回線状況が悪くなって 切断されたり、おもーくなったりしている状況を感知したいと考えております。 現在の案としては、  ・Copy開始前にファイルサイズを取得し、コピーされ始めたファイルのサイズを   完了するまで監視して、サイズにしばらく変化が無ければなんらかの障害が発生 というのを考えましたが、なんとなく上手くいっていないような気がします。 もしこの他に、皆さんで他に良い案がありましたらご教授お願いします。

  • uc078
  • お礼率92% (75/81)

質問者が選んだベストアンサー

  • ベストアンサー
  • y_an
  • ベストアンサー率57% (24/42)
回答No.1

回答ではなく自信もなく申し訳無いのですが、 コピー関数を使用せずに1バイトずつ読み込んでは出力するといった形を取っては? uc078さんがあげている例も常に監視をするので、 実現できても処理としては遅そうです。(未確認) 多少は遅くても良くってコピー処理よりも進行状況を優先するのであれば、 その方が現実的かもしれません。 初めにコピー元のファイルサイズを取得し、 後はループで進んだ回数分画面に反映させるだけです。 ただ、1バイト毎に画面に反映させるとコピーする速度より画面リフレッシュの方が、 処理に時間を取られる可能性があるので、 ・100バイト毎 ・コピー元のファイルサイズに対する1%毎 といった様にいろいろ試した方が良いと思います。 VB.NETは使った事はなく、VB6では似たような事で対処した事があります。 参考になれば幸いです。

uc078
質問者

お礼

回答が遅くなって申し訳ありませんm(__)m y_anさんお方法ですが、当方でも思い付き試したのですが、結構処理が重くなってしまいあきらめていたところでした。(やりかたがまずかったのかな?) 今回は必須の機能ということでもないので、次の機会にその機能を考えたいと思います。 ありがとうござました。

関連するQ&A

  • ExcelVBAでファイルコピー

    ExcelVBA2000です。 VBAでファイルコピーしたいのですがどのようにしたらよいのでしょうか。 Dim FromFile As String ' コピー元ファイル Dim ToFile As String ' コピー先ファイル Copy FromFile, ToFile とか FileSystemObject.CopyFile FromFile, ToFile とかのようには思うのですが出来ません。

  • ファイルコピーを制限したい

    WinXP Pro、VB6 SP5です ファイルのコピーを監視して、ユーザーが指定ドライブ以外(例えばUSBの記録媒体など)にファイルをコピーするのを防ぐプログラムを作りたいんです。 しかしいろいろ探してみたんですがファイルコピーを監視する方法が見つかりません。 これは可能なのでしょうか。可能ならばどのようなAPIやツールが使えそうでしょうか。 ヒントでもいいのでよろしくお願いします。

  • コピーについて

    質問です。 ファイルのコピーについて質問ですが、デスクトップに保存したい場合 どうすれば良いんでしょうか? ("C:\Documents and Settings\****\デスクトップ") *=は不特定の場合どうすれば取得してコピー出来るのでしょうか? 詳細に分りやすく回答をお願いします。 例: System.IO.File.Copy("C:\test.txt", "C:\Documents and Settings\****\デスクトップ", True) ?? 分りません・・。

  • 差分ファイルのみコピーするには?

    Windows2000 VB6 で開発中です。 度々すみません。 ファイルコピーをする時に、"日付かサイズが違っていたらコピーする。" という条件をつけているのですが、対象ファイルの量が多い為、非常に時間がかかってしまいます。 VB標準の関数で、オプションをつければ、勝手に差分だけコピーしてくれるような物はないでしょうか? また、こうしたらもっと早くなるという方法がありましたら、ぜひご教授願います。

  • ファイルコピープログラムについて

    まだC言語とか始めたばかりであまりよく分からないのですが、 今、ドラッグしたファイルをデスクトップにコピーするプログラムを作成してるのですが、少し困ったことになりました・・・・ 一応ファイルのコピーをデスクトップに作成はできるのですが、 何故か、作成されたファイルのサイズが2バイト程大きくなります・・・。 ファイルサイズを変えずにコピーする方法が分かりません・・・ ソースを張っておきますので、誰か解決策を教えていただけないでしょうか? #include <stdio.h> #include <windows.h> int main(int argc,char *argv[]) { FILE *fp,*copy; int buf; if(argc>1){ rename(argv[1],"DATA.bin"); fp=fopen("DATA.bin","rb"); copy=fopen("c:/xxx/yyy/Desktop/COPY.bin","wb"); while(1){ fread(&buf,sizeof(buf),1,fp); fwrite(&buf,sizeof(buf),1,copy); if(feof(fp)){ puts("OK"); fclose(fp); fclose(copy); rename("DATA.bin",argv[1]); rename("COPY.bin",argv[1]); exit(1); } } } return 0; }

  • ファイル送信時の「残り時間」の取得方法

    お世話になっております。 現在VC++6.0にてプログラミングをしています。 タイトルの通り、残り時間の取得方法をさがしています。 ファイルのコピーや移動をするときに対象のファイルサイズが大きいと プログレスバー付きのダイアログが出てきて「残り○○分」と表示されると思います。 上記例のような残り時間をLANでのデータ送信で表示させたいのですが WindowsAPIに、このような時間を取得するAPIはありますでしょうか? それとも、ファイル送信(コピー)時に別スレッドで監視し、1秒おきぐらいに (全体データサイズ - 送信済みデータサイズ) / (送信済みデータサイズ / 経過時間) で表示やるしかないのでしょうか? ご存知のかたは御教授おねがいします。<(__)> (環境:WinXP VC++6.0)

  • ファイルコピーの事で質問です。

    質問ですが、 'フォルダセット Dim fbd As New FolderBrowserDialog fbd.Description = "フォルダを指定して下さい。" fbd.RootFolder = Environment.SpecialFolder.Desktop fbd.SelectedPath = Environment.SpecialFolder.Desktop 'コピー System.IO.File.Copy(fbd.SelectedPath & "\test.pak", System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles) & "\test.pak") フォルダを選択した後、 そのフォルダ内の「test.pak」をコピーして、 プログラムファイルを取得して、取得した先の場所に保存したいのですが、 これをデバッグすると、怒られてしまいます。 "(C:\Program File\test.pak) の一部が見つかりませんでした" という怒られ内容です。 ドコモ間違ってないのに、この様なエラーが出てしまうのですが 何処が悪いのでしょうか?どの様な改善をすれば良いでしょうか?

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

    環境:Windows2000Sever SP4 あるデータファイルがあります。サイズは約1.9GBです。 このファイルをあるサーバーからあるサーバーへコピーを行いたい。 しかし、このファイルを夜間のバッチファイルでのコピーを行うと正常にコピーされません。(バッチファイルでは、他の数百のファイルもコピーしている)が、手動で上記一ファイルのコピーを行うと正常にコピーされます。 バッチファイルでコピーした場合も、エクスプローラで見ると見た目上はコピーできているようなのですが、実際ファイルの内容を見てみると壊れています。 バッチファイルでコピーした場合と、手で直接コピーした場合とで何か相違あるのでしょうか? また、なんとかバッチファイルでコピーを行いたいのですが、何かよい方法はありますでしょうか? たとえば、分割をしてコピーを行うとか・・・。その場合、バッチでどのように処理を行えばよいのでしょうか?

  • IPリストからIPを取得してファイルコピー

    表題の件でご教授お願いできませんでしょうか。 IPアドレスの記載されたリストがあるとします。 192.168.1.1 192.168.1.2 192.168.1.3 各IPアドレスにネットワーク越しにログインして、 所定のディレクトリのファイルをコピーしたいと思っています。 以下にやりたいポイントを記載します。 (1)コピーしたファイルはIPアドレスのフォルダを作成し、そこに置く。 (2)IPリストに記載されるPCはユーザが異なる為、net useを用いる必要があります。 mkdir 192.168.1.1 cd 192.168.1.1 net use \\192.168.1.1 /user:administrator test copy \\192.168.1.1\C$\windows\***.txt これをリストから読ませて、複数のPCからファイルを取得したいのです。どなたかご存知のかたいらっしゃいましたら教えて下さい。

  • こんなファイルコピーは無いでしょうか?

    Windows7で動作するファイルコピーツールを探しています。条件は、 (1)複数のコピープロセスがあったとき、1つのドライブに対する書き込みは1つのプロセスだけにし、残りは保留状態にする。 (2)Explolerライクな画面でGUIによる操作ができる(ドラッグ&ドロップなど)。 (3)コピー(移動)終了時にツールも閉じること。 の3点を満たしていることです。(3)は必須でなくても構いません。 C:→D:とE:→F:は並列に動作して、C:→D:とE:→D:はどちらかが保留されることを望んでいます。 Windows標準のコピーでは複数のコピープロセスを起動すると、並列に動作します。 結果、書き込まれる側のドライブはシークなどで速度がガタ落ちです。 IOデータ機器のマッハCopyも同様で、手動での保留はできますが自動でやって欲しいのです。 大容量バッファによる高速コピーは、どうでもいいです(書き込みドライブが激遅のため)。 これは、というツールをご存知の方、ご教示願います。

専門家に質問してみよう