您好 我在我的项目中定义了一些记录,这些记录可能包含其他记录以及普通数据类型和其他记录的动态数组, 它是记录类型的一个例子
Type1=record
x:integer;
end;
Type2=record
Y:array of X;
str:string;
end;
当我尝试将这些记录类型的一个变量保存到具有blockwrite函数的文件时,如下所示:
var
Temp1:Type2;
begin
setlength(temp1.y,100);
blockwrite(MyFile,Temp1,sizeOf(Temp1);
它只写了纯记录的大小,但是temp1有一个调整大小的dynmic数组, 有人可以告诉我如何将复杂的记录写入文件,我的意思是像VB6中使用的那样。 感谢
答案 0 :(得分:7)
您可以使用https://github.com/KrystianBigaj/kblib(适用于任何动态记录,也包含包含其他记录的记录等)。在Delphi 2006/2009 / XE上测试(它不使用D2010中引入的扩展RTTI)。无需手动编写保存/加载代码(只需一行即可保存/加载任何动态类型 - 字符串,记录,动态数组)。
在你的例子中,它将是......像这样:
TKBDynamic.WriteTo(lStream, lType2, TypeInfo(Type2));
要加载它:
TKBDynamic.ReadFrom(lStream, lType2, TypeInfo(Type2));
如果有人对如何处理'记录版本'感兴趣,只需发布新版本然后我会写一些例子。
类似的任务:
答案 1 :(得分:0)
这不起作用。您需要手动编写(流式)代码来编写每个字段。
查看类中已发布的字段/属性,因为与变体数组一起,这曾是使用通用代码传输数据的唯一方法。
然而,自D2010以来,RTTI已经扩展,但我还不知道具体细节。