可以采用递归算法,给你一个删除文件的算法,你自己设计拷贝吧:
function TForm1.Deltree (path : string): Boolean ; 
  var 
   SearchRec: TSearchRec; 
  begin 
  //判断目录是否存在 
if DirectoryExists(path) then 
begin 
  //进入该目录,删除其中的子目录和文件 
   oldDir := GetCurrentDir; 
   ChDir(path); 
  //查找目录中所有任何文件 
  FindFirst(′.′, faAnyFile, SearchRec); 
  repeat 
  //修改文件属性为普通属性值 
   FileSetAttr(SearchRec.Name,0); 
  //如果是目录并且不是.和..则递归调用DelTree 
  if(SearchRec.Attr and faDirectory > 0) then 
  begin 
  if(SearchRec.Name[1]<>′.′) then 
  if(not Deltree(SearchRec.Name)) then 
  break; 
  end 
  //如果是文件直接删除 
  else 
  if(not DeleteFile(SearchRec.Name))then 
  break ; 
  //继续查找,直到最后 
  until (FindNext(SearchRec)<>0) ; 
  //回到父目录,删除该目录 
  ChDir(′..′); 
  Result := ReMoveDir(path); 
SetCurrentDir(oldDir); 
  end 
  else 
  Result := False ; 
  end ; 

解决方案 »

  1.   

    var
      fo: TSHFILEOPSTRUCT;
    begin
      with fo do
      begin
        Wnd := 0;
        wFunc := FO_copy;
        pFrom := 源;
        pTo :=目标;
      end;
      (SHFileOperation(fo) = 0);
    end;
      

  2.   

    use
      ShellAPI;function CopyDirectory(const Source, Dest: string): boolean;
    var
      fo: TSHFILEOPSTRUCT;
    begin
      FillChar(fo, SizeOf(fo), 0);
      with fo do
      begin
        Wnd := 0;
        wFunc := FO_COPY;
        pFrom := PChar(source+#0);
        pTo := PChar(Dest+#0);
        fFlags := FOF_NOCONFIRMATION+FOF_NOCONFIRMMKDIR    ;
      end;
      Result := (SHFileOperation(fo) = 0);
    end;
      

  3.   

    两个都答得很好啊~搞到我很难给分得说
    moj得简单点,所以给多点分哦,咔咔:)