Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
3-54519
Эдуард
2003-03-31 19:34
2003.04.17
Создание просмотра VIEW


3-54511
caesar
2003-03-31 16:37
2003.04.17
Delphi и Fox


3-54479
Gonzalez
2003-03-30 10:58
2003.04.17
Many-to-many


7-54918
IceMan_T
2003-02-19 15:07
2003.04.17
использование ASPI


1-54566
spogi
2003-04-07 01:08
2003.04.17
Обычный, текстовой фал... (*.txt)




   Наверх