public static void SaveZipFile(this ISaveableContent saveable, string fileName) { // Make sure all files are relative List <string> allFiles = saveable.GetReferencedFiles(RelativeType.Absolute); string directory = FileManager.GetDirectory(fileName); foreach (string referencedFile in allFiles) { if (!FileManager.IsRelativeTo(referencedFile, directory)) { throw new InvalidOperationException("The file " + referencedFile + " is not relative to the destination file " + fileName + ". All files must be relative to create a ZIP."); } } // First save the XML - we'll need this string xmlFileName = FileManager.RemoveExtension(fileName) + ".xmlInternal"; FileManager.XmlSerialize(saveable, xmlFileName); using (ZipFile zip = new ZipFile()) { // add this map file into the "images" directory in the zip archive zip.AddFile(xmlFileName); foreach (string referencedFile in allFiles) { zip.AddFile(referencedFile); } zip.Save(fileName); } }
public static bool AreAllFilesRelativeTo(this ISaveableContent saveableContent, string fileName) { List <string> allFiles = saveableContent.GetReferencedFiles(RelativeType.Absolute); string directory = FileManager.GetDirectory(fileName); foreach (string referencedFile in allFiles) { if (!FileManager.IsRelativeTo(referencedFile, directory)) { return(false); } } return(true); }