Delphi读写二进制文件

http://www.cnblogs.com/hnxxcxg/p/3691742.html

二进制文件(也叫类型文件),二进制文件是由一批同一类型的数据组成的一个数据序列,就是说一个具体的二进制文件只能存放同一种类型的数据。

type

TMember = record

Name : string[10];

eMail : string[20];

Posts : LongInt;

end;

var Members : array[1..50] of TMember;

向磁盘存储信息之前我们需要定义一个二进制类型文件的变量名,下面的代码声明一个名为F的类型文件变量。

var F : file of TMember;

在Delphi中,为了建立一个二进制文件,需要使用这样的语法:var SomeTypedFile : file of SomeType ;

这个文件的基类型(SomeType)可以是标准类型(比如整型),也可以是数组或记录类型,但是不能为长字符串、动态数组、类、对象或者是一个指针。

var F : file of TMember;

i : integer ;

begin

AssignFile(F,'Members.dat');

Rewrite(F);

try

for i:= 1 to 50 do Write (F, Members[ i ]);

finally

CloseFile(F);

end;

end;

为了处理“Members.dat”文件记录的所有数据,必须使用如下形式的代码:

var Member: TMember

F : file of TMember;

begin

AssignFile(F,'Members.dat');

Reset(F);

try

while not Eof(F) do begin Read (F, Member);

{这里可以对论坛成员信息进行相关处理}

end;

finally

CloseFile(F);

end;

end;

二进制文件还可以使用标准的Seek过程实现随机访问,Seek过程可以指定文件当前位置的跳转。利用FilePos函数和FileSize函数可以返回文件的当前位置以及当前文件的大小(就是记录的条数)。

{返回到文件开头也就是第一条记录开始处}

Seek(F, 0);

{直接到第五条记录处}

Seek(F, 5);

{到文件结尾处也就是最后一条记录结束的地方}

Seek(F, FileSize(F));

var

Myrec:TMyrec;

Rec:TPersonRec;

Reccount:integer;

begin

Myrec := TMyrec.Create(Apppath+'History.dat',fmOpenRead or fmShareDenyWrite);

Myrec.first;

Reccount:=Myrec.GetNumRecs;

for i:=1 to Reccount do

begin

Myrec.ReadRec(Rec);

Rec.xxxx;

//Myrec.AppandRec(Rec);

Myrec.nextRec;

end;

end;

var

Myrec:TMyrec;

Rec:TPersonRec;

Reccount:integer;

begin

Myrec := TMyrec.Create(Apppath+'History.dat',fmOpenRead or fmShareDenyWrite);

Myrec.first;

Reccount:=Myrec.GetNumRecs;

for i:=1 to Reccount do

begin

Myrec.ReadRec(Rec);

Rec.xxxx;

//Myrec.AppandRec(Rec);

Myrec.nextRec;

end;

end;