api函数:shfileoperation{..拷贝整个目录..} procedure CopyDirTree(Ahdl:THandle;SourceDir,TargetDir:String); var SHFileOpStruct:TSHFileOpStruct; FromDir,ToDir:PChar; begin GetMem(fromdir,length(sourcedir)+2); GetMem(todir,length(targetdir)+2); try fillchar(fromdir^,length(sourcedir)+2,0); fillchar(todir^,length(targetdir)+2,0); strcopy(fromdir,Pchar(sourcedir)); strcopy(todir,Pchar(targetdir)); with SHFileOpStruct do begin wnd:=ahdl; wfunc:=FO_COPY; pfrom:=fromdir; pto:=todir; fflags:=FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION; fAnyOperationsAborted:=false; hnamemappings:=nil; lpszprogresstitle:=nil; if shfileoperation(shfileopstruct)<>0 then raiselastwin32error; end; finally FreeMem(fromdir,length(sourcedir)+2); FreeMem(todir,length(targetdir)+2); end; end;
procedure CopyDirTree(Ahdl:THandle;SourceDir,TargetDir:String);
var
SHFileOpStruct:TSHFileOpStruct; FromDir,ToDir:PChar;
begin
GetMem(fromdir,length(sourcedir)+2);
GetMem(todir,length(targetdir)+2);
try
fillchar(fromdir^,length(sourcedir)+2,0);
fillchar(todir^,length(targetdir)+2,0);
strcopy(fromdir,Pchar(sourcedir));
strcopy(todir,Pchar(targetdir)); with SHFileOpStruct do
begin
wnd:=ahdl;
wfunc:=FO_COPY;
pfrom:=fromdir;
pto:=todir;
fflags:=FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
fAnyOperationsAborted:=false;
hnamemappings:=nil;
lpszprogresstitle:=nil;
if shfileoperation(shfileopstruct)<>0 then
raiselastwin32error;
end;
finally
FreeMem(fromdir,length(sourcedir)+2);
FreeMem(todir,length(targetdir)+2);
end;
end;