Пример #1
0
        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();
        }
Пример #2
0
        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))]);
Пример #5
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);
            }
        }
Пример #6
0
        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();
        }
Пример #7
0
        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)
 {
 }
Пример #9
0
 public DataFile(FileDatabaseStream stream, uint rootPageNumber, int rowSize, bool hasShortVersion) : base(stream, rootPageNumber)
 {
     _rowSize         = rowSize;
     _hasShortVersion = hasShortVersion;
 }
Пример #10
0
 internal TableRows(FileDatabaseStream stream, Table table)
 {
     _stream = stream;
     _table  = table;
 }