【发布时间】:2015-11-16 00:01:46
【问题描述】:
如果这个问题有明显的答案,请原谅我;我还没有找到它,因为我不完全确定我在寻找什么。这很可能重复了一个我没有找到的问题;对不起。
我有一个使用文本、音频、视频、图标和各种不同文件类型的 C 可执行文件。这些文件存储在本地;文件夹结构又大又深,需要与应用程序一起安装才能正常运行(并不是说我预计它会分发,我希望打包自己的工作以方便起见)。
在我个人看来,如果文件库存储在一个可供应用程序访问的单个文件中,例如在/usr/bin/APPLICATION 旁边或在最合适的位置,会更方便;需要时由可执行文件访问。
我搜索了类似的问题并找到了表明两个可能选项的建议 Resource Files 似乎是 Windows 的原生选项和 Including files at compile。第一个问题导致与第二个问题相似的答案,并且没有回答与 linux 可执行文件的资源文件存在相关的问题。它(与第二个一样)着眼于在编译过程中包含数据文件。这不像我只想更新我的资源那样有用,我不得不重新编译整个应用程序(媒体是动态添加的)。
问题:有没有办法将各种文件类型存储在一个可供 linux 中的可执行文件访问的文件中,如果可以,您将如何实现?
我最初对此的想法是创建一个.zip 或.gz 文件,这也可能提供压缩作为额外的好处,但我不知道如何(或者甚至可能)访问此类文件中的数据在飞行中。我同样不确定是否有特定的文件类型或库可以提供更合适的解决方案。此外,我对.dat 文件几乎一无所知,这些文件可以在 linux 系统上的这种情况下使用吗?
【问题讨论】:
-
.dat文件可以代表任何东西;我不知道标准的.dat文件格式。.zip听起来是个不错的选择(java 将它用于罐子);查看libzip。 -
显然 Zip 可以轻松地仅提取您想要的文件,但不能提取 tar/gz。见gamedev.stackexchange.com/questions/37648/…
-
您可以将所有文件名存储在一个由程序解析的文本文件中(每种文件类型都有部分,或者每种文件类型可能有一个文本文件)。然后,您不需要继续重新编译源代码,您可能会在其中对资源文件名进行硬编码。 “资源文件”是一个通常与编译相关的术语,例如定义图标、光标和对话框,而不是要处理的数据。
-
许多程序使用“zip”格式,使用不同的文件扩展名来假装它不是 zip。 Office 2007 和更新版本使用 .docx、.xlsx 等,它们实际上都是 .zip 文件。 Java 使用的 .jar 实际上也是一个 .zip 文件,甚至像 Quake 3(顺便说一句,它是开源的)这样的一些游戏也使用 .pak ,它是另一个伪装的 .zip 文件。我只能假设那里有一个库,它使得使用 zip 存储静态内容非常容易使用。
-
在 Mac OS X 上,
.app程序实际上是以指定方式布局的目录和文件结构,并被标记为像程序一样对待...甚至没有 .zip 压缩成单个文件。