Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с бинарным файлом  (Прочитано 7549 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ODA
Гость
« : 13-08-2008 09:40 » 

Хотелось бы найти пример организации и работы с бинарным файлом.
Т. е. что-то типа "кустарной" мини-базы данных в которую помещаются разнородные записи
а затем удаляются либо редактируются.

Первый вопрос - организация.
Сначала - заголовок, он видимо разбит на части:
1. строка с какой-то информацией типа "My Lamer's DB v 1.0.0"
2. 8 байт для long int - это будет счётчик количества записей
3. 8 байт для long int - это будет счётчик уникального значения идентификатора последней записи,
т.е. что-то типа автоинкремента, считали, добавили 1 получили id для новой записи.
(не уверен нужен ли пункт 2, но видимо для удобства можно оставить, т.к. счётчик из пункта 3 будет всегда только увеличиваться и после удаления хотя бы одной записи не будет соответствовать кол-ву записей, а перераспределять все значения идентификаторов всех записей при каждом удалении, мне кажется не совсем оптимально?)
Ну а после заголовка(там кстати можно ещё первый пункт убрать, а можно ещё несколько добавить?)
будут идти сами записи, что-то типа:
1. 4 байта для int - это общая длина записи
2. 8 байт для long int - это идентификатор записи
3. 4 байта для int - это длина первого текстового поля
4. кол-во байт из пункта 3 - это само текстовое поле т.е. данные
-//-
(пункты 3 и 4 повторяются необходимое число раз)

Второй вопрос - реализация.
Во-первых чего лучше использовать?
1. fopen()+fread()+fwrite()+fseek()...
2. fstream + << + >> или fstream.read()+fstream.write()
3. функции WinAPI
4. какие-то есть готовые уже наработки конечно же, хотя хотелось бы самому...

коротко о себе: сам то я полный ламер в C++ опыта почти нет никакого серьёзного, толком ничего ещё не делал стоящего, но очень хочется Улыбаюсь

Прошу всех, кто сталкивался или имеет представление... в общем указать путь истинный...
« Последнее редактирование: 13-08-2008 17:57 от Алексей1153++ » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 13-08-2008 12:02 » 

Лучше использовать open/read/write/lseek или аналогичные для Win32 API. Если будет более одного пользователя БД, то потоковые функции будут вносить искажения из-за буферизации.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
ODA
Гость
« Ответ #2 : 14-08-2008 03:07 » new

Спасибо. Попробую. Мне в принципе подойдёт, т.к. под Linux/Unix пока портировать не требуется, а может и никогда не потребуется  Улыбаюсь, а доступ, конечно же хотелось бы многопользовательский реализовать.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines