问一下‘流’和Tlist的问题,谢谢! !

shadows 2003-03-07 09:48:22
比如我写了两个自定义结构
TRec1 = Record
List :Tlist;
end;

TRec2 =Record
Int : Integer;
Str : String;
end;

var
rec TRec2

rec.int := 12; rec.str := 'adsad'
现在我想用结构1(TRec1)中的List的items[0],存储rec,然后再用流的方法,写入一个文件,我对流的方法不熟,请问怎么写入,和读出来?谢谢,分不够再加!
...全文
38 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sysu 2003-03-07
  • 打赏
  • 举报
回复
var rec1: TRec1;

// 写入
procedure TForm1.Button1Click(Sender: TObject);
var
fs: TFileStream;
begin
rec.Int := 12;
rec.Str := 'adsad';
rec1.List := TList.Create;
rec1.List.Add(@rec);
fs := TFileStream.Create('d:\test', fmCreate);
fs.Write(TRec2(rec1.List.Items[0]^).Int, SizeOf(TRec2(rec1.List.Items[0]^).Int));
fs.Write(TRec2(rec1.List.Items[0]^).Str[1], Length(TRec2(rec1.List.Items[0]^).Str));
fs.Free;
end;

// 读取
procedure TForm1.Button2Click(Sender: TObject);
const bufSize = 256;
var
fs: TFileStream;
buf: array [1..bufSize] of Char;
numRead: Integer;
begin
fs := TFileStream.Create('d:\test', fmOpenRead);
fs.Read(rec.Int, SizeOf(rec.Int));
rec.Str := '';
repeat
numRead := fs.read(buf, bufSize);
if numRead > 0 then rec.Str := rec.Str + Copy(buf, 1, numRead);
until numRead <> bufSize;
rec1.List := TList.Create;
rec1.List.Add(@rec);
ShowMessage(TRec2(rec1.List.Items[0]^).Str);
fs.Free;
end;
MyCrooner 2003-03-07
  • 打赏
  • 举报
回复
如果全部存成字符串,倒是很方便.
list := TStringList.Create;
list.add( IntToStr(12));
list.add( 'adsad');
list.add(.....
..
list.saveToFile('文件名');

下次读取:
list := TStringList.Create;
list.LoadFromFile('文件名');
for i:=0 to list.count -1 do
string1 := list[i]; //可以用些变量读取
//可以判断string1的类型,如果需要可以转换成相应的类型.
jy_1201 2003-03-07
  • 打赏
  • 举报
回复
帮你Up
TList有一个Add方法,原形如下:
Function Add(Item:Pointer):Interger;
我想Add时Item可以指向一个对象吧。
这个我也没用过,查查Delphi帮助吧

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧