Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, enji, Вы писали:
E>>Если в файле просто лежат массивы структур — можно описать содержимое структуры:
К>В составе структуры может быть поле с версией этой структуры. Так, например, некоторые WinAPI поступают (TAPI, RichText...).
К>Иногда версию структуры можно определить по её размеру, т.е. поле cbSize служит для этих целей.
Примерно так и сделал — в файле есть "главный" заголовок, который не должен меняться в будущих версиях, в нем информация о версии формата файла.
namespace Tool
{
namespace FileFormat
{
#pragma pack(push, 1)
struct MainHeader
{
BYTE bSignature[8]; // File signature
UINT64 nProgramVersion; // Program version file was created
UINT64 nMinProgVersion; // Minimum program version that can read file
UINT64 nFormatVersion; // Version of file format
UINT64 nNextOffset; // Infile absolute byte offset, where placed...
UINT64 nSecondDup; // Infile absolute byte offset, where placed second copy of this structure
// by default - last sizeof(MainHeader) bytes of a file
UINT64 nReserved1; // Reserved
UINT64 nReserved2; // Reserved
UINT64 nMagic; // Salt
UINT64 nSelfCRC; // CRC64 of this structure except this field
};
#pragma pack(pop)
};
};