filecopyを使ってネットワーク絡みのファイルコピーをしているのですが、
ファイルが大きく、ネットワークが遅い為、filecopyが終了するまで
プログラムが止まったようになってしまいます。
無知なユーザーがそのまま電源を引っこ抜くので何とかしたいのですが・・・
プログレスバー等を表示できるようにしたいのですが・・・
エクスプローラーとかはどうやっているのでしょう???
エクスプローラーでは、スレッドでも分けてやってるんじゃないでしょうか?
VBは、マルチスレッドに対応していないそうなので、APIを使ってでも新しいスレッドを作成するのは危険です。
DLLを作って、その部分だけ別の言語で、マルチスレッドでやるという方法もあると思いますが…。
(でも、どちらにせよVBアプリケーション上でスレッドを作ることになるので、不安定になるかもしれません)
少し乱暴かもしれませんけど、"プロセスを"別にしてしまうという方法もあると思います。
要するに、処理専用の実行ファイルをつくり、コピー処理をそちらにやらせるということです。
返信ありがとうございます。
何やらVBでやるには無理があるみたいですね・・・
早速、ファイルコピーだけの別プログラムを作ってやってみます。
マルチスレッドを簡単に作りたいのであれば、VB.NETがお勧めです。
VB.NETの標準クラスとして実装しています。
私はMSのまわし者?…違います。
余談ですが、私は、.NETがいやで堪らなかったのですが、仕事で仕方なくVB.NETを勉強していますが、思ったより使いやすいですよ!
どうせやるならC#と思ったのですが、記述が面倒です。C#の記述を行なうのであれば、MFCの方が楽な気がします。
将来はC#一本になるとの噂ですが、VBで習得した技術を無駄にしたくありませんしね…
> VB.NETの標準クラスとして実装しています。
Delphiにも基本クラスにありますよ(と、対抗してみる)
Delphi6Personal(無償配布版)にもついてます。
(言語は違いますけど、Cよりは書き方が似てる?)
> VBで習得した技術を無駄にしたくありませんし
VBで習得した技術といっても、テクニックとか、ノウハウとか、
そんなのはどの言語でも一緒ですし。
Windowsである限りは、APIを呼び出せばみんな一緒…ということもあります。
というわけで、別の言語でも、技術は無駄にならないと思いますよ。
わたしも、今はDelphiでソフトを作ってますけど、
VBで培ってきた技術はとても役に立っています。
なにより、便利なクラスがなく、自分でコーディングしないといけないぶん、
VBでしか得られない(はじめからDelphiでやってたら、得られなかったであろう)技術があったと思います。
> VBでしか得られない技術があったと思います。
私も同意権です。VC習得の時にVBでAPIを弄っていたから、解るんだなぁ…
と思いましたね。
> VBで習得した技術を無駄にしたくありませんし
私が言いたかった事が若干間違っていました。正しくは、アルゴリズム的な所とインストーラ作成の辛さ (^^ゞ ですかね…
スレッド分け云々の前にコピーしていることがわかればよさそうなので・・・
SHFileOperation APIを使用すればエクスプローラでのコピーの時に表示される
アニメーションが表示できたと思いますよ。
もっと手っ取り早い方法がはりますよ
FileCopy使うのをやめてある一定の容量を持ったByte配列を使用してBinaryでファイルを読み書きしてそのByte配列に値が入り終わるごとに制御は帰りますし。
(配列が小さいと時間かかかりますけど見た目は動きつづけます、大きいと止まる時間がありますが少し早いです)
いろいろとありがとうございました。
結局、VBでファイルコピーだけするEXEを作り、呼び出すようにしました。
ツイート | ![]() |