DELPHI记录集结构以流的方式文字+图片写入自定义库
文件名:Libdat.dat,这个数据库是自定义的不是标准的
ACCESS之类的,文件内容如下:
//--------------------------------------------------------
Delphi文字和图片以流的方式写入文件中
记录集结构
结构方式写入文件的,但是文件的结构如下:
姓名 年龄 照片
张三 25 张三的照片
李四 20
赵五 22 赵五的照片
意思是有的记录有照片,有的记录没有照片
文件名:Libdat.dat,这个数据库是自定义的不是标准的
ACCESS之类的,文件内容如下:
//--------------------------------------------------------
Delphi文字和图片以流的方式写入文件中
记录集结构
结构方式写入文件的,但是文件的结构如下:
姓名 年龄 照片
张三 25 张三的照片
李四 20
赵五 22 赵五的照片
意思是有的记录有照片,有的记录没有照片
type
TRec=record {定义一个记录}
name:string[10]; //姓名
xb:string[2]; //性别
age:integer; //年龄
yw:integer; //语文
xs:integer; //数学
zz:integer; //政治
end;
//==============================================
这个结构的基本操作:添加\删除\修改\保存\第一条记录\上一条\下一条
最后一条\插入等功能都完成了
//----------------------------------------------
操作方式:非文件流格式,文件格式都测试OK...............
//==============================================
我现在的问题是加上:
zpsize:integer; //图片的大小
zp:Tpicture; //照片
以文件流的方式,不知如何处理了.........................
zp:Tpicture; //照片
//我这样定义行不行呀
TFileHead = record
indexpos:longint;
indexlen:longint;
...
end;定义一个datahead:
TDataHead = record
name:string[8];
age:byte;
picoffset:longint;
picsize:longint;
pictype:string[5];//也可以定义为其他
...
end;定义一个文件句柄,比如fh:intege;//全局变量,可能后面用得着
打开文件:
procedure openmyfile;
begin
fh:=fileopen('文件名',fmopenreadwrite);
end;
定义一个文件头变量,比如ffilehead;//全局变量,可能后面用得着
读文件头:
procedure readfilehead;
begin
FileSeek(fh,0,0);
FileRead(fh,ffilehead,sizeof(TFileHead));
end;写文件头:
procedure writefilehead;
begin
FileSeek(fh,0,0);
Filewrite(fh,ffilehead,sizeof(TFileHead));
end;
装载纪录:
procedure doload;
var i,n,rec:integer;
ms:tmemorystream;
begin
readfilehead;
ms:=tmemorystream.create;
fileseek(0,0);
fileread(fh,ms.Memory^,fh.indexlen);
n:=fh.indexlen div sizeof(longint);//得到纪录条数
ms.seek(0,0);
for i:=0 to n-1 do
begin
ms.read(rec,sizeof(longint));//得到数据头偏移量
readdatahead(rec);//读出数据头
//具体装载过程....
end;
ms.free;
end;
保存纪录:
procedure dosave;
var i,n,rec:integer;
ms:tmemorystream;
begin
//确定总纪录数n:=....
ms:=tmemorystream.create;
for i:=0 to n-1 do
begin
rec:=...//取数据头偏移量,它应该由你自己管理,比如用TREEVIEW的DATA,所以可以读出
ms.write(rec,sizeof(longint));//写数据头偏移量
....
end;
with ffilehead do
begin
indexpos:=filessek(0,2);//文件尾部
indexlen:=ms.size;
end;
filewrite(fh,ms.Memory^,ms.size);//保存
writefilehead;//保存文件头
ms.free;
end;
关闭文件:
procedure closemyfile;
begin
fileclose(fh);
fh:=-1;
end;
定义一个数据头变量,比如fdatahead;//全局变量,可能后面用得着
读数据头:
procedure readdatahead(ofst:Integer); //ofst是指定记录的偏移量
begin
FileSeek(fh,ofst,0);
FileRead(fh,fdatahead,SizeOf(TDataHead));
end;写数据头:
procedure writedatahead(ofst:Integer); //ofst是指定记录的偏移量
begin
FileSeek(fh,ofst,0);
FileWrite(fh,fdatahead,SizeOf(TDataHead));
end;读图片:
procedure readpic(ofst,len:Integer;ms:tmemorystream);
begin
Fileseek(fh,ofst,0);
fileread(fh,ms.Memory^,len);
end;写图片:
procedure writepic(ms: TMemoryStream);
begin
fileseek(fh,0,2);//写到文件尾部
FileWrite(fh,ms.Memory^,ms.size);
end;
iseekcode 请将完整的实例程序发到