请问大家怎样将一个文件夹的文件覆盖另一个文件夹的文件了,不同名的文件不覆盖。
帮我一下呀!!

解决方案 »

  1.   

    我想大概的思路是这个样子吧:
    首先你需要写一个递归,找出要复制的文件佳下面的所有的文件。
    然后和你要复制到的文件夹下面的文件挨个的比对。
    如果是文件夹那么看看以前存在不存在,如果不存在就创建。
    如果是文件:
    如果文件不存在,那么用ForceDirectories强制创建所有的上级的文件夹,然后进行拷贝(用文件流或者其他的办法)。
    如果文件存在的话就用覆盖的方式重新写。大概就是这个样子。
    我以前的代码分离出来挺麻烦的,大概就是这个思路,你自己在看看吧。我的方法可能不聪明,你也可以再借鉴一下别人的方法。
      

  2.   

    还要判断同名文件是否正在使用,如果强制全部覆盖而且又不用判断结果的话,建议用windows的dos命令xcopy,简单有省事。
      

  3.   

    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;
      

  4.   

    Var
      Sr:TSearchRec;
    begin
      If FindFirst('E:\TransparentDesktop\*.*',FaAnyFile,sr)=0 Then
      Begin
        Repeat
           IF (Sr.Name='.') Or (sr.Name='..') Then
               Continue;
           CopyFile(Pchar('E:\TransparentDesktop\'+Sr.Name),Pchar('E:\aaa\'+Sr.Name),False);
        Until FindNext(sr)<>0;
        FindClose(Sr);
      End;
    end;
      

  5.   

    这方面的源代码好多呀,学会在Google上找呀,
      

  6.   

    cnhgj(戏子):非常感谢,我用你的函数实现了,将整过文件夹都考了过来,但是有没有方法判断,只覆盖修改日期fileAge(filename)为最新的,因为我想旧文件就不覆盖,避免覆盖了新文件。
      

  7.   

    把fFlags注释掉..看看会是怎么样~!