void ParseMetadata(string data) { int tagStart = data.IndexOf("APETAGEX"); if (tagStart == -1) { return; } data = data.Substring(tagStart); BinaryReader br = new BinaryReader(new MemoryStream(Encoding.ASCII.GetBytes(data)), Encoding.ASCII); br.ReadBytes(8 + 4); int tagSize = br.ReadInt32(); int itemCount = br.ReadInt32(); ApeFlags flags = new ApeFlags(br); ulong reserved = br.ReadUInt64(); int i = 0; while (i < itemCount) { ApeMetadataItem metadataItem = new ApeMetadataItem(br); metadata_.Add(metadataItem); i++; } }
public ApeMetadataItem(BinaryReader reader) { itemValueLength_ = reader.ReadInt32(); flags_ = new ApeFlags(reader); while (reader.PeekChar() != 0) { key_ += reader.ReadChar(); }; reader.ReadByte(); if (flags_.IsString) { value_ = Encoding.UTF8.GetString(reader.ReadBytes(itemValueLength_)); } else { reader.ReadBytes(itemValueLength_); } }