コード例 #1
0
        public IEnumerable<PartitionedFileStream> GetStreams()
        {
            _fileStream.Seek(0, SeekOrigin.Begin);
            var header = new PartitionedFileHeader(0);
            header.Read(_fileStream);

            var currentIndex = PartitionedFileHeader.DataOffset;
            var dataStart = currentIndex;
            var allOffsets = new List<long>();
            while (currentIndex + sizeof(long) < dataStart + header.LengthOfCurrentBuffer)
            {
                var partitionedFileStreamOffset = Serializer.DeserializeLong(_fileStream);
                allOffsets.Add(partitionedFileStreamOffset);
            }

            var allStreams = new List<PartitionedFileStream>();
            foreach (var offset in allOffsets)
            {
                header = new PartitionedFileHeader(offset);
                _fileStream.Seek(offset, SeekOrigin.Begin);
                header.Read(_fileStream);

                allStreams.Add(new PartitionedFileStream(_fileStream, header, AddNewHeaderSection));
            }

            return allStreams;
        }
コード例 #2
0
        private void MoveToPreviousHeader()
        {
            if (_header.OffsetOfPrevHeader == null)
                throw new InvalidOperationException("Already at the beginning of the Stream");

            var oldPosition = _fileStream.Position;
            _fileStream.Seek(_header.OffsetOfPrevHeader.Value, SeekOrigin.Begin);
            _header = new PartitionedFileHeader(_header.OffsetOfPrevHeader.Value);
            _header.Read(_fileStream);
            _fileStream.Seek(oldPosition, SeekOrigin.Begin);
        }
コード例 #3
0
        private void MoveToNextHeader()
        {
            var oldPosition = _fileStream.Position;
            if (_header.OffsetOfNextHeader == null)
            {
                var nextHeader = _getNewHeader();
                _header.OffsetOfNextHeader = nextHeader.OffsetOfHeader;
                _fileStream.Seek(_header.OffsetOfHeader, SeekOrigin.Begin);
                _header.Write(_fileStream);

                nextHeader.OffsetOfPrevHeader = _header.OffsetOfHeader;
                _fileStream.Seek(nextHeader.OffsetOfHeader, SeekOrigin.Begin);
                nextHeader.Write(_fileStream);

                _header = nextHeader;
            }
            else
            {
                _fileStream.Seek(_header.OffsetOfNextHeader.Value, SeekOrigin.Begin);
                _header = new PartitionedFileHeader(_header.OffsetOfNextHeader.Value);
                _header.Read(_fileStream);
            }
            _fileStream.Seek(oldPosition, SeekOrigin.Begin);
        }