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; }
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(); } } }
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(); } }