私はバイナリファイル形式で作業しています。説明するのがかなり難しいので、これをできるだけ簡単にしようとします。
ファイルに書き込まれるデータ構造には、「ポインター」 (つまり、ファイル内の別の場所にある文字列へのポインター、またはファイル内の別の構造体へのポインター) が含まれる場合があります。「ポインター」のより適切な言葉は次のとおりです。 'offset'、つまり、構造体にはファイル内の文字列の OFFSET が含まれています)。
簡単な例:
struct ExampleStruct {
public string Text;
public int Number;
};
「テキスト」文字列メンバーはファイルの先頭に書き込まれ、シリアル化された構造体には含まれません。
したがって、基本的に、構造体はファイル内で次のようになります。
struct ExampleStruct {
public uint TextLocationOffset;
public int Number;
};
...'TextLocationOffset' は、文字列 'Text' がファイル内にある場所へのオフセットです。
したがって、それを取得した後、「再配置テーブル」が必要になります。これは、基本的に、ファイル内のデータポインターを指すダブルポインターのリストです。(それは理にかなっていますか?)
したがって、その ExampleStruct を自分のファイルに書き込んでいて、そこに「ポインタ」(TextLocationOffset) が含まれているため、「再配置テーブル」は次のようになります。
public uint TextLocationOffset_LocationOffset;
...'TextLocationOffset_LocationOffset' には、ファイル内の 'TextLocationOffset' の OFFSET が含まれています。
それはすべて意味がありますか?できるだけ単純化しようとしました。
私の問題は、C# のすべてのポインター/ダブル ポインター/再配置をどのように追跡するかということです。私が持っている byte[] 配列には常にデータが追加されているため、オフセットは常に変化します。
これは C++ では簡単です。なぜなら、「再配置」されているものの二重ポインターを取得でき、元の「ポインター」(私の例では「TextLocationOffset」) を正しいオフセットに変更できるからです。 「TextLocationOffset」値の場所を再配置テーブルに追加します。
意味がない場合は申し訳ありません。私は数週間前にこれを尋ねようとしましたが、返事がありませんでした.混乱させているように聞こえるかもしれません.
コードでこれらすべてを追跡する方法が必要なだけです...ヒントはありますか?
PS より完全な例が必要な場合は、喜んで提供させていただきます。:)