void BuildArchive() { File.Delete(ArchivePath); var otherFiles = Directory.GetFiles(UmswePath); var handle = IntPtr.Zero; SFileCreateArchive(ArchivePath, 0, (uint)(DataFiles.Length + otherFiles.Length), out handle); SFileCloseArchive(handle); using (var mpq = new MpqArchive(ArchivePath, FileAccess.ReadWrite)) { mpq.AddListFile(""); for (int i = 0; i < DataFiles.Length; i++) { var file = DataFiles[i]; mpq.AddFileFromDisk($"{TempFolder}\\{file}", $"UI\\{file}"); } for (int i = 0; i < otherFiles.Length; i++) { var file = otherFiles[i]; mpq.AddFileFromDisk(file, Path.GetFileName(file)); } mpq.Dispose(); } }
/** * Imports a file to the archive. * Deletes/imports to overwrite. * It imports from "in/" folder */ private void Import(String filename, MpqArchive archive) { try { Console.WriteLine("Importing file: in/" + filename); if (!File.Exists("in/" + filename)) { Console.WriteLine("File does not exist: in/" + filename + " skipping. . ."); return; } if (archive.HasFile(filename)) { // We need to delete because stormlib doesn't overwrite Console.WriteLine("File already exists, deleting"); archive.DeleteFile(filename); } Console.WriteLine("Inserting file"); archive.AddFileFromDisk("in/" + filename, filename); if (!archive.HasFile(filename)) { Console.WriteLine("Expected import file exists, but did not!"); return; } Console.WriteLine("Successfully imported in/" + filename + " as " + filename); } catch (Exception ex) { Console.WriteLine("Failed to import file " + filename + ": " + ex.Message); } }