帮我看看这个代码怎么改,谢谢!
{
 Var
  Source:TFileStream;
  Target: TMemoryStream;
  iCount, iZong, weizhi,ilong: integer;
  Buf: Array[0..4095] Of Byte;
}
//ilong,weizhi赋值的代码省略,ilong<weizhi
Source.Seek(weizhi, soFromEnd); //定位到资源位置
Target.Seek(0,soFromEnd);//往尾部添加资源
Target.CopyFrom(Source,ilong);
就是把Source从weizhi开始长度为ilong的数据加到Target的尾部
Source要是很大的话就要费很多时间,所以我想用repeat替换上面的两句,一部分一部分的读,在repeat期间控制进度条,我的代码是:
//!---------------------------------------------------------------------(
      iZong:=0; //累加
      Form1.ProgressBar1.Max:=(ilong)Div 4095;
      While True Do
      Begin
        If iZong+4096>=ilong Then //这行代码我不敢肯定
        Begin
          Target.CopyFrom(Source, ilong-iZong);
          Form1.ProgressBar1.Position:=Form1.ProgressBar1.Max; //设置进度条满
          Break;
        End
        Else
        Begin
          iCount:=Source.Read(Buf, SizeOf(Buf));
          iZong:=iZong+Target.Write(Buf, iCount);
          Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+1;
          End;
      End;
//!---------------------------------------------------------------------)

解决方案 »

  1.   

    Const
      MaxBufSize=$F000;
    Var
      Source: TFileStream;
      Target: TMemoryStream;
      iCount: integer;
      BufSize, N: integer;
      Buffer: PChar;
       iCount:=MyFileSize-SizeOf(MyFileSize);
          If iCount>MaxBufSize Then BufSize:=MaxBufSize Else BufSize:=iCount;
          GetMem(Buffer, BufSize);
          Try
            While iCount<>0 Do
            Begin
              If iCount>BufSize Then N:=BufSize Else N:=iCount;
              Source.ReadBuffer(Buffer^, N);
              Target.WriteBuffer(Buffer^, N);
              Dec(iCount, N);
            End;
          Finally
            FreeMem(Buffer, BufSize);
          End;