public override long Seek(long offset, SeekOrigin origin)
{
long pos;
switch (origin)
{
case SeekOrigin.Begin:
pos = stream.Seek(offset + start, origin);
break;
case SeekOrigin.End:
pos = stream.Seek(offset - start - length, origin);
break;
default: // case SeekOrigin.Current:
pos = stream.Seek(offset, origin);
break;
}
if (pos < start || pos >= start + length)
throw new IOException("Attempted to seek past the boundaries");
return pos;
}