Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-54842
Vlad Oshin
2003-04-01 10:55
2003.04.17
Навеяло, понимаешь, с дороги


14-54814
Nikolai_S
2003-03-29 11:59
2003.04.17
Создание ссылки на веб-сайт в справке


1-54662
Furyous
2003-04-03 08:18
2003.04.17
Проблема с эдитами.


14-54867
BJValentine
2003-04-01 11:06
2003.04.17
Delphi 5 & Delphi 7


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский