public override long Seek(long offset, SeekOrigin loc)
{
this.CheckDisposed();
if (offset > MaxStreamLength)
{
throw new ArgumentOutOfRangeException("offset", "offset cannot be larger than " + MaxStreamLength);
}
int newPosition;
switch (loc)
{
case SeekOrigin.Begin:
newPosition = (int)offset;
break;
case SeekOrigin.Current:
newPosition = (int)offset + this.position;
break;
case SeekOrigin.End:
newPosition = (int)offset + this.length;
break;
default:
throw new ArgumentException("Invalid seek origin", "loc");
}
if (newPosition < 0)
{
throw new IOException("Seek before beginning");
}
this.position = newPosition;
return this.position;
}