随笔 - 110  文章 - 28 评论 - 26 

留言簿(1)

随笔分类(103)

随笔档案(110)

文章分类(25)

文章档案(28)

新闻档案(3)

友情连接

  • 小蜜蜂
  • 马氏膏药网
  • 淋巴结肿大,淋巴结核,淋巴结炎 乳腺增生,小叶增生 颈椎病,腰椎病,腰间盘突出 马氏淋巴消炎贴,马氏增生散结贴,马氏关节肌肉贴
  • 黑客基地
  • 全球最大的黑客门户网站

最新随笔

积分与排名

  • 积分 - 146194
  • 排名 - 44

最新评论

阅读排行榜

评论排行榜

在上面两个中我们都是把一个文件做为整体进行复制

这一节我们要把文件分成块来一块块复制

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流的应用
只有注册用户登录后才能发表评论。

笔记和文章,可能抄袭,只为学习,请原谅