帮我看看这个代码怎么改,谢谢!

qweroopo 2006-10-05 03:42:40
帮我看看这个代码怎么改,谢谢!
{
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;
//!---------------------------------------------------------------------)
...全文
256 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
luincnyou 2006-10-06
  • 打赏
  • 举报
回复
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;
qweroopo 2006-10-06
  • 打赏
  • 举报
回复
自己顶

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧