我想把磁盘目录下的某个文件夹下的所有文件复制到别的磁盘下相应目录下相应文件夹下,应该怎么办,目标文件夹不是建好的,也就是说在复制的同时就建立相应的文件夹,如果有就建立文件夹,如果没有文件就不建立,只复制文件就可以了
比如:c:\temp\dddd\rrrr\ddd.zip
要复制到d:\temp\dddd\rrrr\ddd.zip

解决方案 »

  1.   

    判断文件夹是否存在用DirectoryExists函数;
    创建文件夹可用ForceDirectories函数或CreateDir函数;
    拷贝文件用CopyFile函数。
      

  2.   

    //------------------------------------------------------------------------------
    //涵数名:  CopyDir
    //参数:    DirName    待拷贝的文件夹
    //          DestDrive  目标文件夹
    //          IncludeSub 是否拷贝子目录
    //                     true    拷贝子目录
    //                     false   不拷贝子目录
    //          ToRecyle   是否允许取消
    //                     true    允许
    //                     false   不允许
    //------------------------------------------------------------------------------
    function CopyDir(const DirName, DestDrive: string; const IncludeSub,
      ToRecyle: Boolean): Boolean;
    var
      fo: TSHFILEOPSTRUCT;
      tmpDir: String;
    begin
      FillChar(fo, SizeOf(fo), 0);
      with fo do
      begin
        Wnd := GetActiveWindow;
        wFunc := FO_COPY;
        pFrom := PChar(DirName + '\*.*' + #0);
        if Pos(DestDrive, '\') > 0then
          tmpDir :=  DestDrive + Copy(DirName, 3, Length(DirName) - 2)
        else
          tmpDir :=  DestDrive + '\' + Copy(DirName, 3, Length(DirName) - 2);
        if not DirectoryExists(tmpDir)then
          CreateDir(tmpDir);
        pTo := PChar(tmpDir);
        fFlags := FOF_SILENT or FOF_NOCONFIRMATION or FOF_NOERRORUI
                  or (Ord(not IncludeSub) * FOF_FILESONLY)
                  or (ORd(ToRecyle) or FOF_ALLOWUNDO);
      end;
      Result := (SHFileOperation(fo) = 0);
    end;
      

  3.   

    补充说明:创建文件夹时需要逐级建立用ForceDirectories,不用自己一级级的建立。
      

  4.   

    在问一个问题,已知文件路径,怎么才能得到这个文件的文件夹
    例如,也知文件路径c:\ddd\rrr\ddk\xx.zip
    我想得到它的文件夹,也就是c:\ddd\rrr\ddk\
    用什么方法