请教:
   怎样才能将指定目录的文件(多个)拷贝到另一个目录中?

解决方案 »

  1.   

    //Copy 多个文件的处理:
    function CopyFiles(const Source,Dest: string): boolean;
    var
      fo: TSHFILEOPSTRUCT;
    begin
      FillChar(fo, SizeOf(fo), 0);
      with fo do
      begin
        Wnd := 0;
        wFunc := FO_COPY;
        pFrom := @source[1];
        pTo :=pchar(dest);
        fFlags := FOF_NOCONFIRMATION+FOF_NOCONFIRMMKDIR    ;
      end;
      Result := (SHFileOperation(fo) = 0);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      str:string;
      i:integer;
    begin
      if opendialog1.Execute then
      begin
        for i:=0 to OpenDialog1.Files.Count-1 do
         str:=str+OpenDialog1.Files.strings[i]+#0;
        showmessage(str);
        str:=str+#0;
        CopyFiles(str,'d:\temp');
      end;
    end;
      

  2.   

    用WINAPI,SHFileOperation来实现,再看看介绍!
      

  3.   

    直接用一个循环调用CopyFile岂不是更简单。
      

  4.   

    TO  回复人: Drate(小虫) (  )  :
      

  5.   

    TO  回复人: Drate(小虫) (  )  :
        我试过你的例程, 只能拷贝单个文件不能拷贝多个文件。
        在OpenDialog1好像只能选择单个文件?
      

  6.   

    TO  回复人: qbt() (  ) 信誉:100  
        直接调用循是可以,麻烦你给出一个例程,好吗?
      

  7.   

    到帮助文件中搜索一下FINDFIRST和FINDNEXT,对照例子改动一下就可以了,拷贝文件有COPYFILETO.
    提醒你一下,要对文件名为.和..的两个文件特别处理一下,否则的话你要陷入死循环当中的.
      

  8.   

    procedure FileCopy(From, Dest: string);
    var
      T: TSHFileOpStruct;
      FromDir:PChar;
      ToDir:PChar;
    begin
      GetMem(FromDir,Length(From)+2);
      try
        GetMem(ToDir,Length(Dest)+2);
        try
          FillChar(FromDir^,Length(From)+2,0);
          FillChar(ToDir^,Length(Dest)+2,0);      StrCopy(FromDir,PChar(From));
          StrCopy(ToDir,PChar(Dest));      with T do
          begin
            Wnd    :=0;
            wFunc  :=FO_COPY;
            pFrom  :=FromDir;
            pTo    :=ToDir;
            fFlags :=FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
            fAnyOperationsAborted:=False;
            hNameMappings:=nil;
            lpszProgressTitle:=nil;
            if SHFileOperation(T)<>0 then
              raise Exception.Create('拷贝操作不成功');
          end;
        finally
          FreeMem(ToDir,Length(Dest)+2);
        end;
      finally
        FreeMem(FromDir,Length(From)+2);
      end;
    end;百试不爽