Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.043 c
15-1184565893
vasIZmax
2007-07-16 10:04
2007.08.19
Проблема с трафиком


3-1177683929
Ёжик
2007-04-27 18:25
2007.08.19
Право на IDENT_CURRENT


2-1185355218
vegarulez
2007-07-25 13:20
2007.08.19
Как обновить TButton внутри TPanel`a?


5-1160128745
Alek_1
2006-10-06 13:59
2007.08.19
idSMTP


11-1166716930
fender
2006-12-21 19:02
2007.08.19
KOL/MCK и обыкновенные VCL компоненты и библиотеки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский