我正在用本机和托管 C++ 为 4GB+ 的大型存档文件(见下文)编写一个编辑器。
为了访问文件,我像任何理智的人一样使用文件映射(见下文)。这对于读取数据非常有用,但是在实际编辑存档时会出现问题。文件映射不允许在访问文件时调整文件大小,所以我不知道当用户想要在文件中插入新数据时我应该如何进行(这将超过文件的原始大小,当它被映射时。)
我应该每次都重新映射整个事情吗?那肯定会很慢。但是,我希望通过独占文件访问来保持编辑器的实时性,因为这大大简化了编程,并且不会让文件在被修改时被其他应用程序搞砸。我不想在编辑器上花费永恒的时间;它只是我正在从事的实际项目的一个简单的开发工具。
所以我想听听你们是如何处理类似情况的,还有哪些其他存档软件,尤其是其他游戏可以解决这个问题?
澄清:
这不是文本文件,我正在编写特定的二进制存档文件格式。我的意思是在目录中包含许多其他文件的大文件。出于多种原因,自定义存档文件在游戏使用中非常常见。对于我的格式,我的目标是与Valve Software 的 GCF 格式类似(但更简单)的结构- 我本来会使用 GCF 格式,但不幸的是,尽管有很多很棒的实现,但该格式没有编辑器用于阅读它们,例如HLLib。
访问文件必须快速,因为它旨在存储游戏资源。所以它不是数据库。数据库文件将包含在其中,以及 GFX、SFX 等文件。
这里所说的“文件映射”是 Windows 平台上的一种特定技术,它允许通过创建部分文件的“视图”来直接访问大文件,请参见此处:http: //msdn.microsoft.com/en-us /library/aa366556(VS.85).aspx - 这种技术允许最小的延迟和内存使用,并且是访问任何大文件的明智之举。所以这并不意味着将整个 4GB 文件读入内存,恰恰相反。