TagTool.Cache.TagCache.ExtractTag C# (CSharp) Method

ExtractTag() public method

Reads a tag's data from the file.
public ExtractTag ( Stream stream, TagInstance tag ) : TagData
stream Stream The stream to read from.
tag TagTool.TagGroups.TagInstance The tag to read.
return TagData
        public TagData ExtractTag(Stream stream, TagInstance tag)
        {
            if (tag == null)
                throw new ArgumentNullException(nameof(tag));
            if (tag.HeaderOffset < 0)
                throw new ArgumentException("The tag is not in the cache file");

            // Build the description info and get the data offset
            uint dataOffset;
            var data = BuildTagDescription(stream, tag, out dataOffset);

            // Read the tag data
            stream.Position = tag.HeaderOffset + dataOffset;
            data.Data = new byte[tag.TotalSize - dataOffset];
            stream.Read(data.Data, 0, data.Data.Length);

            // Correct pointers
            using (var dataWriter = new BinaryWriter(new MemoryStream(data.Data)))
            {
                foreach (var fixup in data.PointerFixups)
                {
                    dataWriter.BaseStream.Position = fixup.WriteOffset;
                    dataWriter.Write(tag.OffsetToPointer(fixup.TargetOffset));
                }
            }
            return data;
        }