虚拟文件系统

6
大多数游戏都将其资源(模型、纹理等)打包到特殊文件中(例如 Quake 3 中的 .pk3 文件)。显然,这些文件以某种方式被“挂载”,并被用作独立文件系统一样使用。
我想知道这是如何实现的。到目前为止,我能想到的唯一策略是在文件头中放置偏移大小信息,然后内存映射该文件,并像访问独立的写保护内存块一样访问资源。
我想知道我的策略是否可行,是否有更好的替代方案。
谢谢!

1
我认为你在寻找类似于BoxedApp的东西。 - MastAvalons
3个回答

3

你的策略非常合理; 实际上,它与文件系统驱动程序对原始块设备的处理方式一模一样。你在实施中遇到了什么问题?


目前我没有遇到任何明显的问题,只是想确保自己在正确的方向上前进。 - user500944

3
您的做法听起来很合理。基本上,您将拥有一个带有(可选)元数据的ISAM文件。您可以根据标准(内容类型、使用频率、使用地点等)将文件分成多个部分(“目录”),并为每个部分单独创建索引/目录。如果允许将某个部分作为内容类型,则可以嵌套它们并以一致的方式处理它们。
如果您的要求相当基本,可以考虑简单地使用zip/tar文件作为容器。无论如何,查看这些代码可能都是一个很好的起点。

3
我无法确定Quake3的确切格式,但有几种方法可以达到您的需求:
  1. 存档文件(ZIP、Tar等)
  2. 不同类型的复合存储。在Windows上有Microsoft Structured Storage
  3. 嵌入式单文件数据库
  4. 虚拟文件系统,它实现了一个实际的文件系统,但不是存储在磁盘分区上,而是存储在其他地方(资源、内存等)。
每种方法都有其优点和缺点
我们的SolFS产品是上述虚拟文件系统的一个示例。它是为类似于您的任务而设计的。
存档和一些复合文件实现通常具有线性顺序结构-文件按顺序写入,其中某个目录位于文件开头或结尾。
一些复合文件实现、数据库和虚拟文件系统具有基于页面的结构(“页面”类似于FAT或NTFS中的扇区或簇),其中文件可以分散在存储器中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接