Сохранение файлов в контейнере - PullRequest
3 голосов
/ 20 августа 2011

Я знаю, что об этом уже спрашивали, но я так и не нашел нужного мне решения.

Я хочу создать контейнер со своим собственным расширением (назовем его .pmap), где я буду хранить такие вещи, как XML-файлы, PNG-файлы и так далее. В основном сказано: почтовый индекс, который не почтовый индекс

Я действительно не хочу хранить данные всех файлов в одном файле и считывать их ... Я просто хочу контейнер. (может быть что-то вроде .rxproj, если вы знаете RPG Maker)

У кого-нибудь есть идеи?

Ответы [ 3 ]

1 голос
/ 21 августа 2011

Если вы хотите создать свой собственный формат контейнера (архив) вместо использования существующего формата, анатомия будет выглядеть примерно так:

+-------------------------------------------------------------------------------+
| Header (checksum, magic number, etc)                                          |
+-------------------------------------------------------------------------------+
| Manifest (list of file metadata like file names and offsets)                  |
+-------------------------------------------------------------------------------+
| File 1 header (usually file size)                                             |
+-------------------------------------------------------------------------------+
| File 1 content                                                                |
+-------------------------------------------------------------------------------+
| ...                                                                           |
+-------------------------------------------------------------------------------+
| File (n) header (usually file size)                                           |
+-------------------------------------------------------------------------------+
| File (n) content                                                              |
+-------------------------------------------------------------------------------+

Если вам не нужно, чтобы ваш формат легко использовался различными платформами, вы можете создать классы, инкапсулирующие контейнер, обеспечить их сериализацию, а затем использовать сериализацию / десериализацию для преобразования контейнера в поток ( одна опция для преобразования объектов в байты).

Если вам нужно добавить сжатие или шифрование, вы должны обернуть этот архив внутри других конвертов (при необходимости добавляя верхние / нижние колонтитулы для указания необходимой информации о сжатии или шифровании).

0 голосов
/ 17 декабря 2013

Немного старый вопрос, но я подумал, что я бы добавил другой вариант для тех, кто спотыкается над этим вопросом, ищет решения (как и я) ...

Может быть, использовать формат файла документа Microsoft Compound? OpenMCDF должен облегчить жизнь.

OpenMCDF - это 100% управляемый компонент .net, который позволяет клиенту приложения для управления файлами структурированного хранилища COM, также известные как Файлы формата документов Microsoft Compound.

0 голосов
/ 21 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...