public void ReadXMLEntry(ResourceEntry entry, XmlWriter resourceXML, string name, string xmlDir) { resourceXML.WriteElementString("File", name); XmlResource resource = new XmlResource(); string[] dirs = name.Split('/'); string xmldir = xmlDir; for (int z = 0; z != dirs.Length - 1; z++) { xmldir += "/" + dirs[z]; Directory.CreateDirectory(xmldir); } using (MemoryStream stream = new MemoryStream(entry.Data)) { resource = new XmlResource(); resource.Deserialize(entry.Version, stream, Endian); if (resource.Unk3) { File.WriteAllBytes(xmlDir + "/" + name + ".xml", entry.Data); } else { File.WriteAllText(xmlDir + "/" + name + ".xml", resource.Content); } } resourceXML.WriteElementString("XMLTag", resource.Tag); resourceXML.WriteElementString("Unk1", Convert.ToByte(resource.Unk1).ToString()); resourceXML.WriteElementString("Unk3", Convert.ToByte(resource.Unk3).ToString()); resourceXML.WriteElementString("Version", entry.Version.ToString()); resourceXML.WriteEndElement(); //finish early. }
public string ReadXMLEntry(ResourceEntry entry, XmlWriter resourceXML, string name, string xmlDir) { XmlResource resource = new XmlResource(); using (MemoryStream stream = new MemoryStream(entry.Data)) { // Unpack our XML Resource. resource = new XmlResource(); resource.Deserialize(entry.Version, stream, Endian); name = resource.Name; // Create the directories. string[] dirs = name.Split(new char[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries); string xmldir = xmlDir; for (int z = 0; z != dirs.Length - 1; z++) { xmldir = Path.Combine(xmldir, dirs[z]); Directory.CreateDirectory(xmldir); } // Set the filename we want to save the file too. string FileName = Path.Combine(xmldir, Path.GetFileName(name) + ".xml"); if (resource.bFailedToDecompile) { byte[] data = stream.ReadBytes((int)(stream.Length - stream.Position)); File.WriteAllBytes(FileName, data); } else { // 08/08/2020. Originally was File.WriteAllText, but caused problems with some XML documents. using (StreamWriter writer = new StreamWriter(File.Open(FileName, FileMode.Create))) { writer.WriteLine(resource.Content); } } } resourceXML.WriteElementString("File", name); resourceXML.WriteElementString("XMLTag", resource.Tag); resourceXML.WriteElementString("Unk1", Convert.ToByte(resource.Unk1).ToString()); resourceXML.WriteElementString("Unk3", Convert.ToByte(resource.Unk3).ToString()); resourceXML.WriteElementString("FailedToDecompile", Convert.ToByte(resource.bFailedToDecompile).ToString()); resourceXML.WriteElementString("Version", entry.Version.ToString()); resourceXML.WriteEndElement(); //finish early. return(name); }
public void ReadXMLEntry(ResourceEntry entry, XmlWriter resourceXML, string name, string xmlDir) { resourceXML.WriteElementString("File", name); XmlResource resource = new XmlResource(); if (name == "/config/gui/Screens/MainMenu/TheStory") { using (BinaryWriter writer = new BinaryWriter(File.Open("file2.bin", FileMode.Create))) writer.Write(entry.Data); } //try //{ string[] dirs = name.Split('/'); resource = new XmlResource(); resource.Deserialize(entry.Version, new MemoryStream(entry.Data), Endian.Little); string xmldir = xmlDir; for (int z = 0; z != dirs.Length - 1; z++) { xmldir += "/" + dirs[z]; Directory.CreateDirectory(xmldir); } if (!resource.Unk3) { File.WriteAllText(xmlDir + "/" + name + ".xml", resource.Content); } else { using (BinaryWriter writer = new BinaryWriter(File.Open(xmlDir + "/" + name + ".xml", FileMode.Create))) { writer.Write(entry.Data); } } //} //catch (Exception ex) //{ // MessageBox.Show(string.Format("ERROR CONVERTING XML: \nFile{0} \nError: {1}", name, ex.Message)); //} resourceXML.WriteElementString("XMLTag", resource.Tag); resourceXML.WriteElementString("Unk1", Convert.ToByte(resource.Unk1).ToString()); resourceXML.WriteElementString("Unk3", Convert.ToByte(resource.Unk3).ToString()); resourceXML.WriteElementString("Version", entry.Version.ToString()); resourceXML.WriteEndElement(); //finish early. }