过去,我看到过这项工作,但我从来没有真正理解它应该如何完成。
假设我们有一个已知数据类型但长度未知的文件,比如一个动态数组TSomething
,其中
type
TSomething = class
Name: String;
Var1: Integer;
Var2: boolean;
end;
但是,问题是这种对象类型将来可能会扩展,添加更多变量(例如Var3: String
)。
然后,使用旧版本保存的文件将不包含最新的变量。
文件读取过程应该以某种方式识别块中的数据,其算法如下:
procedure Read(Path: String)
begin
// Read Array Size
// Read TSomething --> where does this record end? May not contain Var3!
// --> how to know that the next data block I read is not a new object?
end;
我已经看到与BlockRead
and一起工作BlockWrite
,并且我假设每个对象可能应该在将其自身写入文件之前写入其大小,但我希望有一个示例(不一定是代码),以了解我正在朝着正确的方向思考。
我发现的相关阅读材料:
SO - Delphi 2010:如何将整个记录保存到文件中?
Delphi Basics - BlockRead
SO - 将对象的动态数组读/写到文件 - Delphi
SO - 如何在 Delphi 中将动态数组保存到 FileStream?