【发布时间】:2011-06-13 13:56:43
【问题描述】:
我目前正在开发一款模拟操作系统的游戏。因此我需要一个游戏内文件系统。目前,我正在使用 zziplib 能够从 zip 存档中加载文件,但是这是一个只读的“文件系统”,我需要一种方法来编写新文件并在之后对其进行序列化(并在下次执行期间对其进行反序列化)!是否有任何有用的库可供使用,或者我应该根据任何库为自己编写一个?
【问题讨论】:
标签: c++ filesystems zip virtualfilesystem
我目前正在开发一款模拟操作系统的游戏。因此我需要一个游戏内文件系统。目前,我正在使用 zziplib 能够从 zip 存档中加载文件,但是这是一个只读的“文件系统”,我需要一种方法来编写新文件并在之后对其进行序列化(并在下次执行期间对其进行反序列化)!是否有任何有用的库可供使用,或者我应该根据任何库为自己编写一个?
【问题讨论】:
标签: c++ filesystems zip virtualfilesystem
这可能是使用简单数据库作为文件系统的地方之一。
使用sqlite 之类的东西来存储数据(路径作为键,blob 作为数据,或类似的东西)。
这样做的好处之一是您实际上不必担心存储问题,并且您可以使用现有的数据库工具“离线”查看/编辑数据,而不必自己编写。 (此外,您还可以在其中存储其他游戏信息。)
【讨论】:
您可以查看PicoStorage 和Embedded File System in C++。我也没有直接使用过,但我都看过它们。 Embedded File System 确实有一个依赖项,它可能是一个阻碍——它需要链接 Qt。也许可以删除它,但它主要将它用于 QString 和 QFile(并且没有理由需要 UI)。
9 年后更新:如评论所述,上述链接不再有效。 PicoStorage 的这个替代链接可能是可行的(我可以从那里下载源代码,但我没有努力验证它)但我找不到 EFS 的现代等效项。
【讨论】:
我的六便士在上面的答案之上。 SolFS(现为 CBFS Storage)和CodebaseFS 提供虚拟文件系统功能;两者都有一个用于 C/C++ 的 API,并且似乎完全符合您的要求。不过……我还不清楚你的任务规模。您的游戏是否需要管理数十、数百、zounds ……的文件?这些文件的大小是多少?等等。在寻找合适的解决方案之前,我会提出这些问题。
【讨论】: