/// <summary> /// Initializes a new <see cref="AbideTagFile"/>. /// </summary> public AbideTagFile() { //Setup header = new Header() { ATagTag = "ATag" }; data = new FixedMemoryMappedStream(new byte[0]); }
/// <summary> /// Loads an Abide Halo 2 Tag file from the specified stream. /// </summary> /// <param name="inStream">The stream that contains the Abide Halo 2 Tag file.</param> /// <exception cref="ArgumentNullException"><paramref name="inStream"/> is null.</exception> /// <exception cref="ArgumentException"><paramref name="inStream"/> does not support seeking or reading.</exception> /// <exception cref="AbideTagFileException">File failed to open.</exception> public void Load(Stream inStream) { //Check if (inStream == null) { throw new ArgumentNullException(nameof(inStream)); } if (!inStream.CanSeek) { throw new ArgumentException("Stream does not support seeking.", nameof(inStream)); } if (!inStream.CanRead) { throw new ArgumentException("Stream does not support reading.", nameof(inStream)); } //Check if (inStream.Length >= 16) { using (BinaryReader reader = new BinaryReader(inStream)) { //Read header = reader.Read <Header>(); //Load Data byte[] buffer = new byte[header.DataLength]; inStream.Read(buffer, 0, buffer.Length); //Prepare if (data != null) { data.Dispose(); } data = new FixedMemoryMappedStream(buffer, header.MemoryAddress); } } else { throw new AbideTagFileException("Invalid Abide Tag file."); } }
/// <summary> /// Loads an Abide Halo 2 Tag file from the specified Halo 2 Index Entry. /// </summary> /// <param name="entry">The Halo 2 Index entry to load the Tag from.</param> /// <exception cref="ArgumentNullException"><paramref name="entry"/> is null.</exception> public void LoadEntry(IndexEntry entry) { //Check if (entry == null) { throw new ArgumentNullException(nameof(entry)); } //Setup header.TagType = entry.Root; header.MemoryAddress = entry.Offset; //Read byte[] buffer = new byte[entry.Size]; entry.TagData.Seek(entry.Offset, SeekOrigin.Begin); entry.TagData.Read(buffer, 0, buffer.Length); //Create if (data != null) { data.Dispose(); } data = new FixedMemoryMappedStream(buffer, entry.Offset); }