).buf.Memory^,TestType(ListTest.Items).buf.Size);
3.在保存到文件时先将ListTest.Count保存后,再写ListTest其它数据,读出来时只要一个For循环即可
保存:
ms := TMemoryStream.Create;
ms.writebuffer(ListTest.count, sizeof(ListTest.count);//增加这句,保存列表数
for i:=0 to ListTest.Count -1 do
begin
...
end;
打开时:
ms.LoadFromFile(filename);
ms.ReadBuffer(Cnt, Sizeof(ListTest.count)); //将列表数读取到变量Cnt中,使用Sizeof(ListTest.count))是为了和保存时的一致
for i := 0 to Cnt-1 do
begin
...//读列表数据
end;
按你原来的方式也是可以的,我只是觉得不太好,
4.释放列表时,一定要注意释放数据,否则会有内存泄漏
while ListTest.count > 0 do
begin
TestType(ListTest.Items[0]).buf.Free; //释放Tmemorystream对象
Dispose(ListTest.Items[0]); //释放TestType结构
ListTest.Delete(0);
end;
ListTest.Free;
5.Sizeof()参数改成相关变量更好些,这样你一但要更改数据类型时,可以不改Sizeof()参数代码
ms.readBuffer(blk.cf ,sizeof(blk.cf)); //Word改成blk.cf
ms.readBuffer(blk.size ,sizeof(blk.size));//Cardinal改成blk.size