Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Типизированные файлы..


pathfinder ©   (2007-07-23 10:11:00) 

Доброе утро!
При переводе проекта с Delphi5 на 2006 возникла такая проблема.
Программа хранит данные в типизированном файле. Работа с файлом осуществляется с помощью класса TFileStream. Структуры данных имеют вид:

 TRec = record
   a: Integer;
   b: String[40];
   c: String[40];
   d: TDate;
 end;

При открытии файла созданного программой скомпилированной под д5 в программе скомпилированной под д2006 вместо данных либо пустота, либо кракозябры..

Подскажите пожалуйста, в чем может быть дело?


pathfinder   (2007-07-23 11:32:00) [1]


> 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 байт файлы читаются нормально, что подтверждает результаты приведенных выше измерений:)

Всем спасибо за помощь!


Сергей М.   (2007-07-23 10:58:00) [2]


> совместимости со старыми файлами никак не добиться?


Ну почему же не добиться ?

Для начала приведи сюда фактические размеры записей, созданных тем и другим приложениями ..


Однокамушкин   (2007-07-23 10:58:00) [3]

В Delphi 2006 по умолчанию, если не ошибаюсь, используется выравнивание на 8 байт, а в Delphi 5 - на 4 байта... Попробуйте в Delphi 2006 включить выравнивание на 4 байта директивой компилятора {$ALIGN 4} - по идее, в этом случае структуры будут выравниваться так же, как по умолчанию в Delphi 5...


Anatoly Podgoretsky   (2007-07-23 10:57:00) [4]

Тебе же указали в [2] решение.


pathfinder   (2007-07-23 10:45:00) [5]


> А зачем гадать и полагаться на случай ?
>
> packed-запись - она и в африке будет packed.


Ваша правда:)

К сожалению при создании программы этого не учли..

Теперь значит остается только создавать файл с данными в программе скомпилированной в д2006, совместимости со старыми файлами никак не добиться?(


Сергей М.   (2007-07-23 10:40:00) [6]


> выравнивание размера записи в д5 и д2006 происходит по разному?


А зачем гадать и полагаться на случай ?

packed-запись - она и в африке будет packed.


pathfinder   (2007-07-23 10:33:00) [7]


> В отсутствии
>
> TRec = packed record


Т.е. выравнивание размера записи в д5 и д2006 происходит по разному? Типы данных то вроде не изменились..


MBo   (2007-07-23 10:32:00) [8]

возможно разное выравнивание полей записи
Опция компилятора Record Field Alignment {$A}
Изначальное задание packed record избавило бы от этой проблемы


Сергей М.   (2007-07-23 10:29:00) [9]


> в чем может быть дело?


В отсутствии

TRec = packedrecord


Наверх

Титульная страница Поиск, карта сайта Написать письмо