public ResourceEntry WriteXBinEntry(ResourceEntry entry, XPathNodeIterator nodes, string sdsFolder, XmlNode descNode)
        {
            XBinResource resource = new XBinResource();

            //read contents from XML entry
            nodes.Current.MoveToNext();
            resource.Name = nodes.Current.Value;
            nodes.Current.MoveToNext();
            resource.Unk01 = Convert.ToUInt64(nodes.Current.Value);
            nodes.Current.MoveToNext();
            resource.Unk02 = Convert.ToUInt32(nodes.Current.Value);
            nodes.Current.MoveToNext();
            resource.Unk03 = Convert.ToUInt64(nodes.Current.Value);
            nodes.Current.MoveToNext();
            resource.Unk04 = nodes.Current.Value;
            nodes.Current.MoveToNext();
            resource.Hash = Convert.ToUInt64(nodes.Current.Value);
            nodes.Current.MoveToNext();
            entry.Version = Convert.ToUInt16(nodes.Current.Value);

            //finish
            resource.Data          = File.ReadAllBytes(sdsFolder + "/" + resource.Name);
            resource.Size          = resource.Data.Length;
            descNode.InnerText     = resource.Name;
            entry.OtherRamRequired = (uint)(resource.Size);

            using (var stream = new MemoryStream())
            {
                resource.Serialize(entry.Version, stream, _Endian);
                entry.Data = stream.ToArray();
            }
            return(entry);
        }
        private string ReadXBinEntry(ResourceEntry entry, XmlWriter resourceXML, string name, string xbinDir)
        {
            XBinResource resource = new XBinResource();

            using (var stream = new MemoryStream(entry.Data))
            {
                resource.Deserialize(entry.Version, stream, _Endian);
            }

            string[] dirs = resource.Name.Split('/');

            string newPath = xbinDir;

            for (int z = 0; z != dirs.Length - 1; z++)
            {
                newPath += "/" + dirs[z];
                Directory.CreateDirectory(newPath);
            }

            resourceXML.WriteElementString("File", resource.Name);
            resourceXML.WriteElementString("Unk01", resource.Unk01.ToString());
            resourceXML.WriteElementString("Unk02", resource.Unk02.ToString());
            resourceXML.WriteElementString("Unk03", resource.Unk03.ToString());
            resourceXML.WriteElementString("Unk04", resource.Unk04);
            resourceXML.WriteElementString("Hash", resource.Hash.ToString());
            resourceXML.WriteElementString("Version", entry.Version.ToString());
            File.WriteAllBytes(xbinDir + "/" + resource.Name, resource.Data);

            if (resource.XMLData != null)
            {
                File.WriteAllBytes(xbinDir + "/" + resource.Name + ".xml", resource.XMLData);
            }

            resourceXML.WriteEndElement();
            return(resource.Name);
        }