用流存入和读出文件中的内容问题(自定义数据库文件的内容存取问题)(50分)

  • 主题发起人 主题发起人 ml.guo
  • 开始时间 开始时间
M

ml.guo

Unregistered / Unconfirmed
GUEST, unregistred user!
我要将文件大小、文件名及路径保存到自定义文件中, 用文件流和内存流
操作,然后从该文件中读出来,我试了,但知如何将内容读出来,所以无法判断写进去是否
正确,请高手指教:
//定义一个类型
type
tfilehead=record
size:integer;
filename:string;
path:string;
end;
//读入内容并生成文件,能生成文件;
procedure TForm1.bitbtn1.onclick( Sender:TObject);
VAR target:tmemorystream;
filehead:tfilehead;
begin
filehead.size:=20000;
filehead.filename:='filename.exe';
filehead.path:='c:/';
try
target:=tmemorystream.create;
target.write(filehead.size,sizeof(filehead.size));
target.write(filehead.filename,sizeof(filehead.filename));
target.write(filehead.path,sizeof(filehead.path));
target.savetofile('c:/a.dat');
finally
target.free;
end;
end;

//读出来:
procedure TForm1.bitbtn2.onclick( Sender:TObject);
var source:tfilestream;
begin
try
source:=tfilestream.create('c:/a.dat',fmOpenRead);
Edit1.text:=source.read(。。。
// 不知如何下手,请指教,将filehead.size、filehead.filename、filehead.path
//分别显示在edit1,edit2,edit3中。
.........
finally
source.free;
end;
end;
 
两个不定长STRING,恼火。
可以有两种办法,一就是将结构定义为定长的字符数组;另外将所有FILEHEAD读出来,
然后判断#0即NULL 的位置,分段赋值给EDIT2、EIDT3等。
 
读入无类型文件用stream是不错,但象你这样的存储结构数据的文件,我看还是不要用流了,
定交一个文件类:
tf:file of tfilehead不就什么都解决了[:D]
 
刘李子说的对,这样的记录类型需要用定长的字符数组代替String型,
定义如下类型
TFilehead=record
Size:integer;
Filename:array[0..100] of char;
Path:array[0..100] of char;
end;
这样每一个文件记录类型变量的大小就是定长的,便于处理。
 
后退
顶部