/// <summary> /// Manages the paks. /// </summary> private void ManagePaks(StringBuilder logBuilder) { logBuilder.AppendLine(Logger.BuildLogWithDate("Starting to manage Paks")); FindPaks(logBuilder); logBuilder.AppendLine(Logger.BuildLogWithDate("Searching for actual files in Paks")); var zippedFiles = new List <ModFile>(); foreach (var file in Files) { var parts = file.FileName.Split('\\'); var filename = parts[parts.Length - 3] + "\\" + parts[parts.Length - 2] + "\\" + parts[parts.Length - 1]; var isRAR = CheckForRar(file.FileName, filename, logBuilder); // Replace RAR with ZIP if (isRAR) { logBuilder.AppendLine(Logger.BuildLogWithDate("Replacing RAR with ZIP")); Directory.CreateDirectory(file.FilePath + "\\TEMP_EXTRACT"); using (var rar = new Unrar(file.FileName)) { rar.Open(Unrar.OpenMode.Extract); rar.ReadHeader(); while (rar.CurrentFile != null) { rar.ExtractToDirectory(file.FilePath + "\\TEMP_EXTRACT"); rar.ReadHeader(); } rar.Close(); } logBuilder.AppendLine(Logger.BuildLogWithDate("Extracted RAR!")); ZipFile.CreateFromDirectory(file.FilePath + "\\TEMP_EXTRACT", file.FileName + ".extracted"); Directory.Delete(file.FilePath + "\\TEMP_EXTRACT", true); logBuilder.AppendLine(Logger.BuildLogWithDate("Created ZIP!")); if (File.Exists(file.FileName + ".extracted") && new FileInfo(file.FileName + ".extracted").Length > 30) { logBuilder.AppendLine(Logger.BuildLogWithDate("ZIP seems valid! Replacing RAR")); File.Move(file.FileName, file.FileName + ".backup"); File.Move(file.FileName + ".extracted", file.FileName); logBuilder.AppendLine(Logger.BuildLogWithDate("Replaced RAR!")); } else { logBuilder.AppendLine(Logger.BuildLogWithDate("ZIP does not contain any data!")); logBuilder.AppendLine(Logger.BuildLogWithDate("Critical Error: This should not be the case. Check the file format and perhaps manually convert it to ZIP!")); MessageBox.Show( "Critical Error: ZIP does not contain any data! Check the file format and perhaps manually convert it to ZIP!", "KCDModMerger", MessageBoxButton.OK); } } zippedFiles.AddRange(FindFilesInZIP(file, filename, logBuilder)); } logBuilder.AppendLine(Logger.BuildLogWithDate("Found total of " + zippedFiles.Count, true)); DataFiles = zippedFiles.ToArray(); }