拷贝目录用多线程,大家给个思路、原代码更好。

解决方案 »

  1.   

    以下为拷录整个文件夹:
    procedure TForm1.copyPathFile(strSourFilePath:string;DeFieldpath:string);//将一个文件夹内文件复制到另外一个文件夹内
    var
     OpStruc:TSHFileOpStruct;
      FromBuf,ToBuf:Array[0..128] of Char;
    begin
      try
        FillChar(FromBuf,Sizeof(FromBuf),0);
        FillChar(ToBuf,Sizeof(ToBuf),0);
        StrPCopy(FromBuf,Pchar(strSourFilePath));
    //strSourFilePath
        StrPCopy(ToBuf,Pchar(DeFieldpath));
           with OpStruc do
        begin
          Wnd:=handle;
          wFunc:=FO_COPY;
          pFrom:=@FromBuf;
          pTo:=@ToBuf;
          fFlags:=FOF_NOCONFIRMATION or FOF_MULTIDESTFILES or FOF_SIMPLEPROGRESS;// or FOF_RENAMEONCOLLISION;
          fAnyOperationsAborted:=False;
          hNameMappings:=nil;
          lpszProgressTitle:=nil;
        end;
        if SHFileOperation(OpStruc)=0 then
        begin
        end;
      except
        raise Exception.Create('错误');
      end;
    end;
    只要在另一个线程中设计用行了。
      

  2.   

    如果是整个目录一次拷贝还是用API 比较好!速度很块的!或者用FileStream拷贝,对文件夹进行递归遍历,拷贝文件!
      

  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.   

    调用API来完成..跟你的程序就没多大关系了