Главная страница
    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.059 c
9-1158607607
Nic
2006-09-18 23:26
2007.08.19
Разработка GUI


15-1184842707
EGFEFG
2007-07-19 14:58
2007.08.19
Компьютер сам презагружается


15-1185171911
question
2007-07-23 10:25
2007.08.19
програмист для ПО под виндоус из Москвы


2-1184911598
Newser
2007-07-20 10:06
2007.08.19
Как в DateTimePicker-е установить вчерашнее число?


3-1178297884
Oleg_teacher
2007-05-04 20:58
2007.08.19
BatchMove копирование





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский