SHFileOperation関数の連続しようでエラー

解決


武田  2005-04-01 02:44:06  No: 14045

SHFileOperation関数の使い方が今ひとつ理解できません。
Button2Click()手続きの中から CopyRootin()手続きを呼び出してファイルをコピーします。これは正常にコピーするのですが、コピー終了後引き続きButton2Click()手続きの中でテキストファイルを移動したいのです。
エラーが出るので、wndを0にしてみたり、handleにしてみたりいろいろするのですがだめです。何がおかしいのかご指導下さいませんか。メモリー解放など必要なのでしょうか。
よろしくお願い致します。
procedure CopyRootin(const CopyFileName: string);//コピールーチン
・・・・
   for i := 2 to num do
・・・・ 
    with  hSHFileOpStruct do        //************* コピーする
    begin
      wnd                := handle;
      wFunc              := FO_COPY;
      pFrom              := PChar(FromFile + #0);
      pTo                := PChar(ToFile + #0);
      fFlags             := FOF_ALLOWUNDO or FOF_NOCONFIRMMKDIR;
      fAnyOperationsAborted :=   False;
      hNameMappings      := nil;
      lpszProgressTitle  := nil;
    end;
    SHFileOperation(hSHFileOpStruct);//************* コピーする
  end;
・・・・・  
end;

procedure TfrmMain.Button2Click(Sender: TObject);
・・・・
      CopyRootin(frmMain.ListBox1.Items[0]);  ←手続き呼び出し
・・・・・
      with  foStruct do             //********************
      begin
        wnd                := 0;  ←←←  エラーになる
        wFunc              := FO_MOVE;
        pFrom              := 'C:\Temp\test.txt' + #0;
        pTo                := 'C:\aaa\' + #0;
        fFlags             := FOF_FILESONLY  or  FOF_ALLOWUNDO;
        fAnyOperationsAborted :=   False;
        hNameMappings      := nil;
        lpszProgressTitle  := nil;
      end;
      SHFileOperation(foStruct);    //********************
・・・
end;


なんていうか  2005-04-01 07:19:13  No: 14046

> エラーが出るので

エラーメッセージを書かないのは致命的。コードも分かりづらい。
回答しづらい。


にしの  2005-04-01 20:56:14  No: 14047

非同期で動くはずですので、ファイルコピー完了していないのでしょう。
完了するまで待ってから次の処理をすべきです。


平蔵  2005-04-01 21:43:43  No: 14048

SHFileOperation APIの使い方自体には問題なさそうですので、
にしのさんの言うとおりでしょう。
ファイルの移動、コピーについては、CopyFile、DeleteFile
を使うという選択肢もあります。SHFileOperationのように
Windowsに全部任せてしまう処理ではないので、同期的に
進捗を把握できますので、用途によっては無理にSHFileOperation
を使う必要はないと思います。


武田  2005-04-02 03:45:32  No: 14049

新人で、まだ先輩方にどのように説明したらいいのかが解らない次第で、大変ご迷惑をおかけしました。
アドバイスに従い、いろいろ試みましたが、だめでしたので、とりあえず平蔵様のアドバイスでCopyFile、DeleteFileを試みましたところとりあえず目的は達成できました。
できればいいのかもしれませんが、勉強中ですから、この問題にも引き続き挑戦していきます。
もう少し問題を整理してまた質問させてください。
SHFileOperationに関しましては、また教えてください。
助かりました。ありがとうございました。


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

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






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