Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.17;
Скачать: CL | DM;

Вниз

Файлы со смешанными данными   Найти похожие ветки 

 
oleg_SYS ©   (2003-04-02 22:57) [0]

Подскажите пожайлуста, как в Дельфяке создавать файлы со смешанными данными? Чтобы в одном файле можно было хранить произвольное количество различных типов (к примеру, TPicture, TString, Integer и т.д.)?


 
MBo ©   (2003-04-02 23:04) [1]

Можно писать в Stream (TFileStream, и TMemoryStream как вспомогательный), записывая перед данными идентификатор типа и размер данных


 
Fast   (2003-04-03 05:17) [2]

Хороший пример подобных файлов это игровые архивы, в подавляющем большинстве это файл состоящий из двух частей. Это таблица размещения в файле (зовут ее FAT) и сам блок данных. В таком случае читать и искать в файле легко, вот только писать немного проблемно.
Для примера: первые четыре байта в файле отведи под int - количество записей в файле. Далее пишешь фат, ну допустим пихаешь такие структуры заголовков:
Record
Offset:integer; //смещение до первого байта элемента
Legth:integer; //длинна в байтах этого элемента
IdType:byte; //тип его
Name:string[100]; //а это его имя для тебя

//нельзя записывать просто string обязательно надо его
//финализировать

а когда записал фат уже начинаешь подряд кидать свои данные в файл.
Соответвенно чтение делается просто -
1. прочитал int - это количество записей.
2. потом читаешь структуру заголовка (а лучше читаешь все заголовки сразу и где-нить в памяти их складываешь)
3. теперь у тебя есть все чтобы прочитать сами данные элемента (откуда читать, сколько байт, в какой тип, ну и твоя пометка что это такое)

Тут главная проблема что с самого начала создания файла придется рассчитать длину фата. И добавление новых данных крайне неудобно осуществлять.


 
oleg_SYS ©   (2003-04-03 17:34) [3]

Да уж... Сейчас поищу инфу о Stream`е.
А вот насчёт игровх архивов, то это не совсем удобно. Намного прикольней тогда использывать компонент RAR-архивов и туда всё бросать. Но мне нуже всё-равно какой-то прикольный способ:)


 
muxec ©   (2003-04-05 15:07) [4]

Сделай file of byte и пиши в него по очереди всё с начала. Для каждого типа используй приведение к типу byte. Можно также использовать ReadBlock, и WriteBlock для записи массивов.


 
Delirium ©   (2003-04-05 15:59) [5]

http://delphibase.endimus.com/?action=viewfunc&topic=vclstream&id=10391


 
Dimonich ©   (2003-04-05 16:01) [6]

var
a:variant;


 
Delirium ©   (2003-04-05 16:53) [7]

Не та ссылка :)
http://delphibase.endimus.com/?action=viewfunc&topic=vclstream&id=10368


 
Gigabyte ©   (2003-04-06 09:46) [8]

Используй Структурированные хранилища Windows:
ActiveX.pas -> StgCreateDocFile(StgOpenStorage)...



Страницы: 1 вся ветка

Текущий архив: 2003.04.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
14-54819
vic_vm
2003-03-28 15:04
2003.04.17
Поисковые сервера


7-54903
ed
2003-02-23 12:46
2003.04.17
Смена используемого по умолчанию принтера


7-54924
Colt
2003-02-25 09:14
2003.04.17
Рисование текста на экране


14-54890
sashas
2003-04-02 12:45
2003.04.17
Компоненты...


7-54934
Fider
2003-02-23 21:41
2003.04.17
Вопрос по AT командам модему