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