using Ionic.Zip; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; public static class ZipUtils { public static Stream ZipCompress(Stream sourceStream) { string entryName = "zip"; MemoryStream memoryStream = new MemoryStream(); if (sourceStream != null) { long num = 0L; try { num = sourceStream.Position; sourceStream.Position = 0L; using (ZipFile zipFile = new ZipFile()) { zipFile.AddEntry(entryName, sourceStream); zipFile.Save((Stream) memoryStream); memoryStream.Position = 0L; } } catch { } finally { try { sourceStream.Position = num; } catch { } } } return (Stream) memoryStream; } public static Stream ZipDecompress(byte[] data) { Stream stream = (Stream) new MemoryStream(); if (data != null) { try { using (ZipFile zipFile = ZipFile.Read((Stream) new MemoryStream(data))) { if (zipFile.Entries.Count > 0) { Enumerable.First((IEnumerable) zipFile.Entries).Extract(stream); stream.Position = 0L; } } } catch { } } return stream; } public static bool CompressMulti(List list, string strZipName, bool IsDirStruct) { try { using (ZipFile zipFile = new ZipFile(Encoding.Default)) { foreach (string str in list) { string fileName = Path.GetFileName(str); if (Directory.Exists(str)) { if (IsDirStruct) zipFile.AddDirectory(str, fileName); else zipFile.AddDirectory(str); } if (File.Exists(str)) zipFile.AddFile(str); } zipFile.Save(strZipName); return true; } } catch (Exception ex) { return false; } } public static bool Decompression(Stream inputStream, ref List outputStreamList, bool overWrite) { try { using (ZipFile zipFile = ZipFile.Read(inputStream, new ReadOptions() { Encoding = Encoding.Default })) { foreach (ZipEntry zipEntry in zipFile) { MemoryStream memoryStream = new MemoryStream(); outputStreamList.Add((Stream) memoryStream); zipEntry.Extract((Stream) memoryStream); } return true; } } catch (Exception ex) { return false; } } }