/// <summary> /// Compresses files into the archive, specifying the names used to /// store the files in the archive. /// </summary> /// <param name="sourceDirectory">This parameter may be null, but if /// specified it is the root directory /// for any relative paths in <paramref name="fileNames"/>.</param> /// <param name="fileNames">A mapping from internal file paths to /// external file paths.</param> /// <param name="compLevel">The compression level used when creating /// the archive.</param> /// <param name="progressHandler">Handler for receiving progress information; /// this may be null if progress is not desired.</param> public void PackFileSet( string sourceDirectory, IDictionary <string, string> fileNames, CompressionLevel compLevel, EventHandler <ArchiveProgressEventArgs> progressHandler) { if (fileNames == null) { throw new ArgumentNullException("fileNames"); } string[] fileNamesArray = new string[fileNames.Count]; fileNames.Keys.CopyTo(fileNamesArray, 0); using (CompressionEngine compressionEngine = this.CreateCompressionEngine()) { compressionEngine.Progress += progressHandler; ArchiveFileStreamContext streamContext = new ArchiveFileStreamContext( this.FullName, sourceDirectory, fileNames); streamContext.EnableOffsetOpen = true; compressionEngine.CompressionLevel = compLevel; compressionEngine.Pack(streamContext, fileNamesArray); } }