Главная страница
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.012 c
1-54678
Борис_Ш
2003-04-04 16:01
2003.04.17
Нужен компонент Treview, но не стандартный из Win32


3-54534
GavAl
2003-04-01 09:26
2003.04.17
Как в уже созданой таблице добавить поле программно


3-54427
dimka
2003-04-01 14:40
2003.04.17
Оптимизация файлов БД


1-54603
_User_
2003-04-07 17:12
2003.04.17
Выгрузка приложения


14-54857
kravchuk
2003-04-01 18:26
2003.04.17
compiler magic