Exemplo n.º 1
0
        public override long Seek(long offset, SeekOrigin origin)
        {
            if (!CanSeek)
            {
                throw new NotSupportedException();
            }

            Console.WriteLine("seeking from origin " + origin + " to offset " + offset);

            long newPos = 0;

            switch (origin)
            {
            case SeekOrigin.Begin:
                newPos = offset;
                break;

            case SeekOrigin.Current:
                newPos = Position + offset;
                break;

            case SeekOrigin.End:
                newPos = Length + offset;
                break;
            }

            long streamLengthSum = 0;
            int  streamIndex     = 0;

            while (streamLengthSum + subStreams[streamIndex].Length < newPos)
            {
                streamLengthSum += subStreams[streamIndex].Length;
                streamIndex++;
            }

            if (CurrentSubStreamIndex != streamIndex)
            {
                CurrentSubStreamIndex = streamIndex;
            }
            CurrentSubStream.Seek(newPos - streamLengthSum, SeekOrigin.Begin);

            return(Position);
        }