文件结构,以避免重写整个文件

时间:2016-11-03 18:23:37

标签: c#

我正在设计一种自定义二进制文件格式,允许我重写部分文件而不会覆盖整个文件。数据由长度可变的“元素”组成。可以在文件中删除,插入或修改这些元素。这种修改可能会改变元素的长度。

以下是我正在考虑的事项:

  • 该文件有两个主要部分:标题和正文。

  • 身体被分解成预定大小的块,平均可容纳100个元素。在创建元素时,会将它们写入第一个块,并留下足够的空间来容纳它。

  • 当修改元素时,如果块中有足够的空间来包含它,则重写它,否则从块中删除该元素(然后重写该块),然后插入到具有所需的块中空间。
  • 标题包含指向每个块地址的指针及其当前大小。由于此数据是固定宽度,因此我可以更改单个标头条目,而无需重写整个标头。

我的问题: 如果我需要增加标题的大小,我需要重写整个主体以创建额外的标题空间。如果标题是一个单独的文件,我不会有这个问题,但我不喜欢有两个文件的想法。有没有办法让标题和正文保持一个物理文件,但是每个文件都能够独立于另一个进行扩展吗?

1 个答案:

答案 0 :(得分:3)

您的文件格式应支持彼此链接的标头列表。

在标题中,有一个字段“next”,指向文件中下一个标题的位置。如果您需要添加标题,请将其添加到文件末尾,然后将其在文件中的位置写入前一个标题的“下一个”字段。

我的观点:为什么在已经有像SQLite这样的解决方案可以轻松使用的情况下发明新格式?