在上面两个中我们都是把一个文件做为整体进行复制
这一节我们要把文件分成块来一块块复制
procedure TForm1.Button1Click(Sender: TObject);
const
buffsize=4096;
var
instrm,outstrm:tfilestream;
i,biaoji:integer;
p:array [1..buffsize] of char;
begin
instrm:=tfilestream.Create('c:\my.exe',fmOpenRead);//流打开文件
outstrm:=tfilestream.Create('c:\ok.exe',fmCreate);//流保存的文件
i:=instrm.Size;
instrm.Position:=0;//把流指针放在开始位置,用时要从头读取
while instrm.Position <=i do
begin
if (i-instrm.Position)> buffsize then
begin
instrm.ReadBuffer(p,buffsize);
outstrm.WriteBuffer(p,buffsize);
end
else
begin
biaoji:=i-instrm.Position;//如果没有这里中转,余下部分不能写入
instrm.ReadBuffer(p,biaoji);
outstrm.WriteBuffer(p,biaoji);
break;
end;
end;
FreeAndNil(instrm);
FreeAndNil(outstrm);
application.MessageBox('复制成功','good',mb_ok);
end;
说明:
while 以4096个char为一块读一程序 do
begin
if 4096正数倍then
一块块写入
else
不够4096的把余下的全部写入
结束
为什么是4096呢?
这里只能说方面机算机使用,也可是512 1024 2048 这样的数计算机使用快,内存全部同样
现样你也可以是1 2 3 ....更大的数
还能是
p:array [1..buffsize] of char;
改为:
p:char;
这样会一个字节一个字节的复制
对于大文件来说会慢些而已
posted on 2009-01-23 22:44
小叶子 阅读(1027)
评论(0) 编辑 收藏 引用 所属分类:
delphi流的应用