{
 Var
  Target,Source:TFileStream;
}Target.Seek(0,soFromEnd);//往尾部添加资源
Target.CopyFrom(Source,0);
就是把Source的全部加到Target的尾部
Source要是很大的话就要费很多时间,所以我想用repeat替换上面的两句,一部分一部分的读,在repeat期间控制进度条,请大家帮忙,谢谢!

解决方案 »

  1.   

    read+缓冲区(我也不清楚)
    帮你顶
      

  2.   

    你可以查看一下VCL源代码,CopyFrom也是分段复制的
    建议你使用内存镜像文件处理大文件的操作
    参考如下代码:var
      vFileDest: THandle;
      vFileSource: THandle;
      vSizeDest: Integer;
      vSizeSource: Integer;
      vMappingDest: THandle;
      vMappingSource: THandle;
      vDataDest: Pointer;
      vDataSource: Pointer;
    begin
      vFileDest := _lopen('c:\temp\temp.txt', OF_READWRITE or OF_SHARE_DENY_NONE);
      vFileSource := _lopen('c:\temp\temp2.txt', OF_READ or OF_SHARE_DENY_NONE);  vSizeDest := GetFileSize(vFileDest, nil);
      vSizeSource := GetFileSize(vFileSource, nil);
      vMappingDest := CreateFileMapping(vFileDest, nil, PAGE_READWRITE, 0,
        vSizeDest + vSizeSource, '~MyMappingDest');
      vMappingSource := CreateFileMapping(vFileSource, nil, PAGE_READONLY, 0,
        vSizeSource, '~MyMappingSource');
      vDataDest := MapViewOfFile(vMappingDest, FILE_MAP_WRITE, 0, 0,
        vSizeDest + vSizeSource);
      vDataSource := MapViewOfFile(vMappingSource, FILE_MAP_READ, 0, 0,
        vSizeSource);
      Move(vDataSource^, Pointer(Integer(vDataDest) + vSizeDest)^, vSizeSource);  UnmapViewOfFile(vDataDest);
      UnmapViewOfFile(vDataSource);
      CloseHandle(vMappingDest);
      CloseHandle(vMappingSource);
      CloseHandle(vFileDest);
      CloseHandle(vFileSource);
    end;
      

  3.   

    这段代码,如果添加的文件小可以不变
      Move(vDataSource^, Pointer(Integer(vDataDest) + vSizeDest)^, vSizeSource);
    如果大了,还得分段
      

  4.   

    var
      Buf: array [0..4095] of Byte;
      iCount: Integer;
    Target.Seek(0,soFromEnd);//往尾部添加资源
    iCount := Source.Read(Buf, SizeOf(Buf));
    while iCount > 0 do
    begin
      Target.Write(Buf, iCount);
    //进度条
      iCount := Source.Read(Buf, SizeOf(Buf));
    end;