using System; using System.IO; using Ionic.Zip; namespace BizHawk.Client.Common { public class IonicZipWriter : IZipWriter { private ZipOutputStream z; private int level; public IonicZipWriter(string path, int compressionlevel) { level = compressionlevel; z = new ZipOutputStream(path) { EnableZip64 = Zip64Option.Never, CompressionLevel = (Ionic.Zlib.CompressionLevel)level }; z.CompressionMethod = CompressionMethod.Deflate; } public void WriteItem(string name, Action callback) { var e = z.PutNextEntry(name); if (level == 0) { e.CompressionMethod = CompressionMethod.None; } else { e.CompressionMethod = CompressionMethod.Deflate; } callback(z); // there is no CloseEntry() call } public void Dispose() { if (z != null) { z.Dispose(); z = null; } } } }