将复杂记录写入文件

DrS*_*ani 6 arrays delphi record dynamic sizeof

嗨我已经在我的项目中定义了一些记录,这些记录可能包含其他记录以及普通数据类型和其他记录的动态数组,它是记录类型的n个示例

  Type1=record
    x:integer;
  end;
  Type2=record
    Y:array of X;
    str:string;
  end;
Run Code Online (Sandbox Code Playgroud)

当我尝试将这些记录类型的变量之一保存到具有blockwrite函数的文件时,如下所示:

var
  Temp1:Type2;
  begin
    setlength(temp1.y,100);
    blockwrite(MyFile,Temp1,sizeOf(Temp1);
Run Code Online (Sandbox Code Playgroud)

它写的只是纯记录的大小,但是temp1有一个调整大小的dynmic数组,有人可以告诉我如何将复杂的记录写入文件,我的意思是像VB6中使用的那样.谢谢

Kry*_*gaj 7

您可以使用http://kblib.googlecode.com(适用于任何动态记录,也包含包含其他记录的记录等).在Delphi 2006/2009/XE上测试(它不使用D2010中引入的扩展RTTI).无需手动编写保存/加载代码(只需一行即可保存/加载任何动态类型 - 字符串,记录,动态数组).

在你的例子中,它将是...... 像这样:

TKBDynamic.WriteTo(lStream, lType2, TypeInfo(Type2));
Run Code Online (Sandbox Code Playgroud)

要加载它:

TKBDynamic.ReadFrom(lStream, lType2, TypeInfo(Type2));
Run Code Online (Sandbox Code Playgroud)

如果有人有兴趣如何处理'记录版本',只需发布​​新问题,然后我会写一些例子.

类似的任务: