请教如何将一个目录完全移动到另外一个目录中,但是我不想使用复制后删除源目录的方法,

解决方案 »

  1.   

    用系统功能(未公开的API?)进行目录的复制、移动? 
    文件的拷贝,对目录同样使用。只需要将FO_COPY改一下就可以做移动操作了。
    uses ShellApi;function CopyFile(SourceName, TargetName: string): Boolean;
    var
      F: TShFileOpStruct;
    begin
      F.wnd := Handle;
      F.wFunc := FO_COPY;                                       {操作方式}
      F.pFrom := PChar(SourceName + #0#0);
      F.pTo := PChar(TargetName + #0#0);
      F.fFlags := FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;
      result := ShFileOperation(F) = 0;
    end;
    ========================================================================
    复制的例子,将FO_COPY改成FO_MOVE就成了移动了。
    uses shellapi;function CopyFile(SourceName, TargetName: string): Boolean;
    var
      F: TShFileOpStruct;
    begin
      F.wnd := Form1.Handle;
      F.wFunc := FO_COPY;                                       {操作方式}
      F.pFrom := PChar(SourceName + #0#0);
      F.pTo := PChar(TargetName + #0#0);
      F.fFlags := FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;
      result := ShFileOperation(F) = 0;
    end;
    { TForm1 }procedure TForm1.Button1Click(Sender: TObject);
    begin
      CopyFile('E:\Temp', 'E:\Tmp');
    end;
    ====================================================================
    不要弹出确认覆盖对话框,可以,设置那个Flag,
     F.fFlags := FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION or FOF_NOCONFIRMATION;
    而且,你可以隐藏掉进度条以及不允许取消等。只需要设置FLAG
    可以禁止取消,应该怎么做?
    设置参数FOF_SILENT,就不弹出拷贝界面了。也就没法取消了,对了,那个allowundo也
    不设置了,否则可以按右键选择撤销复制
      

  2.   

    F.fFlags := FOF_RENAMEONCOLLISION or FOF_NOCONFIRMATION or FOF_SILENT ;
    当移动'c:\Temp', 到'E:\Temp'时,当e本身有一个temp文件夹时,就会产生一个复件temp的文件夹,并不能把原来的temp真正覆盖掉,请问应该怎么办?