如果您仅使用Windows,而对代码可移植性不感兴趣,则可以恢复到win api:
uses
ShellApi;
function MultiFileCopy(const ASource, ADest: string): Boolean;
var
FO: TSHFileOpStruct;
begin
FillChar(FO, SizeOf(FO), #0);
FO.Wnd := 0;
FO.wFunc := FO_COPY;
FO.pFrom := PChar(ASource + #0);
FO.pTo := PChar(ADest + #0);
FO.fFlags := FOF_FILESONLY or FOF_NOERRORUI or FOF_NOCONFIRMATION or FOF_SILENT;
Result := (SHFileOperation(FO) = 0)and(not FO.fAnyOperationsAborted);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(BoolToStr(MultiFileCopy('C:\*.pdf', 'X:\'), True));
end;
上面的代码包含一些使方法完全静音的技巧,请阅读有关SHFileOperation for flags和SetErrorMode的文档(
正如David所指出的
SetErrorMode(SEM_FAILCRITICALERRORS)
在应用程序初始化期间只应调用一次
)
正如Remy在评论#0中所说,之所以存在,是因为需要以双null结尾的字符串。