function CopyDir(FromDir:String;ToDir:String):Boolean;
Var
  FO:TSHFileOpStruct;
begin
  result:=false;
  if ((FromDir='directorylistbox1.Directory') or (ToDir='ShellTreeView1.Path')) then
    exit;
  With FO do
   Begin
    Wnd:=0;
    wFunc:=FO_Copy;
    pFrom:=Pchar(FromDir+#0#0);
    pTo:=PChar(ToDir+#0#0);
    fFlags:=FOF_NOCONFIRMATION;
    hNameMappings:=nil;
    lpszProgressTitle:=PChar('正在复制文件夹'+FromDir+'到'+ToDir);
    fAnyOperationsAborted:=false;
  End;
  if SHFileOperation(FO)=0 then
    result:=true;
end;此方法可将FromDir的文件复制到ToDir,但如果存在重名,也就是在目地的(todir)存在与源文件(fromdir)重名时,如何修改源文件文件夹后再复制呢?也就是说如果想把光盘的file_a文件夹(以及内部文件)复制到D盘,但D盘已存在file_a,就把光盘的file_a修改名为file_b再复制到D盘,内容不变.如何实现?

解决方案 »

  1.   

    学习
    upFO_RENAME Renames the files specified by pFrom. 也许有帮助
      

  2.   

    if fileexist('文件名') then
      renamefile(‘原来的文件名’,‘新的文件名’)
      

  3.   

    在这个操作之前SHFileOperation(FO)做个判断,ToDir如果存在,就
    ToDir:=ToDir+"(1)";类似这样就可以了,做好就是作个循环判断就可以想系统新建文件夹一个,在建就是“新建文件夹(1)”再来就是(2)了,自己控制一下就可以
      

  4.   

    不要去改原来的文件夹的名字,你也可以做个对话框,给你重命名(ToDir)