Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Каким образом лучше хранить разнотипные данные в одном файле? [D7, WinXP]


Страницы:   1 2

BDenis ©   (2004-10-05 22:05:00) 

Каким образом лучше хранить разнотипные данные в одном файле? Т.е. есть численные типы, строковые, картинки. И это все желательно запихнуть (а потом естественно достать оттуда) в один файл, причем размер картинок и строк заранее неизвестен. Подскажите, пожалуйста, как лучше это дело организовать.


Плохиш   (2004-10-06 11:28:00) [1]

BlockWrite(f, str[1], Length(str)) - проверь
F1 - рулез форева


BDenis   (2004-10-06 11:24:00) [2]


> Плохиш ©   (06.10.04 11:18) [22]
Чушь полная! И причём здесь рекорд?
Иди учи теорию.

Специально сейчас перепроверил на практике. В записи поле типа короткая строка. В ней слово из 10 символов. Записываем запись в файл. Файл имеет размер 256 байт.


Плохиш   (2004-10-06 11:18:00) [3]


> BDenis ©   (06.10.04 00:57) [10]
> Тогда файл будет большего размера, чем в нем данных. Ну
> я обьявлю поле типа строка длиной 255 байт. Запишу в это
> поле 10 байт. А потом рекордзапишу в файл, а файл будт
> размером 255 байт. Так?

Чушь полная! И причём здесь рекорд?
Иди учи теорию.


Amoeba   (2004-10-06 11:10:00) [4]

С исходниками SFS можно найти на
http://www2.0zones.com:808/Search_Soft.asp


Amoeba   (2004-10-06 11:07:00) [5]

Есть такая библиотека Single File System - легкий и абсолютно прозрачный доступ к разнотипным данным как к файлам в папке, поддерживается иерархия папок:
http://www.aidaim.com/products/sfs/sfs_spec.php
Она точно поможет (сам использую). IMHO - лучшее решение.
Без исходников бесплатно (единственный минус - NagScreen при запуски приложения вне IDE)


Суслик   (2004-10-06 10:44:00) [6]


> [18] TUser ©   (06.10.04 10:40)
> Кто-то говорил, что есть спец. эмулятор файловой системы
> в виде компонента для Delphi. Не помню точно, как его зовут,
> но может он поможет.

structured storage на это похожи.
istream файл
istorage каталог


TUser   (2004-10-06 10:40:00) [7]

Кто-то говорил, что есть спец. эмулятор файловой системы в виде компонента для Delphi. Не помню точно, как его зовут, но может он поможет.


Erik1   (2004-10-06 10:38:00) [8]

Еще можно все в DBF фаил какатать, просто и надежно. А компонентов прямого доступа на torry.net просто море.


Суслик   (2004-10-06 10:34:00) [9]


> И получится своя БД, со своими ошибками и ограничениями.Чем
> Embedded FireBird или XML файл не угодили.

да все нормально.
это один из вариантов.


den_777   (2004-10-06 10:31:00) [10]


> Прочтя первый байт ты определишь тип, прочтя след. 4 байта
> определишь длину. Зная тип и длину, ты вызываешь определенный
> метод чтения.

И получится своя БД, со своими ошибками и ограничениями.Чем Embedded FireBird или XML файл не угодили.


Суслик   (2004-10-06 10:23:00) [11]


> Хотелось бы хранить все в одном record'e

Мало ли, что тебе хочется :))

Либо гибкость и гимор, либо негибкость и легкость применения. Когда было иначе?

Разрабатываешь свой формат записи и дело в шляпе.

Например можно сделать так:
Считать , что файл состоит из структур следующего формата:
1. 1 байт - ид. типа (строка, число, целое и пр.)
2. 4 байта - длина
3. данные.

Прочтя первый байт ты определишь тип, прочтя след. 4 байта определишь длину. Зная тип и длину, ты вызываешь определенный метод чтения.


BDenis   (2004-10-06 10:15:00) [12]


> den_777   (06.10.04 10:10) [12]

База будет слишком.

Хотелось бы хранить все в одном record'e, чтоб потом разом считать из файла в переменную типа record. Но при этом я не смогу же описать тип записи, если неизвестен размер ее полей...


den_777   (2004-10-06 10:10:00) [13]

База на Embedded FireBird или XML файл. В обоих случаях проблем не будет. Только для FireBird придется с приложением еще несколько файлов таскать.


Jel   (2004-10-06 02:04:00) [14]


> Тогда файл будет большего размера

Смотри [6] - просто и надежно.


BDenis   (2004-10-06 00:57:00) [15]


> Плохиш ©   (06.10.04 00:48) [9]


Тогда файл будет большего размера, чем в нем данных. Ну я обьявлю поле типа строка длиной 255 байт. Запишу в это поле 10 байт. А потом рекорд запишу в файл, а файл будт размером 255 байт. Так?


Плохиш   (2004-10-06 00:48:00) [16]


> BDenis ©   (06.10.04 00:24) [8]

В [6] слова "А нельзя" не читать, далее по тексту.


BDenis   (2004-10-06 00:24:00) [17]


> Поручик   (06.10.04 00:18) [7]

Я же не знаю заранее размеры полей. Как же я обьявлю record без точного размера полей?


Поручик   (2004-10-06 00:18:00) [18]

Пихай все в record, потом blockRead, BlockWrite, как смотри десь:
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1096986327&n=5


pipll   (2004-10-05 23:06:00) [19]

А нельзя BlockRead, BlockWrite. Сначала писать размер, а затем данные.


BDenis   (2004-10-05 22:20:00) [20]


> Jel ©   (05.10.04 22:17) [2]
> База данных не поможет?


Нет, это будет слишком.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо