如果这个问题有明显的答案,请原谅我;我还没有找到它,因为我不完全确定我在找什么。这很可能重复了我没有找到的问题;对不起。
我有一个使用文本、音频、视频、图标和各种不同文件类型的 C 可执行文件。这些文件存储在本地;文件夹结构又大又深,需要与应用程序一起安装才能正常运行(并不是说我预计它会被分发,我希望打包我自己的工作以方便使用)。
在我看来,如果文件库存储在应用程序仍然可以访问的单个文件中会更方便,例如与 /usr/bin/APPLICATION
一起或在最合适的位置;在需要时由可执行文件访问。
我搜索了类似的问题并找到了指示两个可能选项的建议 Resource Files 似乎是 Windows 原生的, Including files at compile 强>。第一个问题的答案类似于第二个问题,但没有回答与 linux 可执行文件的资源文件是否存在相关的问题。它(与第二个一样)着眼于在编译过程中包含数据文件。这不是很有用,好像我只想更新我的资源我被迫重新编译整个应用程序(媒体是动态添加的)。
问题:有没有一种方法可以将多种文件类型存储在一个文件中,以供 Linux 中的可执行文件访问?如果可以,您将如何实现?
我最初的想法是创建一个 .zip
或 .gz
文件,它也可能提供压缩作为额外的好处,但我不知道如何(或者如果甚至有可能)即时访问此类文件中的数据。我同样不确定是否有特定的文件类型或库提供了更合适的解决方案。此外,我对 .dat
文件几乎一无所知,这些文件可以在 linux 系统的上下文中使用吗?
最佳答案
我完全不明白您为什么要使用单个文件。考虑到文件提取的复杂性(以及出现错误的可能性增加)和相关的开销,我看不出它会如何“更方便”。
I have a C executable that uses text, audio, video, icons and a variety of different file types.
许多其他 Linux 应用程序也是如此。使用包管理时,通常的方法是将应用程序 /usr/bin/YOURAPP
的体系结构独立数据(图标、音频、视频等)放在 /usr/share 中/YOURAPP/
,以及 /usr/lib/YOURAPP
中依赖于体系结构的数据(如辅助二进制文件)。后两者是完整的目录树是非常常见的,有时非常深和宽。
对于本地编译的东西,通常将它们放在 /usr/local/bin/YOURAPP
、/usr/local/share/YOURAPP/
和 /usr/local/share/YOURAPP/
,只是为了避免混淆包管理器。 (如果您检查 ./configure
脚本或阅读 Makefile
,这是它们支持的 PREFIX
变量的主要目的。)
/usr/bin/YOURAPP
也很常见是一个简单的 shell 脚本,设置环境变量,或检查用户特定的覆盖(来自 $HOME/.YOURAPP/
), 以 exec/usr/lib/YOURAPP/YOURAPP.bin [parameters...]
结尾,它用实际的二进制可执行文件替换 shell,而不会将 shell 留在内存中.
例如,我机器上的 /usr/share/octave/
总共包含 138 个目录(在最多 7 个目录的层次结构中)和 1463 个文件;全部讲述了大约 10 兆字节的“内容”。 LibreOffice、Eagle、Fritzing 和 KiCAD 每个都占用数百兆字节,因此 Octave 在任何方面都不是一个极端的例子。
关于C - 将一大组文件存储为单个资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32150529/