public override long Seek(long offset, SeekOrigin origin)
{
switch (origin)
{
case SeekOrigin.Begin:
CurrentPosition = (int)offset;
break;
case SeekOrigin.Current:
CurrentPosition += (int)offset;
break;
default:
CurrentPosition = TotalSize - (int)offset;
break;
}
if (CurrentPosition > TotalSize)
{
var max = CurrentPosition >> BlockShift;
for (int i = Blocks.Count; i <= max; i++)
Blocks.Add(new byte[BlockSize]);
TotalSize = CurrentPosition;
}
return CurrentPosition;
}