Beispiel #1
0
            public BlockStreamWriter(FragmentedFile file, long ordinal)
                : this(file)
            {
                _current = _first = new FileBlock(file._blockSize, file._useAlignedIo);
                _file.ReadBlock(ordinal, _current, file._blockSize, BlockFlags.ExternalBlock);

                if ((_current.Flags & BlockFlags.ExternalBlock) != BlockFlags.ExternalBlock)
                {
                    throw new InvalidOperationException();
                }

                if ((_current.Flags & BlockFlags.Temporary) == BlockFlags.Temporary)
                {
                    _isNew          = true;
                    _restore        = null;
                    _current.Flags &= ~BlockFlags.Temporary;
                }
                else
                {
                    _isNew               = false;
                    _restore             = _current.Clone();
                    _current.NextBlockId = 0;
                }

                _current.Length = 0;
            }
Beispiel #2
0
            public BlockStreamReader(FragmentedFile file, long ordinal, BlockFlags typeExpected, bool validated)
            {
                _file      = file;
                _blockPos  = 0;
                _validated = validated;
                _block     = new FileBlock(file._blockSize, file._useAlignedIo);

                _file.ReadBlock(ordinal, _block, file._blockSize, typeExpected, _validated);
                if (_validated)
                {
                    _expectedSum = _block.CheckSum;
                    _checksum    = new Crc32();
                    _checksum.Add(_block.BlockData, _block.DataOffset, _block.Length);
                    if (_block.NextBlockId == 0 && _checksum != _expectedSum)
                    {
                        throw new InvalidDataException();
                    }
                }
            }
Beispiel #3
0
            private bool PrepareRead()
            {
                int remains = _block.Length - _blockPos;

                if (remains <= 0 && _block.NextBlockId != 0)
                {
                    _file.ReadBlock(_block.NextBlockId, _block, _file._blockSize, _validated ? BlockFlags.InternalBlock : 0, _validated);
                    remains   = _block.Length;
                    _blockPos = 0;

                    if (_validated)
                    {
                        _checksum.Add(_block.BlockData, _block.DataOffset, _block.Length);
                        if (_block.NextBlockId == 0 && _checksum != _expectedSum)
                        {
                            throw new InvalidDataException();
                        }
                    }
                }

                return(remains > 0);
            }
            public BlockStreamReader(FragmentedFile file, long ordinal, BlockFlags typeExpected, bool validated)
            {
                _file = file;
                _blockPos = 0;
                _validated = validated;
                _block = new FileBlock(file._blockSize, file._useAlignedIo);

                _file.ReadBlock(ordinal, _block, file._blockSize, typeExpected, _validated);
                if (_validated)
                {
                    _expectedSum = _block.CheckSum;
                    _checksum = new Crc32();
                    _checksum.Add(_block.BlockData, _block.DataOffset, _block.Length);
                    if (_block.NextBlockId == 0 && _checksum != _expectedSum)
                        throw new InvalidDataException();
                }
            }