public MetaDataBase(BinaryReaderCRC32 rdr)
            {
                Type     = rdr.ReadInt32();
                Time     = new DateTime(rdr.ReadInt64());
                Version  = rdr.ReadInt32();
                Major    = rdr.ReadInt32();
                Minor    = rdr.ReadInt32();
                Build    = rdr.ReadInt32();
                Revision = rdr.ReadInt32();
                Count    = rdr.ReadInt32();

                rdr.Stream.Position = 1024;

                IsValid = rdr.ReadCheckResetCRC();

                var version = Assembly.GetCallingAssembly().GetName().Version;

                if (version.Major != Major || version.Minor != Minor || version.Build != Build || version.Revision != Revision)
                {
                    IsCodeEqual = false;
                }
                else
                {
                    IsCodeEqual = true;
                }

                if (IsValid)
                {
                    list = new List <MetaTable>(Count);

                    for (var i = 0; i < Count; ++i)
                    {
                        list.Add(new MetaTable(rdr));
                    }

                    // Конвертируем относительные адреса таблиц записей в абсолютные адреса.
                    for (var i = 0; i < Count; ++i)
                    {
                        list[i].Offset += rdr.Stream.Position;
                    }
                }
            }
            public MetaTable(BinaryReaderCRC32 rdr)
            {
                Count      = rdr.ReadInt32();
                Offset     = rdr.ReadInt32();
                Key        = rdr.ReadString();
                Version    = rdr.ReadInt32();
                RecordSize = rdr.ReadInt32();
                Mode       = (PageFileIOMode)rdr.ReadInt32();
                HasStorage = rdr.ReadBoolean();

                var c = rdr.ReadInt32();

                Fields = new List <MetaField>();

                for (var j = 0; j < c; ++j)
                {
                    Fields.Add(new MetaField(rdr));
                }

                IsValid = rdr.ReadCheckResetCRC();
            }