示例#1
0
        public ODBFSImpl(IBlockStore blockStore)
        {
            if (blockStore == null)
            {
                throw new ArgumentNullException("blockStore");
            }
            _blockStore = blockStore;

            var xBuff = new byte[blockStore.BlockSize];
            blockStore.Retrieve(0, new ArraySegment<byte>(xBuff));

            if (ByteConverter.ReadUInt32(xBuff, 0) != ODBFSMagic)
            {
                throw new Exception("Blockstore doesn't contain an ODBFS system!");
            }

            _virtualBlockSize = ByteConverter.ReadUInt32(xBuff, 4);
            if (_virtualBlockSize % blockStore.BlockSize != 0)
            {
                throw new Exception("Corrupt data!");
            }
            _rawBlocksPerVirtualBlock = _virtualBlockSize / blockStore.BlockSize;
            _metaGroupItemsPerVirtualBlock = (_virtualBlockSize - 32) / 32;
            LoadConfiguration();
        }