ファイルをコピー・移動・削除する
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;
|