![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброго времени суток!
у меня возник такой вопрос - как представлена информация в типизированных файлах? поясню: Программа создает файл согласно описанной структуре: Код:
Type typeRaiting = 0..10; typeCover = record Pic : array [0..RAZMER_BYTE] of Byte; Size : Integer; end; typeFilms=record Name, Country, Genre, Producer, FilmCompany : String[60]; Description : String[255]; BoxOffice, Year : Integer; PersonalRating : typeRaiting; Cover : typeCover; FileLocation : String[255]; end; typeFilms - это и есть структура одной записи файла. Создание, редактирование, сохранение, чтение файла - это все работает отлично, захотелось узнать, а как же представлена информация в самом файле? В каком порядке данные попадают в файл, чем разграничены записи и т.п.? Объясните пожалуйста ![]() Или укажите ЧТО мозно почитать по поводу этого? |
#2
|
|||
|
|||
![]() Данные записываются в бинарном виде.
Ограниченны размером структуры, т.е. никакого ограничения, в принципе, нет. |
#3
|
|||
|
|||
![]() Цитата:
Т.е. если размер первой записи равен 60 символов, то в файл сохраняется 60 байт потом следующая, следующая и так далее пока полностью не записана все данные, потом переходим к следующей записи ... Если одна запись равна 1000 байт, то что бы обратится к 7 - программа начинает считывать с 7000-го байта? |
#4
|
||||
|
||||
![]() С небольшим уточнением, если не указано packed в записи, и в ней имеются данные разных величин (Byte, Word, DWORD), они будут выравнены в максимальную сторону.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#5
|
|||
|
|||
![]() Цитата:
Не совсем понял, если не сложно по подробнее! Пожалуйста! |
#6
|
|||
|
|||
![]() Цитата:
Цитата:
Имеется ввиду, что реальный размер Record`а может быть больше, чем сумма размеров его частей, если не указано packed. Архитектура x86 позволяет считывать данные с любого адреса, но вообще говоря, адреса переменных(и полей записи) типа word должны быть чётными, адреса переменных типа DWord и Single должны делиться на четыре, адреса переменных типа Int64 и Double должны делиться на восемь. И компилятор может вставлять в запись дополнительные безымянные поля для выполнения этого. |
#7
|
|||
|
|||
![]() Цитата:
Огромное спасибо, очень развернуто и понятно! Всем остальным так же СПАСИБО! |