示例#1
0
文件: Program.cs 项目: NEstelami/ZAP
        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);
            }
        }
示例#2
0
        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();
            }
        }
示例#3
0
        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);
        }