/// <summary> /// Constructs and initializes a new instance of <see /// cref="HeaderObject" /> by reading the contents from a /// specified position in a specified file. /// </summary> /// <param name="file"> /// A <see cref="Asf.File" /> object containing the file from /// which the contents of the new instance are to be read. /// </param> /// <param name="position"> /// A <see cref="long" /> value specify at what position to /// read the object. /// </param> /// <exception cref="ArgumentNullException"> /// <paramref name="file" /> is <see langword="null" />. /// </exception> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="position" /> is less than zero or greater /// than the size of the file. /// </exception> /// <exception cref="CorruptFileException"> /// The object read from disk does not have the correct GUID /// or smaller than the minimum size. /// </exception> public HeaderObject(File file, long position) : base(file, position) { if (!Guid.Equals(Asf.Guid.AsfHeaderObject)) { throw new CorruptFileException("Object GUID incorrect."); } if (OriginalSize < 26) { throw new CorruptFileException("Object size too small."); } children = new List <Object> (); uint child_count = file.ReadDWord(); reserved = file.ReadBlock(2); children.AddRange(file.ReadObjects(child_count, file.Tell)); }