Форум: "Основная";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];
ВнизФайлы со смешанными данными Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c