У меня есть такой файл:Обновление для файлов записей и обратной совместимости
file of record
Str: string[250];
RecType: Cardinal;
end;
, но через некоторое время с помощью этого файла мой клиент нашел, что ул никогда не будет больше, чем 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));
Вам необходимо указать языковые теги на свои вопросы. Люди, которые не знакомы с Паскалем (или Дельфи), понятия не имеют, о чем вы просите здесь, и люди, которые могут пропустить ваш вопрос без тегов. –
Можете ли вы опубликовать часть кода, который ее читает? – placeybordeaux
Мне кажется, было бы очень легко написать приложение для быстрого тестирования, которое записывает некоторые записи в новом формате, а затем пытается прочитать их, используя старый формат; он сразу ответил бы на вопрос и дал бы вам тест, который вы могли бы использовать для будущих изменений. –