public void Read(FileDatabaseStream reader) { Type = (InnerFileType)BinaryPrimitives.ReadUInt32LittleEndian(reader.ReadBytes(4)); var v1 = BinaryPrimitives.ReadUInt32LittleEndian(reader.ReadBytes(4)); var v2 = BinaryPrimitives.ReadUInt32LittleEndian(reader.ReadBytes(4)); var v3 = BinaryPrimitives.ReadUInt32LittleEndian(reader.ReadBytes(4)); Version = $"{v1}.{v2}.{v3}"; DataLength = BinaryPrimitives.ReadUInt64LittleEndian(reader.ReadBytes(8)); var pageNumbers = new List <uint>(); while (true) { var pageNumber = BinaryPrimitives.ReadUInt32LittleEndian(reader.ReadBytes(4)); if (pageNumber == 0) { break; } pageNumbers.Add(pageNumber); } PageNumbers = pageNumbers.ToArray(); }
public void Read(FileDatabaseStream reader) { var signature = Encoding.UTF8.GetString(reader.ReadBytes(8)); if (signature != "1CDBMSV8") { throw new Exception("This file is not a 1C database"); } var versionData = reader.ReadBytes(4); var version = $"{versionData[0]}.{versionData[1]}.{versionData[2]}.{versionData[3]}"; if (version != "8.3.8.0") { throw new Exception($"{version} is unknown version"); } Signature = signature; Version = version; PagesCount = BinaryPrimitives.ReadUInt32LittleEndian(reader.ReadBytes(4)); // skip 4 bytes of unknown value reader.ReadBytes(4); PageSize = BinaryPrimitives.ReadUInt32LittleEndian(reader.ReadBytes(4)); }
public void Read(FileDatabaseStream reader) { var type = BinaryPrimitives.ReadUInt32LittleEndian(reader.ReadBytes(4)); if (!(type is 0x0000FF1C)) { throw new Exception($"{type} is not a type of \"Free pages\" block"); } Type = type; PagesCount = BinaryPrimitives.ReadUInt32LittleEndian(reader.ReadBytes(4)); Version = BinaryPrimitives.ReadInt32LittleEndian(reader.ReadBytes(4)); PageNumbers = new int[PagesCount]; for (int i = 0; i < PagesCount; i++) { var number = BinaryPrimitives.ReadInt32LittleEndian(reader.ReadBytes(4)); if (number == 0) { break; } PageNumbers[i] = number; } }
public DatabaseDescriptionFile(FileDatabaseStream stream) : base(stream, 2) { GoToDataStartingPosition(); SkipFirstBlock(); var ddfHeaderData = ReadBlockChain(); Language = Encoding.UTF8.GetString(ddfHeaderData[..(Array.IndexOf(ddfHeaderData, (byte)0))]);
public InnerFile(FileDatabaseStream stream, uint rootPageNumber) { _stream = stream; _rootPageNumber = rootPageNumber; ReadRootPage(); if (RootPage.Type == InnerFileType.Full) { ReadIndexPages(); IndexPages.ForEach(c => _dataPages.AddRange(c.PageNumbers)); } else { _dataPages.AddRange(RootPage.PageNumbers); } }
public virtual void Read(FileDatabaseStream reader) { DataLength = BinaryPrimitives.ReadUInt64LittleEndian(reader.ReadBytes(8)); var pageNumbers = new List <uint>(); while (true) { var pageNumber = BinaryPrimitives.ReadUInt32LittleEndian(reader.ReadBytes(4)); if (pageNumber == 0) { break; } pageNumbers.Add(pageNumber); } PageNumbers = pageNumbers.ToArray(); }
internal Table(FileDatabaseStream stream, BracketsNode node) { Name = node[0]; for (int i = 2; i < node.Count; i++) { var currentNode = node[i]; string nodeName = currentNode[0]; switch (nodeName) { case "Fields": ReadFields(currentNode); break; case "Indexes": ReadIndexes(currentNode); break; case "Recordlock": RecordLock = currentNode[1]; break; case "Files": DataFilePage = currentNode[1]; UnlimitedLengthDataFilePage = currentNode[2]; IndexFilePage = currentNode[3]; break; default: throw new Exception($"{nodeName} is unknown table description node"); } } Rows = new TableRows(stream, this); }
public UnlimitedLengthDataFile(FileDatabaseStream stream, uint rootPageNumber) : base(stream, rootPageNumber) { }
public DataFile(FileDatabaseStream stream, uint rootPageNumber, int rowSize, bool hasShortVersion) : base(stream, rootPageNumber) { _rowSize = rowSize; _hasShortVersion = hasShortVersion; }
internal TableRows(FileDatabaseStream stream, Table table) { _stream = stream; _table = table; }