复制'c:\abc\*.*' 到 'c:\ddd',希望结果是:'c:\ddd\*.*'
以下程序结果:c:\ddd\abc\*.*
1.如何修改,使其不会复制本身的目录名,能通过 TSHFILEOPSTRUCT中的参数设置么?
2.如何过滤不符合条件的文件?
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;

解决方案 »

  1.   

    用findfirst和findnext函数,取得该文件夹下的文件,然后复制过去就可以了
      

  2.   

    findfirst,findnext应该都可以实现,不过我现在使用的方法是对整个目录(包括子目录)操作的最简便方法,我希望能在这个方法上实现上述功能。不过还要谢谢你,shadowfish!
      

  3.   

    uses IdGlobal;CopyFileTo('c:\abc\*.*','c:\ddd\*.*');
      

  4.   

    1. 我试了并不会复制本身的目录名
    2. 你的条件是什么?根据扩展名还是其它?可以这样复制:
       CopyDirectory('c:\abc\*.txt'#0'c:\abc\*.zip'#0'c:\abc\a.htm', 'c:\ddd');
       但是这样就没办法带子目录一起复制了,
       复杂的条件就用FindFirst,FindNext吧。
      

  5.   

    to sysu:
      我直接用的是目录名,'c:\abc',这样就会复制目录;用扩展名时只能复制一类文件;用*.*时可以复制下子目录。
      谢谢大家!