Главная страница
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.027 c
2-1184836311
yury1
2007-07-19 13:11
2007.08.19
Многопоточный запуск


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


2-1185122153
Elerond
2007-07-22 20:35
2007.08.19
программа в трее


1-1180541090
DevilDevil
2007-05-30 20:04
2007.08.19
ShowModal и MessageBox


15-1185259056
jack128_
2007-07-24 10:37
2007.08.19
Демки