示例#1
0
        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();
                }
            }
        }
示例#2
0
        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());
                }
            }
        }