我正忙于一个小项目,它有很多数据,如图像文本文件和其他东西,我试图将它们全部打包到一个大文件或多个大文件中,这样程序文件夹看起来就不会凌乱。
但问题是我该如何编辑这些文件。我考虑过文件结构,它会是这样的:
[DWORD] Number of files [DWORD]FileId [STRING]FileName [DWORD]FileSize [DWORD]FileIndex [BYTES]All the files
所以第一部分获取所有文件的列表太快了,FileIndex 是二进制文件中的位置,因此我也可以设置指针(例如 300)并读取文件。
但是如果我想创建一个补丁并对其进行编辑,我将不得不读取我正在编辑的文件之后的所有字节并将它们全部复制回来,这可能需要几个文件才能花费很长时间。
插入所有文件后,二进制文件可能只有几百 MB。
那么其他程序如何做到这一点,例如游戏使用这些大文件并打补丁,是否有某种技巧可以更快地插入额外字节?
最佳答案
在文件中间插入字节没有“技巧”。
通常解决方案涉及将文件添加到文件末尾,然后切换它们在索引中的位置。然后你会遇到必须对文件进行碎片整理的问题。您可以将文件分成大块,这可以减轻一些碎片整理问题,但文件不连续。
如果您正在处理非静态数据,我不建议您这样做,除非您绝对必须这样做。我见过非常出色的软件工程师花费大量时间来编写合理的实现。
使用 sqlite 作为虚拟文件系统可能是一个可行的解决方案。但话说回来,将数据文件放在另一个文件夹中也是如此,这样看起来就不会“乱七八糟”。
关于c# - 编辑大型二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7919748/