Filesystems 虚拟文件系统

Filesystems 虚拟文件系统,filesystems,memory-mapped-files,Filesystems,Memory Mapped Files,大多数游戏都会将其资源(模型、纹理等)打包到特殊文件中(例如,Quake 3中的.pk3文件)。显然,这些文件以某种方式被“挂载”,并被当作独立的文件系统使用 我想知道这是如何实现的。到目前为止,我提出的唯一策略是将偏移量大小信息放在文件头中,然后内存映射文件并访问资源,就像它们是独立的写保护内存块一样 我想知道我的策略是否可行,是否有更好的选择 谢谢 你的策略很合理;事实上,它完全类似于文件系统驱动程序对原始块设备所做的操作。您在实施过程中遇到了哪些问题 你的方法听起来很合理。基本上,您将拥有

大多数游戏都会将其资源(模型、纹理等)打包到特殊文件中(例如,Quake 3中的.pk3文件)。显然,这些文件以某种方式被“挂载”,并被当作独立的文件系统使用

我想知道这是如何实现的。到目前为止,我提出的唯一策略是将偏移量大小信息放在文件头中,然后内存映射文件并访问资源,就像它们是独立的写保护内存块一样

我想知道我的策略是否可行,是否有更好的选择


谢谢

你的策略很合理;事实上,它完全类似于文件系统驱动程序对原始块设备所做的操作。您在实施过程中遇到了哪些问题

你的方法听起来很合理。基本上,您将拥有一个包含(可选)元数据的ISAM文件。您可以根据标准(内容类型、使用频率、使用位置等)将文件拆分为多个部分(“目录”),并为每个部分提供单独的索引/目录。如果允许将节作为内容类型,则可以嵌套它们并以一致的方式处理它们


如果您的需求是相当基本的,您可以考虑简单地使用zip/TAR文件作为容器。无论如何,查看这些代码可能是一个很好的开始。

我不能说地震3的确切格式,但有几种方法可以满足您的需要:

  • 归档文件(ZIP、Tar等)
  • 不同种类的复合贮藏。在Windows上有Microsoft结构化存储
  • 嵌入式单文件数据库
  • 虚拟文件系统,它实现了一个实际的文件系统,但不是存储在磁盘分区上,而是存储在其他地方(在资源、内存等中) 每种方法都有自己的特点

    我们的产品就是上面提到的虚拟文件系统的一个例子。它是为类似于您的任务而设计的

    归档文件和一些复合文件实现通常具有线性顺序结构——文件是一个接一个地写入的,在文件的开头或结尾有一些目录


    一些复合文件实现、数据库和虚拟文件系统具有基于页面的结构(“页面”类似于FAT或NTFS中的扇区或群集),其中文件可以分散在存储中

    我现在没有任何明显的问题,只是想确定我的方向是正确的。我想你搜索类似的boxedapp。@MastAvalons+1谢谢!它帮助了我。