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(); }