Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Создание своего формата и хранение данных в нем - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Объявление переменной в цикле http://www.cyberforum.ru/cpp-beginners/thread1225089.html
for (int i=0; i!=5; ++i) { int tmp; std::cout << &tmp << std::endl; } Будет ли переменная tmp объявляться при каждой итерации или компилятор оптимизирует такое объявление? Одинаковый...
C++ Сортировка по спирали Прошу только проверить на корректность написанный код. Условие: Из матрицы А сформировать матрицу В, отсортировав по возрастанию все элементы матрицы А и располагая их в матрице В по спирали,... http://www.cyberforum.ru/cpp-beginners/thread1225001.html
C++ Обработка исключений (Exception)
Всем приветю У меня возникла такая ситуация: в main создаю локальную переменную типа long, затем прошу пользователя задать эту переменную и потом эту переменную передаю в объект с помощью set...
C++ Найти счёт при оптимальной стратегии двух игроков
взялся тут решать задачку с олимпиады, и честно говоря уже час потратил за зря...Никак не могу продумать сам алгоритм игры игроков... Игроки совершают ходы по очереди. На каждом ходу игрок...
C++ Печать из консоли на принтер http://www.cyberforum.ru/cpp-beginners/thread1224975.html
Здравствуйте столкнулся с такой проблемой как печать с консольного окна результата программы. Хотел сделать следующее сам код программы напечатать допустим на одной стороне листа, а то что в итоге...
C++ Записать в третий файл через один содержимое первого файла и второго Даны 2 файла содержащие числа , записать в 3 файл через один содержимое первого файла и второго файла и сумму первого и второго подробнее

Показать сообщение отдельно
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
09.07.2014, 18:36
Файл - это просто набор байтов. Так что достаточно просто подумать: какая информация будет храниться в файле и в каком виде её представить так, чтобы не возникало неоднозначностей при чтении. Затем можно подумать над улучшениями. Например, как сделать так, чтобы оглавление читалось быстро и можно было без лишнего поиска переходить к интересующему фрагменту. Или чтобы в файл было легко вносить изменения.

Например, в приведённом случае можно хранить в начале файла оглавление (названия картинок и описания). В самое начало можно добавить число - количество картинок. Затем для каждой картинки идёт размер файла картинки, строка с названием и строка описания. Хранить строки можно по-разному: выделять под них фиксированное количество байтов, указывать длину или размещать нулевой символ в конце строк. После оглавления - бинарные данные. Для того, чтобы легко переходить к любой картинке, в оглавление можно добавить ещё и смещение каждого файла. Получим, например, такую структуру элемента оглавления:
C++
1
2
3
4
5
6
struct PictureEntry {
    uint32_t size;
    uint32_t offset;
    char fileName[128];
    char description[256];
};
uint32_t из <cstdint> имеет жёстко заданный размер в 4 байта, чем лучше не очень чётко определённого int или long.
В начало файла пишем число N - количество картинок. Тоже с типом uint32_t. Затем размещаем N экземпляров такой структуры. Затем пишем подряд бинарные данные картинок.
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru