Beispiel #1
0
        /// <summary>
        /// Writes the SBATs to their backing blocks, and updates
        /// the mini-stream size in the properties. Stream size is
        /// based on full blocks used, not the data within the streams
        /// </summary>
        public void SyncWithDataSource()
        {
            int blocksUsed = 0;

            foreach (BATBlock sbat in _sbat_blocks)
            {
                ByteBuffer block = _filesystem.GetBlockAt(sbat.OurBlockIndex);
                BlockAllocationTableWriter.WriteBlock(sbat, block);
                if (!sbat.HasFreeSectors)
                {
                    blocksUsed += _filesystem.GetBigBlockSizeDetails().GetBATEntriesPerBlock();
                }
                else
                {
                    blocksUsed += sbat.GetUsedSectors(false);
                }
            }
            // Set the size on the root in terms of the number of SBAT blocks
            // RootProperty.setSize does the sbat -> bytes conversion for us
            _filesystem.PropertyTable.Root.Size = (blocksUsed);
        }
        public TestDocumentInputStream()
        {

            int blocks = (_workbook_size + 511) / 512;

            _workbook_data = new byte[512 * blocks];
            Arrays.Fill(_workbook_data, unchecked((byte)-1));
            for (int j = 0; j < _workbook_size; j++)
            {
                _workbook_data[j] = (byte)(j * j);
            }

            // Create the Old POIFS Version
            RawDataBlock[] rawBlocks = new RawDataBlock[blocks];
            MemoryStream stream =
                new MemoryStream(_workbook_data);

            for (int j = 0; j < blocks; j++)
            {
                rawBlocks[j] = new RawDataBlock(stream);
            }
            POIFSDocument document = new POIFSDocument("Workbook", rawBlocks,
                                                       _workbook_size);

            _workbook_o = new DocumentNode(
                document.DocumentProperty,
                new DirectoryNode(
                    new DirectoryProperty("Root Entry"), (POIFSFileSystem)null, null));

            // Now create the NPOIFS Version
            byte[] _workbook_data_only = new byte[_workbook_size];
            Array.Copy(_workbook_data, 0, _workbook_data_only, 0, _workbook_size);

            NPOIFSFileSystem npoifs = new NPOIFSFileSystem();
            // Make it easy when debugging to see what isn't the doc
            byte[] minus1 = new byte[512];
            Arrays.Fill(minus1, unchecked((byte)-1));
            npoifs.GetBlockAt(-1).Write(minus1);
            npoifs.GetBlockAt(0).Write(minus1);
            npoifs.GetBlockAt(1).Write(minus1);

            // Create the NPOIFS document
            _workbook_n = (DocumentNode)npoifs.CreateDocument(
                  new MemoryStream(_workbook_data_only),
                  "Workbook"
            );
        }