Re[5]: Как поддерживать старый формат файла?
От: rsdh  
Дата: 22.05.12 11:43
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, 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)
    };
};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.