我想一次性把多个文件拷贝到多个文件夹,请问怎么实现。
比如文件1、文件2拷贝到目录1,文件3、文件4拷贝到目录2,我想一次性实现。就是只显示一次进度条提示框,请问该怎么解决。
我现在只想到调用两次SHFileOperation的方法,即一次将文件1、文件2拷贝到目录1,一次将文件3、文件4拷贝到目录2。请问能不能只调用一次实现。

解决方案 »

  1.   

    这个用SHFILEOPERATION实现不了.
    用批处理文件来实现.
      

  2.   

    刚刚发贴,就想到了办法。本来想来删除这个贴,可惜有人回答了。
    方法其实很简单
    pForm:文件1+#0+文件2+#0+文件3+#0+文件4+#0+#0(文件名带路径)
    pTo:目录1+文件1+#0+目录1+文件2+#0+目录2+文件3+#0+目录2+文件4+#0+#0(文件名不带路径)。
    后面灌水的都有分,呵呵,虽然分不多。
      

  3.   

    不好意思.
    刚才查了帮助,可以一次性操作多个文件.
    fFLAGS要包含FOF_MULTIDESTFILES标志.
      

  4.   

    procedure ShellCopy(const dir1:string; const dir2:string); /////格式shellcopy('d:\1\*.*','e:\1\');///windows外壳拷贝
    var
    f:TSearchRec;
    na,sdir:string;
    s:tstringlist;
    i:integer;
    fshell:TSHFileOpStruct;
    begin
       s:=tstringlist.Create;
       //////////////////////
       if (not DirectoryExists(dir2)) then CreateDir(dir2);
       sdir:=dir1;
       delete(sdir,length(sdir)-2,3);
       if FindFirst(dir1,faAnyFile,f)=0 then
         begin
           if (f.Name<>'database.dat') and (f.Attr<>faDirectory) then
             begin s.Add(f.Name) end;
           repeat
            na:=f.Name;
            FindNext(f);
            if (na<>f.Name) and (f.Name<>'database.dat') and (f.Attr<>faDirectory) then
              begin s.Add(f.Name); end;
           until na=f.Name;
         end;
       //////////////////////
       fshell.Wnd:=form1.Handle;
       fshell.wFunc:=FO_COPY;
       fshell.fFlags:=FOF_SILENT;
       for i:=0 to s.Count-1 do
         begin
           fshell.pFrom:=pansichar(sdir+s.Strings[i]);
           fshell.pTo:=pansichar(dir2+s.strings[i]);
           SHFileOperation(fshell);
         end;
    end;