public static string Decode(string path) { var packedFileName = Path.GetFileName(path).ToLower(); using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read)) { using (BinaryReader reader = new BinaryReader(stream)) { Int32 header = reader.ReadInt32(); if (header == PackedSection.PackedHeader) { reader.ReadSByte(); var document = new XmlDocument(); var packedSection = new PackedSection(); var dictionary = packedSection.ReadDictionary(reader); var xmlroot = document.CreateNode(XmlNodeType.Element, packedFileName, ""); packedSection.ReadElement(reader, xmlroot, document, dictionary); document.AppendChild(xmlroot); return(XmlDecoder.FormatXml(document.OuterXml)); } if (header == BinaryHeader) { stream.Seek(0, SeekOrigin.Begin); var document = new XmlDocument(); var xmlPrimitives = document.CreateNode(XmlNodeType.Element, "primitives", ""); var primitiveReader = new PrimitiveReader(); primitiveReader.ReadPrimitives(reader, xmlPrimitives, document); document.AppendChild(xmlPrimitives); return(XmlDecoder.FormatXml(document.OuterXml)); } var extension = Path.GetExtension(path); if (extension == ".xml" || extension == ".def" || extension == ".visual" || extension == ".chunk" || extension == ".settings" || extension == ".model" || extension == ".visual_processed") { return(File.ReadAllText(path)); } throw new NotSupportedException(); } } }
public static string Decode(Stream stream) { using (BinaryReader reader = new BinaryReader(stream)) { Int32 header = reader.ReadInt32(); if (header == PackedSection.PackedHeader) { reader.ReadSByte(); var document = new XmlDocument(); var packedSection = new PackedSection(); var dictionary = packedSection.ReadDictionary(reader); var xmlroot = document.CreateNode(XmlNodeType.Element, "FromStream", ""); packedSection.ReadElement(reader, xmlroot, document, dictionary); document.AppendChild(xmlroot); return(XmlDecoder.FormatXml(document.OuterXml)); } if (header == BinaryHeader) { stream.Seek(0, SeekOrigin.Begin); var document = new XmlDocument(); var xmlPrimitives = document.CreateNode(XmlNodeType.Element, "primitives", ""); var primitiveReader = new PrimitiveReader(); primitiveReader.ReadPrimitives(reader, xmlPrimitives, document); document.AppendChild(xmlPrimitives); return(XmlDecoder.FormatXml(document.OuterXml)); } using (var streamReader = new StreamReader(stream)) { return(streamReader.ReadToEnd()); } } }