filecopyでプログラムが止まらなくするには?

解決


久しぶりにプログラマー  2003-06-24 19:58:41  No: 107618  IP: [192.*.*.*]

filecopyを使ってネットワーク絡みのファイルコピーをしているのですが、
ファイルが大きく、ネットワークが遅い為、filecopyが終了するまで
プログラムが止まったようになってしまいます。
無知なユーザーがそのまま電源を引っこ抜くので何とかしたいのですが・・・
プログレスバー等を表示できるようにしたいのですが・・・
エクスプローラーとかはどうやっているのでしょう???

編集 削除
たかみちえ  URL  2003-06-24 21:06:52  No: 107619  IP: [192.*.*.*]

エクスプローラーでは、スレッドでも分けてやってるんじゃないでしょうか?
  VBは、マルチスレッドに対応していないそうなので、APIを使ってでも新しいスレッドを作成するのは危険です。
  DLLを作って、その部分だけ別の言語で、マルチスレッドでやるという方法もあると思いますが…。
(でも、どちらにせよVBアプリケーション上でスレッドを作ることになるので、不安定になるかもしれません)

  少し乱暴かもしれませんけど、"プロセスを"別にしてしまうという方法もあると思います。
要するに、処理専用の実行ファイルをつくり、コピー処理をそちらにやらせるということです。

編集 削除
久しぶりにプログラマー  2003-06-25 15:33:46  No: 107620  IP: [192.*.*.*]

返信ありがとうございます。
何やらVBでやるには無理があるみたいですね・・・
早速、ファイルコピーだけの別プログラムを作ってやってみます。

編集 削除
クリリン  2003-06-25 16:27:36  No: 107621  IP: [192.*.*.*]

マルチスレッドを簡単に作りたいのであれば、VB.NETがお勧めです。
VB.NETの標準クラスとして実装しています。
私はMSのまわし者?…違います。

余談ですが、私は、.NETがいやで堪らなかったのですが、仕事で仕方なくVB.NETを勉強していますが、思ったより使いやすいですよ!
どうせやるならC#と思ったのですが、記述が面倒です。C#の記述を行なうのであれば、MFCの方が楽な気がします。
将来はC#一本になるとの噂ですが、VBで習得した技術を無駄にしたくありませんしね…

編集 削除
たかみちえ  URL  2003-06-25 17:31:09  No: 107622  IP: [192.*.*.*]

> VB.NETの標準クラスとして実装しています。
  Delphiにも基本クラスにありますよ(と、対抗してみる)
  Delphi6Personal(無償配布版)にもついてます。
(言語は違いますけど、Cよりは書き方が似てる?)

> VBで習得した技術を無駄にしたくありませんし
  VBで習得した技術といっても、テクニックとか、ノウハウとか、
そんなのはどの言語でも一緒ですし。
  Windowsである限りは、APIを呼び出せばみんな一緒…ということもあります。
  というわけで、別の言語でも、技術は無駄にならないと思いますよ。

  わたしも、今はDelphiでソフトを作ってますけど、
VBで培ってきた技術はとても役に立っています。
  なにより、便利なクラスがなく、自分でコーディングしないといけないぶん、
VBでしか得られない(はじめからDelphiでやってたら、得られなかったであろう)技術があったと思います。

編集 削除
クリリン  2003-06-25 18:05:39  No: 107623  IP: [192.*.*.*]

> VBでしか得られない技術があったと思います。
私も同意権です。VC習得の時にVBでAPIを弄っていたから、解るんだなぁ…
と思いましたね。
> VBで習得した技術を無駄にしたくありませんし
私が言いたかった事が若干間違っていました。正しくは、アルゴリズム的な所とインストーラ作成の辛さ (^^ゞ ですかね…

編集 削除
GOD  2003-06-26 09:37:34  No: 107624  IP: [192.*.*.*]

スレッド分け云々の前にコピーしていることがわかればよさそうなので・・・
SHFileOperation APIを使用すればエクスプローラでのコピーの時に表示される
アニメーションが表示できたと思いますよ。

編集 削除
美咲  URL  2003-07-15 12:46:58  No: 107625  IP: [192.*.*.*]

もっと手っ取り早い方法がはりますよ
FileCopy使うのをやめてある一定の容量を持ったByte配列を使用してBinaryでファイルを読み書きしてそのByte配列に値が入り終わるごとに制御は帰りますし。
(配列が小さいと時間かかかりますけど見た目は動きつづけます、大きいと止まる時間がありますが少し早いです)

編集 削除
ひさしぶりにプログラマー  2003-07-24 19:05:21  No: 107626  IP: [192.*.*.*]

いろいろとありがとうございました。
結局、VBでファイルコピーだけするEXEを作り、呼び出すようにしました。

編集 削除