16,748
社区成员
发帖
与我相关
我的任务
分享
type
a=packed record
a1:integer;
a2:integer;
end;
type
b=packed record
b1:double;
b2:integer;
end;
type
c=packed record
c1:char;
c2:double;
end;
var
af:file of a;
bf:file of b;
cf:file of c;
//处理同一结构体写入同一文件
type
a=packed record
a1:integer;
a2:integer;
end;
type
b=packed record
b1:double;
b2:integer;
end;
type
c=packed record
c1:char;
c2:double;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure WriteData(AStream:TStream;AValue:Pointer;ASize:Integer);
begin
AStream.WriteBuffer(AValue^,ASize);
end;
procedure TForm1.btnWriteAClick(Sender: TObject);
var
i:Integer;
aa:a;
fs:TFileStream;
mode:Word;
begin
mode:=fmCreate;
if FileExists('c:\a.dat') then mode:=fmOpenWrite;
fs:=TFileStream.Create('c:\a.dat',mode);
try
fs.Seek(0,soEnd);
for i:=1 to 9 do
begin
aa.a1:=i;
aa.a2:=i*10+i;
WriteData(fs,@aa,sizeof(aa));
end;
finally
fs.Free;
end;
end;
procedure TForm1.btnReadAClick(Sender: TObject);
var
fs:TFileStream;
aa:a;
i,iC:Integer;
begin
fs:=TFileStream.Create('c:\a.dat',fmOpenRead);
try
iC:=fs.Size div sizeof(aa);
for i:=1 to iC do
begin
fs.ReadBuffer(aa,sizeof(aa));
showmessage(inttostr(aa.a1)+','+inttostr(aa.a2));
end;
finally
fs.Free;
end;
end;
procedure TForm1.btnWriteBClick(Sender: TObject);
var
i:Integer;
bb:b;
fs:TFileStream;
mode:Word;
begin
mode:=fmCreate;
if FileExists('c:\b.dat') then mode:=fmOpenWrite;
fs:=TFileStream.Create('c:\b.dat',mode);
try
fs.Seek(0,soEnd);
for i:=1 to 10 do
begin
bb.b1:=i;
bb.b2:=i*10+i;
WriteData(fs,@bb,sizeof(bb));
end;
finally
fs.Free;
end;
end;