示例#1
0
        public override long Seek(long offset, SeekOrigin origin)
        {
            switch (origin)
            {
            case SeekOrigin.Begin:
                this.Position = offset;
                break;

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

            case SeekOrigin.End:
                this.Position = this.Length + offset;
                break;

            default:
                throw new ArgumentException("Unexpected value of " + origin.GetType().Name + ".", "origin");
            }

            return(this.Position);
        }
示例#2
0
        /// <summary>
        /// Sets the position within the current stream.
        /// </summary>
        /// <returns>
        /// The new position within the current stream.
        /// </returns>
        /// <param name="offset">A byte offset relative to the <paramref name="origin"/> parameter. </param>
        /// <param name="origin">A value of type <see cref="T:System.IO.SeekOrigin"/> indicating the reference point used to obtain the new position. </param>
        /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
        /// <exception cref="T:System.NotSupportedException">The stream does not support seeking, such as if the stream is constructed from a pipe or console output. </exception>
        /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exception>
        public override long Seek(long offset, SeekOrigin origin)
        {
            if (isDisposed)
            {
                throw new ObjectDisposedException(GetType().FullName);
            }
            switch (origin)
            {
            case SeekOrigin.Begin:
                if (offset < 0 || offset >= trackDataLength)
                {
                    throw new EndOfStreamException();
                }
                trackDataPosition = (int)offset;
                break;

            case SeekOrigin.Current:
                var newPosition = trackDataPosition + offset;
                if (newPosition < 0 || newPosition >= trackDataLength)
                {
                    throw new EndOfStreamException();
                }
                trackDataPosition = (int)newPosition;
                break;

            case SeekOrigin.End:
                newPosition = trackDataLength + offset;
                if (newPosition < 0 || newPosition >= trackDataLength)
                {
                    throw new EndOfStreamException();
                }
                trackDataPosition = (int)newPosition;
                break;

            default:
                throw new InvalidEnumArgumentException("origin", (int)origin, origin.GetType());
            }
            return(trackDataPosition);
        }
示例#3
0
 /// <summary>
 /// Sets the position within the current stream.
 /// </summary>
 /// <returns>
 /// The new position within the current stream.
 /// </returns>
 /// <param name="offset">A byte offset relative to the <paramref name="origin"/> parameter. </param>
 /// <param name="origin">A value of type <see cref="T:System.IO.SeekOrigin"/> indicating the reference point used to obtain the new position. </param>
 /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 /// <exception cref="T:System.NotSupportedException">The stream does not support seeking, such as if the stream is constructed from a pipe or console output. </exception>
 /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exception>
 public override long Seek(long offset, SeekOrigin origin)
 {
     if (isDisposed) throw new ObjectDisposedException(GetType().FullName);
     switch (origin)
     {
         case SeekOrigin.Begin:
             if (offset < 0 || offset>= trackDataLength) throw new EndOfStreamException();
             trackDataPosition = (int) offset;
             break;
         case SeekOrigin.Current:
             var newPosition = trackDataPosition + offset;
             if (newPosition < 0 || newPosition >= trackDataLength) throw new EndOfStreamException();
             trackDataPosition = (int) newPosition;
             break;
         case SeekOrigin.End:
             newPosition = trackDataLength + offset;
             if (newPosition < 0 || newPosition >= trackDataLength) throw new EndOfStreamException();
             trackDataPosition = (int) newPosition;
             break;
         default:
             throw new InvalidEnumArgumentException("origin", (int) origin, origin.GetType());
     }
     return trackDataPosition;
 }
示例#4
0
        public override long Seek(long offset, SeekOrigin origin)
        {
            switch (origin)
            {
                case SeekOrigin.Begin:
                    this.Position = offset;
                    break;

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

                case SeekOrigin.End:
                    this.Position = this.Length + offset;
                    break;

                default:
                    throw new ArgumentException("Unexpected value of "+origin.GetType().Name+".", "origin");
            }

            return this.Position;
        }