Как создать файл-контейнер?
-
09-06-2019 - |
Вопрос
Я хотел бы создать формат файла для своего приложения, такой как Quake, OO и MS Office 07.
По сути, это несжатая папка zip или tar-файл.
Мне нужно, чтобы это было кроссплатформенным (Mac и Windows).
Могу ли я что-то сделать через командную строку и bash?
Решение
Взгляните на открытый исходный код 7Zip формат сжатия.Для ваших конкретных нужд вы можете использовать его в режиме «Архив», без сжатия, но очень быстро.
Он предоставляет мощный SDK LZMA с сайта:
«LZMA — это общий метод сжатия формата 7z по умолчанию в программе 7-Zip.LZMA обеспечивает высокую степень сжатия и очень быструю распаковку, поэтому он очень подходит для встроенных приложений.Например, его можно использовать для сжатия ПЗУ (прошивки).
LZMA SDK предоставляет документацию, примеры, файлы заголовков, библиотеки и инструменты, необходимые для разработки приложений, использующих сжатие LZMA».
Другие советы
Если вам нужен один файл, переносимый на все платформы и содержащий структурированные данные, рассмотрите возможность использования sqlite.Вы получите полнофункциональную базу данных, совместимую с ACID, которая существует на диске в виде одного файла.
Существуют библиотеки, с которыми вы можете связать ссылку для прямого доступа к файлу, а также есть инструмент командной строки, который вы также можете использовать.Независимо от того, какой язык вы используете, скорее всего, он есть.
Zip поддерживается везде.Если контейнер — это все, что вам нужно, то это, безусловно, хороший вариант.
SQLite великолепен.
Один файл, кроссплатформенность, крошечная библиотека, доступ SQL к данным, транзакциям, целая энчилада.
вы можете использовать транзакции, чтобы гарантировать постоянные точки возврата в случае сбоя.проверять использование sqlite, они специально рекомендуют использовать его в качестве уровня модели данных для настольных приложений.
Кроме того, существует инструмент командной строки для ручного доступа к данным.
Первое, что вам следует спросить себя: «Действительно ли мне нужно сделать что-то свое?»
В зависимости от того, для чего вы хотите его использовать, вам, вероятно, лучше использовать общий формат и некоторые готовые библиотеки, которые уже очень хорошо обрабатывают один из этих форматов.
Хорошие места для начала:http://www.destructor.de/libtar/index.htm (tar — формат «контейнера»)http://www.zlib.net/ (zlib — метод сжатия данных до или после помещения их в контейнер)
Если вы все еще думаете, что вам нужно создать свой собственный, я бы посоветовал сначала изучить что-нибудь очень простое, например формат tar:
http://en.wikipedia.org/wiki/Tar_(file_format)илиhttp://schmidt.devlib.org/file-formats/tar-archive-file-format.html
Вместо того, чтобы создавать формат, я бы просто выбрал соглашение.Один или несколько именованных файлов в контейнере содержат метаданные, необходимые для доступа к остальным файлам, и вы знаете, что с ними делать.Однако сам контейнер должен быть в каком-то универсальном формате, например zip.Здесь не нужно изобретать велосипед.