【问题标题】:How do I create a container file?如何创建容器文件?
【发布时间】:2010-09-09 21:33:21
【问题描述】:

我想为我的应用程序创建一个文件格式,例如 Quake、OO 和 MS Office 07。

基本上是一个未压缩的 zip 文件夹或 tar 文件。

我需要它是跨平台的(mac 和 windows)。

我可以通过命令提示符和 bash 做点什么吗?

【问题讨论】:

    标签: windows macos file-format container-file


    【解决方案1】:

    如果您想要一个可移植到所有平台并包含结构化数据的单个文件,请考虑使用 sqlite。您将获得一个功能齐全的符合 ACID 的数据库,该数据库作为单个文件存在于磁盘上。

    您可以链接一些库以直接访问该文件,并且您还可以使用一个命令行工具。无论您使用什么语言,很可能都有对它的支持。

    http://www.sqlite.org

    【讨论】:

    • 我们可以创建自己的文件容器来编码数据吗?
    • @babygame0ver:是的,你可以。 Python 是一种通用编程语言,因此您可以以任何您想要的格式将字节保存到磁盘。
    • 所以我已经以 wb 等二进制格式写入数据,但是该文件 utf-8 的编码标准是什么?
    【解决方案2】:

    看看开源的7Zip 压缩格式。根据您的特定需求,您可以在“存档”模式下使用它,零压缩但速度非常快。

    它提供了一个强大的 SDK,LZMA,来自该站点:

    "LZMA是7-Zip程序中7z格式的默认且通用的压缩方式。LZMA提供了很高的压缩比和非常快的解压速度,因此非常适合嵌入式应用。例如,它可以用于ROM(固件)压缩。

    LZMA SDK 提供开发使用 LZMA 压缩的应用程序所需的文档、示例、头文件、库和工具。”

    【讨论】:

      【解决方案3】:

      Zip 在任何地方都受支持。如果您只需要一个容器,那么这些肯定是不错的选择。

      【讨论】:

      • 我非常同意这个答案。以 Java 的 jars 为例:它们实际上是 ZIP 文件,这非常方便。 Red Hat 的 RPM 是 cpio 文件。在这两种情况下,它都可以从命令行打开,这意味着它更容易理解和排除故障。
      • Gzip 不是容器格式;它是一种压缩格式,只能压缩单个文件或数据流。
      【解决方案4】:

      SQLite 很棒。

      单个文件、跨平台、小型库、对数据的 SQL 访问、事务、整个 enchilada。

      您可以使用事务来保证在崩溃的情况下一致的返回点。检查uses for sqlite,他们特别提倡将其用作桌面应用程序的数据模型层。

      此外,还有一个命令行工具可以手动访问数据。

      【讨论】:

        【解决方案5】:

        你应该问自己的第一件事是,“我真的需要自己做吗?”

        根据您的用途,您最好使用通用格式和一些已经很好地处理其中一种格式的预制库。

        开始的好地方: 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

        【讨论】:

          【解决方案6】:

          我没有制定格式,而是决定约定。容器中的一个或多个命名文件具有访问其余文件所需的元数据,并且知道如何处理它们。但是,容器本身应该只是一些普遍存在的格式,例如 zip。在这里,无需重新发明轮子。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-04-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-01-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多