The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Binary data in C variable"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Binary data in C variable"
Сообщение от Александр emailИскать по авторуВ закладки(??) on 29-Ноя-04, 12:35  (MSK)
Подскажите, пожалуйста, как хранить некоторые бинарные данные (картинки, музыкальные файлы и проч.) в некоторой (возможно самостоятельно созданной) переменной на языке Си? Задача - иметь возможность хранить эти самые бинарные данные в базе данных Berkeley DB (нужен тип данных, который в SQL обзывается BLOB).

В интернете, книгах, на этом сайте - искал.
Заранее благодарен.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Binary data in C variable"
Сообщение от prot emailИскать по авторуВ закладки(??) on 29-Ноя-04, 16:18  (MSK)
>Задача -
>иметь возможность хранить эти самые бинарные данные в базе данных >Berkeley
>DB (нужен тип данных, который в SQL обзывается BLOB).
>
>В интернете, книгах, на этом сайте - искал.
>Заранее благодарен.

Я сейчас пишу на BCB 5.0 под Win и столкнулся с подобной проблемой. Я решил это следующим образом:
Создаю указател char *VarName и счётчик unsigned int Len. В базе (MySQL) я использую MEDIUMBLOB (кажеться так :) у меня для хранения фото. Этот тип поддерживает до 16M (после корректировке my.cnf) VarName всё равно куда указывать. А Len (32 bit) может держать длину до 4G. Используем системный вызов memcpy(dest *, src *, len) и всё как в сказке :)
Допускаю, что мой способ неидеален. Хотелось бы узнать об алтернативном варианте.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Binary data in C variable"
Сообщение от Александр emailИскать по авторуВ закладки(??) on 29-Ноя-04, 20:05  (MSK)
>Я сейчас пишу на BCB 5.0 под Win и столкнулся с подобной
>проблемой. Я решил это следующим образом:
>Создаю указател char *VarName и счётчик unsigned int Len. В базе (MySQL)
>я использую MEDIUMBLOB (кажеться так :) у меня для хранения фото.
>Этот тип поддерживает до 16M (после корректировке my.cnf) VarName всё равно
>куда указывать. А Len (32 bit) может держать длину до 4G.
>Используем системный вызов memcpy(dest *, src *, len) и всё как
>в сказке :)
>Допускаю, что мой способ неидеален. Хотелось бы узнать об алтернативном варианте.

Спасибо за варинт, но остаётся проблема определения структуры базы данных: насколько я понимаю, Berkeley DB требует чёткого определения структуры, под которую он потом создаёт таблицу, и, как я понимаю, она должна быть вполне чётко определена...

В любом случае - спасибо за совет!

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Binary data in C variable"
Сообщение от dimus emailИскать по авторуВ закладки(??) on 30-Ноя-04, 10:49  (MSK)
Если речь идет о базе данных с фотографиями, фильмами и т.п объектами, которые не надо часто удалять, а в основном хранить, то, в принципе, можно сделать так:

1 - Созаем таблицу "Имена файлов - хранилищ" вида
"Имя файла - хранилища","ИД_ФАЙЛА_ХРАНИЛИЩА".

2 - Создаем другую таблицу - про хранимые файлы
"ИД_ФАЙЛА_ХРАНИЛИЩА","ИД_ХРАНИМОГО_ФАЙЛА","СМЕЩЕНИЕ","РАЗМЕР"

В вашей базе храним имя и ИД сохраняемого файла. Когда нужно - селект
из этих двух таблиц, чтобы определить, в каком файле-хранилище есть наш
файл, его размер и смещение.

Большие бинарные объекты сохраняются непрерывным куском в файл-хранилище,
что очень хорошо скажется на занимаемом дисковом пространстве. А если файловая система поддерживает очень большие файлы, то можно вообще обойтись только одним файлом.
Конечно данный подход не совсем подпадает под тему топика и не очень хорош, если требуется часто удалять или менять файлы, но у него есть большое достоинство - он работает и к тому же очень быстро.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Binary data in C variable"
Сообщение от Александр emailИскать по авторуВ закладки(??) on 30-Ноя-04, 15:42  (MSK)
Спасибо, но только база не SQL, а её использование (вместо файловой системы) в данном случае почти обязательно...
  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Binary data in C variable"
Сообщение от dimus emailИскать по авторуВ закладки(??) on 01-Дек-04, 13:48  (MSK)
Все-таки подумайте над таким вариантом, так как вовсе не обязательно юзать SQL, чтобы работать с подобной структурой базы. Пример: очень многие компьютерные игры пихают все в один файл, откуда потом и берут нужное.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Binary data in C variable"
Сообщение от Александр emailИскать по авторуВ закладки(??) on 01-Дек-04, 14:12  (MSK)
>Все-таки подумайте над таким вариантом, так как вовсе не обязательно юзать SQL,
>чтобы работать с подобной структурой базы. Пример: очень многие компьютерные игры
>пихают все в один файл, откуда потом и берут нужное.

Хорошо, спасибо.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру