procedure TForm1.CopyDirectory(subDirName, sourceDirName,
desDirName: string);
var
SHFileOpStruct:TSHFileOpStruct;
begin
if SourceDirName[Length(sourceDirname)]<>'\' then
sourceDirName:=sourceDirName+'\';
if desDirName[Length(desDirname)]<>'\' then
desDirName:=desDirName+'\';
if not DirectoryExists(desDirName+subDirName) then
CreateDir(desDirName+subDirName); with shfileopStruct do
begin
wnd:=Handle;
wFunc:=FO_Copy;
pFrom:=PChar(sourceDirName+subdirname+'\back');
pTo:=PChar(desDirName+subdirname); fFlags:=FOF_ALLOWUNDO or FOF_NOCONFIRMATION;
FAnyOperationsAborted:=False;
hNameMappings:=nil;
lpszProgressTitle:='文件复制中';
end;
if ShfileOperation(shFileOpStruct)<>0 then
RaiseLastWin32Error;
end;写了这么一个过程,调用shfileoperation 进行文件复制,但是除了一点小问题,如果源目录d:\ddd 就会报错,找不到磁盘文件 d:\dddd 这样就会成功,也就是 奇数个字符的根目录名会报错,偶数个就不会,不知道大家遇上过没有,还是delphi包装api的bug!
desDirName: string);
var
SHFileOpStruct:TSHFileOpStruct;
begin
if SourceDirName[Length(sourceDirname)]<>'\' then
sourceDirName:=sourceDirName+'\';
if desDirName[Length(desDirname)]<>'\' then
desDirName:=desDirName+'\';
if not DirectoryExists(desDirName+subDirName) then
CreateDir(desDirName+subDirName); with shfileopStruct do
begin
wnd:=Handle;
wFunc:=FO_Copy;
pFrom:=PChar(sourceDirName+subdirname+'\back');
pTo:=PChar(desDirName+subdirname); fFlags:=FOF_ALLOWUNDO or FOF_NOCONFIRMATION;
FAnyOperationsAborted:=False;
hNameMappings:=nil;
lpszProgressTitle:='文件复制中';
end;
if ShfileOperation(shFileOpStruct)<>0 then
RaiseLastWin32Error;
end;写了这么一个过程,调用shfileoperation 进行文件复制,但是除了一点小问题,如果源目录d:\ddd 就会报错,找不到磁盘文件 d:\dddd 这样就会成功,也就是 奇数个字符的根目录名会报错,偶数个就不会,不知道大家遇上过没有,还是delphi包装api的bug!
API没包装的,API都是直接使用的,框架才有包装的说法
偶 一直 都在 API递归!
如:pFrom:=PChar(sourceDirName+subdirname+'\back'+#0);