static void ParseFile(string xmlFilePath, ZFileMode fileMode) { XmlReader reader = XmlReader.Create(xmlFilePath); while (!reader.EOF) { reader.Read(); if (reader.Name == "File") { ZFile file = new ZFile(fileMode, ref reader, Path.GetDirectoryName(xmlFilePath).Replace("\\", "/")); if (fileMode == ZFileMode.Extract) { file.ExtractResources(); } else { file.BuildResources(); } } //Console.WriteLine(reader.Name); } }
void ParseXML(ZFileMode mode, ref XmlReader reader) { int startDepth = reader.Depth; name = reader.GetAttribute("Name"); string folderName = basePath + "/" + Path.GetFileNameWithoutExtension(name); byte[] rawData = null; if (mode == ZFileMode.Extract) { rawData = File.ReadAllBytes(name); } int rawDataIndex = 0; reader.Read(); while (reader.Depth > startDepth) { if (reader.Name == "Texture") { ZTexture tex = null; if (mode == ZFileMode.Extract) { tex = new ZTexture(ref reader, rawData, rawDataIndex); } else { tex = new ZTexture(ref reader, folderName); } resources.Add(tex); rawDataIndex += tex.GetRawDataSize(); } else if (reader.Name == "Blob") { ZBlob blob = null; if (mode == ZFileMode.Extract) { blob = new ZBlob(ref reader, rawData, rawDataIndex); } else { blob = new ZBlob(ref reader, folderName); } resources.Add(blob); rawDataIndex += blob.GetRawDataSize(); } reader.Read(); } }
public ZFile(ZFileMode mode, ref XmlReader reader, string nBasePath) { resources = new List <ZResource>(); if (nBasePath == "") { basePath = Directory.GetCurrentDirectory(); } else { basePath = nBasePath; } ParseXML(mode, ref reader); }