Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.19;
Скачать: CL | DM;

Вниз

Типизированные файлы..   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
15-1184897351
Slider007
2007-07-20 06:09
2007.08.19
С днем рождения ! 20 июля 2007 пятница


2-1185551580
winsproot
2007-07-27 19:53
2007.08.19
Как сделать скин для своёй программы????


15-1184881177
Германн
2007-07-20 01:39
2007.08.19
Из СИ в Паскаль


15-1184911344
Котик Б
2007-07-20 10:02
2007.08.19
Тест на мышление 3 :)


1-1180368669
Dmitry_177
2007-05-28 20:11
2007.08.19
Перехват клавиатуры