将文件保存在容器中

时间:2011-08-20 14:34:46

标签: c# file containers

我知道之前已经问过,但我还没有找到我需要的解决方案。

我想要的是用我自己的扩展创建一个容器(让我们称之为.pmap),我存储xml文件,png文件等内容。基本上说:拉链,拉链

我真的不想将所有文件的数据存储到一个文件中并将其读出来...我只想要一个容器。 (也许像.rxproj,如果你认识RPG Maker)

任何人的想法?

3 个答案:

答案 0 :(得分:1)

如果您想创建自己的容器格式(存档)而不是使用现有格式,解剖结构将如下所示:

+-------------------------------------------------------------------------------+
| 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                                                              |
+-------------------------------------------------------------------------------+

如果您不关心使您的格式易于被不同平台消费,您可以创建封装容器的类,确保它们可序列化,然后使用序列化/反序列化将容器转换为流({{1}是将对象转换为字节的一个选项。

如果您需要添加压缩或加密,则可以将此存档包装在其他包络内(根据需要添加页眉/页脚以指定有关压缩或加密的所需信息)。

答案 1 :(得分:0)

如果你的意图是抽象的,你不希望第三方轻易访问/知道容器“AND”中的二进制数据,如果你对使用什么共享库有特定的限制那么它是有意义的!否则会坚持别人的意见。

答案 2 :(得分:0)

这是一个古老的问题,但我认为我会为其他任何偶然发现这个问题寻找解决方案的人(例如我自己)提出另一种选择......

也许使用Microsoft Compound Document File Format? OpenMCDF应该让生活更轻松。

  

OpenMCDF是一个100%受管理的.net组件,允许客户端   应用程序来操纵COM结构化存储文件,也称为   Microsoft复合文档格式文件。