ファイルをコピー・移動・削除する
SHFileOperation APIを使ってファイルをコピー・移動・削除する方法です。
wFuncに FO_COPYを渡せばコピー、FO_MOVEを渡せば移動、FO_DELETEを渡せば削除になります。fFlagsに FOF_FILESONLYを渡せばファイルだけ、それを外せばサブフォルダまでコピーします。削除の時に
FOF_ALLOWUNDOを指定しておけばごみ箱に入ります。
以下のサンプルはユーザに2つのフォルダを選択させ、指定フォルダ内のすべてのファイルをコピーします。
■ ファイルコピーの例 |
uses ShellAPI, FileCtrl; procedure TForm1.Button1Click(Sender: TObject); var foStruct: TSHFileOpStruct; FromPath: string; ToPath: string; begin //コピー元のディレクトリを指定 if (SelectDirectory(FromPath, [sdAllowCreate], 0)) then begin //コピー先のディレクトリを指定 if (SelectDirectory(ToPath, [sdAllowCreate], 0)) then begin with foStruct do begin wnd := Handle; wFunc := FO_COPY; pFrom := PChar(FromPath + '\*.*' + #0); pTo := PChar(ToPath + '\' + #0); fFlags := FOF_FILESONLY or FOF_ALLOWUNDO; fAnyOperationsAborted := False; hNameMappings := nil; lpszProgressTitle := nil; end; SHFileOperation(foStruct); end; end; end; |