请问怎样把一个数组的内容通过“流”或者其他方法写到文件中,又能方便的读出来?(100分)

T

TanXin

Unregistered / Unconfirmed
GUEST, unregistred user!
我把一些系统设置定在一个数组中,为了保存我把他写在文件中,用以下:
var
setvar:array[0..46] of integer;
。。。
Source:TFileStream;
try
Source:=TFileStream.Create(FileName,fmOpenWrite or fmShareExclusive);
source.WriteBuffer(setvar,46*sizeof(integer));
Source.Free;
但是运行老出错,请哪位兄台指教一下,多谢
 
procedure TForm1.Button1Click(Sender: TObject);
var
stream: TStream;
setvar:array[0..46] of integer;
i:integer;
begin
for i:=0 to 46 do
setvar:=i;
stream := TFileStream.Create('f:/temp/temp.dat', fmCreate);
stream.WriteBuffer(setvar,47*sizeof(integer));
stream.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
stream: TStream;
setvar:array[0..46] of integer;
begin
stream := TFileStream.Create('f:/temp/temp.dat', fmopenread);
stream.readBuffer(setvar,47*sizeof(integer));
stream.Free;
end;
 
0..46是47个,还有简单的方法:
source.WriteBuffer(setvar,sizeof(setvar));
就可以了,不用管他有几个元素
 
TO savenight:
如果是多个数组,难道要保留多个文件吗?
例:
...
TYPE

hqchk=record
name:string;
path:string;
fieldname:string;
end;
hqck_arr=array of hqchk;
ipchk=record
name:string;
address:string;
end;
ipck_arr=array of ipchk;
............
VAR
hqck:hqck_arr;
ipck:ipck_arr;
.....

procedure TForm1.FormCreate(Sender: TObject);
BEGIN
...
setlength(hqck,3);
for i:=0 to 2 do
begin
hqck.name:='sss'; //对每个I而可不同
hqck.path:='string';
hqck.fieldname:='dfd';
end;
//同样初试化数组:IPCK
END;

//运行时动态改变数组HQCK,IPCK的直

//退出时保留数组HQCK,IPCK的直到文件TT。DAT中
//下次运行时再读出。
问题:按照你的方法,难道每个数组要分别保留一个文件吗?
 
可以不用流,用直接文件读写
fname:='c:/autosave.dat';//指定文件名
ifilehandle:=filecreate(fname);//产生文件

if (iFilehandle=-1) then
begin
showmessage(fname+' Autosaved failed');
exit;//错误,退出
end;


//保存
filewrite(ifilehandle,Hqck,sizeof(hqck));//
filewrite(ifilehandle,Ipck,sizeof(Ipck));//
fileclose(ifilehandle);//关闭文件
//读文件时先用fileopen打开文件,再用fileRead,不过,你必须知道Hqck跟Ipck的大小
//才能正确读出来,或者你也可以在保存时多加一句保存动态数组的大小,在读数据时先
//读出大小,然后设定动态数组的大小,再读数组,不过,我没有试过,但我用Blob时用动
//态数组总是读不到正确的数据,所以我觉得还是用固定数组吧,反正现在的机器内存都比较
//大,没什么关系


 
数组就是一段连续内存,就把整个数组当成一个来buffer处理就可以了
楼上已经有例子了,不用再举了吧.
 
顶部