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); }
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); }
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); }
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); } } }