/// <summary>
 ///    Constructs and initializes a new instance of <see
 ///    cref="File" /> for a specified file abstraction with an
 ///    average read style.
 /// </summary>
 /// <param name="abstraction">
 ///    A <see cref="IFileAbstraction" /> object to use when
 ///    reading from and writing to the file.
 /// </param>
 /// <exception cref="ArgumentNullException">
 ///    <paramref name="abstraction" /> is <see langword="null"
 ///    />.
 /// </exception>
 public File(File.IFileAbstraction abstraction)
     : this(abstraction, ReadStyle.Average)
 {
 }
        /// <summary>
        ///    Constructs and initializes a new instance of <see
        ///    cref="File" /> for a specified file abstraction and
        ///    specified read style.
        /// </summary>
        /// <param name="abstraction">
        ///    A <see cref="IFileAbstraction" /> object to use when
        ///    reading from and writing to the file.
        /// </param>
        /// <param name="propertiesStyle">
        ///    A <see cref="ReadStyle" /> value specifying at what level
        ///    of accuracy to read the media properties, or <see
        ///    cref="ReadStyle.None" /> to ignore the properties.
        /// </param>
        /// <exception cref="ArgumentNullException">
        ///    <paramref name="abstraction" /> is <see langword="null"
        ///    />.
        /// </exception>
        public File(File.IFileAbstraction abstraction,
		            ReadStyle propertiesStyle)
            : base(abstraction)
        {
            Mode = AccessMode.Read;
            try
            {
                uint aiff_size;
                long tag_start, tag_end;
                Read(true, propertiesStyle, out aiff_size,
                     out tag_start, out tag_end);
            }
            finally
            {
                Mode = AccessMode.Closed;
            }

            TagTypesOnDisk = TagTypes;

            GetTag(TagTypes.Id3v2, true);
        }