处理文件中的数据引用/指针

Handling data references/pointers in a file?

本文关键字:引用 指针 数据 文件 处理      更新时间:2023-10-16

我正在使用二进制文件格式。我会尽量让它变得简单,因为它很难解释。

写入文件的数据结构可能包含"指针"(即指向文件中其他位置的字符串的指针,或指向文件中另一个结构的指针)。"指针"的更好词是"偏移",即。结构包含文件中字符串的偏移量)。

举个简单的例子:

struct ExampleStruct {
    public string Text;
    public int Number;
};

"Text"字符串成员将写入文件的开头,并且不包含在序列化结构中。

因此,从本质上讲,结构在文件中将如下所示:

struct ExampleStruct {
    public uint TextLocationOffset;
    public int Number;
};

...'TextLocationOffset' 是字符串 'Text' 在文件中的位置的偏移量。

因此,在我有了它之后,我需要一个"重定位表" - 本质上是一个指向文件中数据指针的双指针列表。(这有意义吗?

因此,由于我将 ExampleStruct 写入我的文件,并且它包含一个"指针"(TextLocationOffset),因此我的"重定位表"将包含:

public uint TextLocationOffset_LocationOffset;

...'TextLocationOffset_LocationOffset' 包含文件中 'TextLocationOffset' 的 OFFSET 。

这一切都有意义吗?我试图尽可能地简化它。

我的问题是,我将如何跟踪 C# 中的所有指针/双指针/重定位?数据不断被添加到我拥有的 byte[] 数组中,因此偏移量将不断变化。

这在C++中很容易,因为我可以获得正在"重新定位"的任何内容的双指针,然后我可以将原始"指针"(在我的示例中为"文本位置偏移")更改为正确的偏移量,然后我可以找到"文本位置偏移"值的位置并将其添加到我的重新定位表中。

对不起,如果这没有意义。几周前我尝试问这个问题,但没有得到答复,我可能会让它听起来令人困惑。

我只需要一种方法来跟踪我的代码中的所有这些......有什么提示吗?

附言如果您需要更详尽的示例,我很乐意提供。:)

使用数据库表 - 所有这些工作都已完成。

您可能需要查看序列化和反序列化数据的其他方法。跟踪托管应用程序中的重新定位和偏移是不必要的,除非您有极其特殊的方案。如果您让我们更多地了解您在功能方面要实现的目标,因此用户可以更好地指导您。