A=Array of Record x:integer; y:integer; S:String; end; 大家还有什么思路没有? 楼上大哥的i:=FileSize(F);是否要改为I:=SizeOf(F);?
我打错了; i:=FileSize(F);是否要改为I:=SizeOf(aRecord);?
var reclength,wrotennum:integer; buffer:array of char;for i:=1 to n do begin with a[n] do begin RecLength:=sizeof(x)+sizeof(y)+length(s); write(f,x); write(f,y); setlength(buffer,length(s)); strpcopy(buffer,s); blockwrite(f,buffer,length(s),wrotennum); end; end;
var reclength,wrotennum:integer; buffer:array of char;for i:=1 to n do begin with a[n] do begin RecLength:=sizeof(x)+sizeof(y)+length(s); write(f,RecLength); //漏写一句,读出时先读此integer,然后按长度读出这条记录 write(f,x); write(f,y); setlength(buffer,length(s)); strpcopy(buffer,s); blockwrite(f,buffer,length(s),wrotennum); end; end;
改你的记录数组为一个记录,给你一个例子吧
type
A=Record //定长度为100项
x:integer;
y:integer;
S:String[20]; //定长度为20个字符
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
var
F:File of A;
aRecord,bRecord:A;
i:integer;
begin
AssignFile(F,'D:\1');
if FileExists('D:\1') then
Reset(F)
else
Rewrite(F);
i:=FileSize(F);
Seek(F,i);
aRecord.x:=1;
aRecord.y:=2;
aRecord.S:='Love';
Write(F,aRecord);
Seek(F,i);
Read(F,bRecord);
ShowMessage(bRecord.S);
CloseFile(F);
end;
x:integer;
y:integer;
S:String;
end;
大家还有什么思路没有?
楼上大哥的i:=FileSize(F);是否要改为I:=SizeOf(F);?
i:=FileSize(F);是否要改为I:=SizeOf(aRecord);?
reclength,wrotennum:integer;
buffer:array of char;for i:=1 to n do
begin
with a[n] do
begin
RecLength:=sizeof(x)+sizeof(y)+length(s);
write(f,x);
write(f,y);
setlength(buffer,length(s));
strpcopy(buffer,s);
blockwrite(f,buffer,length(s),wrotennum);
end;
end;
reclength,wrotennum:integer;
buffer:array of char;for i:=1 to n do
begin
with a[n] do
begin
RecLength:=sizeof(x)+sizeof(y)+length(s);
write(f,RecLength); //漏写一句,读出时先读此integer,然后按长度读出这条记录
write(f,x);
write(f,y);
setlength(buffer,length(s));
strpcopy(buffer,s);
blockwrite(f,buffer,length(s),wrotennum);
end;
end;
我现在是用TFileStream做,s定义为string[20],写操作时先在文件头写一个Count,代表数组元素个数,然后一个记录一个记录的写。读操作时,先读出Count,再根据Count设置数组长度,然后再一个一个记录的读出来。