예제 #1
0
        private static void ExtractArchive(string arhFilename, string ardFilename, string outDir)
        {
            var arh     = File.ReadAllBytes(arhFilename);
            var archive = new FileArchive(arh, ardFilename);

            FileArchive.Extract(archive, outDir);
        }
예제 #2
0
        private static BdatStringCollection DeserializeBdatStringArchive(string arhFilename, string ardFilename)
        {
            var header  = File.ReadAllBytes(arhFilename);
            var archive = new FileArchive(header, ardFilename);

            var files     = new List <byte[]>();
            var fileNames = new List <string>();

            files.Add(archive.ReadFile("/bdat/common.bdat"));
            fileNames.Add(Path.GetFileNameWithoutExtension("common.bdat"));
            files.Add(archive.ReadFile("/bdat/common_gmk.bdat"));
            fileNames.Add(Path.GetFileNameWithoutExtension("common_gmk.bdat"));
            foreach (var file in archive.GetChildFileInfos("/bdat/gb/"))
            {
                byte[] bdat = archive.ReadFile(file);
                if (bdat == null)
                {
                    continue;
                }
                files.Add(bdat);
                fileNames.Add(Path.GetFileNameWithoutExtension(file.Filename));
            }

            BdatStringCollection tables = DeserializeStrings.ReadBdats(files.ToArray(), fileNames.ToArray());

            return(tables);
        }
예제 #3
0
        public static void ReadWilay(string arhFilename, string ardFilename, string inPath, string outPath)
        {
            byte[] header  = File.ReadAllBytes(arhFilename);
            var    archive = new FileArchive(header, ardFilename);

            Extract.ExtractTextures(archive, inPath, outPath);
        }
예제 #4
0
        public static void Extract(FileArchive archive, string outDir)
        {
            foreach (FileInfo fileInfo in archive.FileInfo.Where(x => !string.IsNullOrWhiteSpace(x.Filename)))
            {
                string filename = Path.Combine(outDir, fileInfo.Filename.TrimStart('/'));
                string dir      = Path.GetDirectoryName(filename) ?? throw new InvalidOperationException();
                Directory.CreateDirectory(dir);

                using (var outStream = new FileStream(filename, FileMode.Create, FileAccess.Write))
                {
                    archive.OutputFile(fileInfo, outStream);
                }
            }
        }