Форум: "Начинающим";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];
ВнизТипизированные файлы.. Найти похожие ветки
← →
pathfinder © (2007-07-23 10:11) [0]Доброе утро!
При переводе проекта с Delphi5 на 2006 возникла такая проблема.
Программа хранит данные в типизированном файле. Работа с файлом осуществляется с помощью класса TFileStream. Структуры данных имеют вид:
TRec = record
a: Integer;
b: String[40];
c: String[40];
d: TDate;
end;
При открытии файла созданного программой скомпилированной под д5 в программе скомпилированной под д2006 вместо данных либо пустота, либо кракозябры..
Подскажите пожалуйста, в чем может быть дело?
← →
Сергей М. © (2007-07-23 10:29) [1]
> в чем может быть дело?
В отсутствииTRec = packed record
← →
MBo © (2007-07-23 10:32) [2]возможно разное выравнивание полей записи
Опция компилятора Record Field Alignment {$A}
Изначальное задание packed record избавило бы от этой проблемы
← →
pathfinder © (2007-07-23 10:33) [3]
> В отсутствии
>
> TRec = packed record
Т.е. выравнивание размера записи в д5 и д2006 происходит по разному? Типы данных то вроде не изменились..
← →
Сергей М. © (2007-07-23 10:40) [4]
> выравнивание размера записи в д5 и д2006 происходит по разному?
А зачем гадать и полагаться на случай ?
packed-запись - она и в африке будет packed.
← →
pathfinder © (2007-07-23 10:45) [5]
> А зачем гадать и полагаться на случай ?
>
> packed-запись - она и в африке будет packed.
Ваша правда:)
К сожалению при создании программы этого не учли..
Теперь значит остается только создавать файл с данными в программе скомпилированной в д2006, совместимости со старыми файлами никак не добиться?(
← →
Anatoly Podgoretsky © (2007-07-23 10:57) [6]Тебе же указали в [2] решение.
← →
Сергей М. © (2007-07-23 10:58) [7]
> совместимости со старыми файлами никак не добиться?
Ну почему же не добиться ?
Для начала приведи сюда фактические размеры записей, созданных тем и другим приложениями ..
← →
Однокамушкин (2007-07-23 10:58) [8]В Delphi 2006 по умолчанию, если не ошибаюсь, используется выравнивание на 8 байт, а в Delphi 5 - на 4 байта... Попробуйте в Delphi 2006 включить выравнивание на 4 байта директивой компилятора {$ALIGN 4} - по идее, в этом случае структуры будут выравниваться так же, как по умолчанию в Delphi 5...
← →
pathfinder © (2007-07-23 11:32) [9]
> Anatoly Podgoretsky © (23.07.07 10:57) [6]
>
> Тебе же указали в [2] решение.
Да уж..в данном случае я в роли чукчи, который не читатель:)
> Сергей М. © (23.07.07 10:58) [7]
>
> Ну почему же не добиться ?
>
> Для начала приведи сюда фактические размеры записей, созданных
> тем и другим приложениями ..
выравнивание размеры моих структур
0 94, 160
1 94, 160
2 94, 160
4 96, 164
8 96, 168
размеры в д5 - 96, 168
(Структур у меня две, ну и 2 файла соответственно)
> Однокамушкин (23.07.07 10:58) [8]
При выравнивании на 8 байт файлы читаются нормально, что подтверждает результаты приведенных выше измерений:)
Всем спасибо за помощь!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c