【发布时间】:2013-02-15 00:04:04
【问题描述】:
我有这样的文件:
file of record
Str: string[250];
RecType: Cardinal;
end;
但在使用此文件一段时间后,我的客户发现,Str 永远不会大于 100 个字符,而且他还需要其他字段。
在新版本中我们有这样的文件:
file of packed record
Str: string[200];
Reserved: array[1..47] of Byte;
NewFiled: Cardinal;
RecType: Cardinal;
end;
这条记录的大小相同,在之前的记录中,Str 和 RecType 之间的记录在对齐到 8 个字节时是一个未使用的字节。
问题:发生了什么,什么时候从旧代码中读取这个新文件?他需要向后兼容。
旧代码阅读示例:
var
FS: TFileStream;
Rec: record
Str: string[250];
RecType: Cardinal;
end;
...
// reading record by record from file:
FS.Read(Rec, SizeOf(Rec));
【问题讨论】:
-
您需要在问题中提供语言标签。不熟悉 Pascal(或 Delphi)的人不知道您在这里问什么,而没有标签的人可能会错过您的问题。
-
你能发布一些读取它的代码吗?
-
在我看来,编写一个以新格式写入一些记录然后尝试使用旧格式读取它们的快速测试应用程序将非常容易;它几乎会立即回答问题,并会为您提供一个测试,您也可以将其用于未来的更改。
-
我有测试,这是可行的,但我很困惑 - 这是可能的,那个 Str 字段可能是乱码?
-
抱歉,如果您发布完全不同的记录大小,问题是关于记录大小的。 :-) 然后答案变成“不,显然这行不通,因为您正在读取和写入完全不同大小的记录。”。不过,感谢您的快速编辑。 :-)
标签: delphi record backwards-compatibility delphi-5