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

解決


久しぶりにプログラマー  2003-06-25 04:58:41  No: 107618

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


たかみちえ  URL  2003-06-25 06:06:52  No: 107619

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

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


久しぶりにプログラマー  2003-06-26 00:33:46  No: 107620

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


クリリン  2003-06-26 01:27:36  No: 107621

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

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


たかみちえ  URL  2003-06-26 02:31:09  No: 107622

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

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

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


クリリン  2003-06-26 03:05:39  No: 107623

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


GOD  2003-06-26 18:37:34  No: 107624

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


美咲  URL  2003-07-15 21:46:58  No: 107625

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


ひさしぶりにプログラマー  2003-07-25 04:05:21  No: 107626

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加