static void Extract(string archivePath, string destinationFolder) { CrafArchive archive = null; try { archive = CrafArchive.Open(archivePath); var task = archive.LoadAsync(new Progress <int>()); task.Wait(); archive.CloseReader(); } catch (IOException) { Console.WriteLine("Could not open archive"); Environment.Exit(-1); } var ct = archive.Count(); try { Directory.CreateDirectory(destinationFolder); for (var i = 0; i < ct; i++) { var outputPath = Path.Combine(destinationFolder, archive.DiskPath(i)); Console.WriteLine(string.Format("{0} ({1}/{2})", outputPath, i + 1, ct)); Directory.CreateDirectory(Path.GetDirectoryName(outputPath)); File.WriteAllBytes(outputPath, archive.Get(i)); } } catch (IOException ex) { Console.WriteLine("Error while extracting archive"); Console.WriteLine("Details: " + ex.Message); Environment.Exit(-1); } }
static void ReplaceAll(string archivePath, string replacementFolder, string newArchivePath) { CrafArchive archive = null; try { archive = CrafArchive.Open(archivePath); var task = archive.LoadAsync(new Progress <int>()); task.Wait(); archive.CloseReader(); } catch (IOException) { Console.WriteLine("Could not open archive"); Environment.Exit(-1); } var ct = archive.Count(); Console.WriteLine("Loading replacement files..."); for (var i = 0; i < ct; i++) { var fileInArchive = archive.DiskPath(i); var combined = Path.Combine(replacementFolder, fileInArchive); if (File.Exists(combined)) { Console.WriteLine(string.Format("{0} ({1}/{2})", combined, i + 1, ct)); try { archive.Replace(i, File.ReadAllBytes(combined)); } catch (IOException ex) { Console.WriteLine("Could not read replacement file"); Console.WriteLine("Details: " + ex.Message); Environment.Exit(-1); } } } Console.WriteLine(""); Console.WriteLine("Writing back files..."); var fivePercent = ct / 20; if (fivePercent == 0) { fivePercent = 1; } try { var task2 = archive.SaveAsync(newArchivePath, new Progress <int>((i) => { if (i % fivePercent == 0) { Console.Write("."); } })); task2.Wait(); } catch (IOException ex) { Console.WriteLine(""); Console.WriteLine("Could not write new archive"); Console.WriteLine("Details: " + ex.Message); Environment.Exit(-1); } Console.WriteLine(""); }