ディレクトリリストボックスを使ってフォルダAのファイルを
フォルダBにコピーしています。下記のような感じです。
間違ってたらすみません。
if FindFirst(Form1.DirectoryListBox1.Directory + '\*.*',0,AFile ) = 0 then
begin
repeat
AFileName := Form1.DirectoryListBox1.Directory + AFile.Name;
BFileName := Form1.DirectoryListBox2.Directory + AFile.Name;
Copyfile(PChar(AFileNAME) , PChar(BFileName) , False);
until FindNext(sr) <> 0;
FindClose(sr);
end
フォルダAのファイルをフォルダBにコピーしている最中に、
フォルダA、もしくはコピー最中のフォルダAのファイルを
削除しようとすると、
////////////////////////////////////////////////////////////
//「ファイルまたはフォルダの削除エラー」 //
//AFileを削除できません。共有違反がありました。 //
//送り側または受け側のファイルは使用中の可能性があります。//
////////////////////////////////////////////////////////////
が表示されます。
これを出さないようにしたいと考えています。
コピー最中に関わりなく強制的に削除する方法
コピー最中のファイルが終わった後、そのファイルを消す方法
など他にもあると思いますがやり方がわかりません。
よろしくお願いします。
Hookしてしまえばできます。
もっと簡単な方法があるかもしれませんが。
デモの中に、copyhookというのがあると思います。
ICopyHookインターフェースの実装をして、シェルに組み込んでおけばOKです。
にしのさん回答ありがとうございます。
早速、調べてやってみます。
シェルというものが、私のような初心者には難しすぎて
あまり理解できませんでした;;
わかる人にはわかるかもしれないので下記を載せておきます。
http://www.asahi-net.or.jp/~GV4J-SGUR/narik/stp002b.htm#ICopyHook
もうすこし調べてみます。
どこでどのように宣言し、どう組み込めばいいのかなど
基本的なシェルAPIの使い方がわからないので、
もう少し簡単な他の方法はないでしょうか?
良い助言をお待ちしております。よろしくお願いします。
コピーしているアプリケーションとは別のアプリケーション(Exploreなど)で削除しているのですよね。
そうであれば、エラーを出しているのは別のアプリケーションですから、コピーしているアプリケーションからエラーを出さないようには出来ないと思います。
例えば、エクスプローラでコピー中に、別のエクスプローラで削除すると同じようにエラーが出ます。
にしのさんありがとうございます。
にしのさんの言うとおり、アプリケーションでファイルのコピーを行い、
エクスプローラで削除しています。
コピー側アプリケーションからの、このエラーの回避は無理なんですね。
できないことを言ってしまい、申し訳ございませんでした。
ツイート | ![]() |