Beispiel #1
0
        /// <inheritdoc/>
        public override long Seek(long offset, SeekOrigin origin)
        {
            switch (origin)
            {
            case SeekOrigin.Begin:
                InternalStream.Seek(startPosition + offset, SeekOrigin.Begin);
                break;

            case SeekOrigin.Current:
                InternalStream.Seek(offset, SeekOrigin.Current);
                break;

            case SeekOrigin.End:
                // Maybe we don't know the actual file size (full file)
                if (endPosition == -1)
                {
                    InternalStream.Seek(offset, SeekOrigin.End);
                }
                else
                {
                    InternalStream.Seek(endPosition - startPosition + offset, SeekOrigin.Begin);
                }
                break;
            }

            var newPosition = InternalStream.Position;

            if (newPosition < startPosition || (endPosition != -1 && newPosition > endPosition))
            {
                InternalStream.Position = startPosition;
                throw new InvalidOperationException("Seek position is out of bound.");
            }

            return(newPosition);
        }
Beispiel #2
0
        public override long Seek(long offset, SeekOrigin origin)
        {
            switch (origin)
            {
            case SeekOrigin.Begin: return(InternalStream.Seek(offset + DataOffset, SeekOrigin.Begin));

            case SeekOrigin.Current: return(InternalStream.Seek(offset, SeekOrigin.Current));

            case SeekOrigin.End: return(InternalStream.Seek(DataOffset + DataLength - offset, SeekOrigin.Begin));

            default: throw new InvalidOperationException();
            }
        }
 public override long Seek(long offset, SeekOrigin origin)
 {
     return(InternalStream.Seek(offset, origin));
 }