using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.IO; using System.Text; using ICSharpCode.SharpZipLib.Zip; namespace Core.Helper { public class ZIPHelper { public static bool CreateZipFile(ArrayList filePaths, string outputPath) { bool result = true; ZipOutputStream pack = new ZipOutputStream(File.Create(outputPath)); try { // set compression level pack.SetLevel(5); foreach (string filePath in filePaths) { FileStream fs = File.OpenRead(filePath); // allocate buffer byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); // write the zip entry and its data ZipEntry entry = new ZipEntry(filePath.Substring(filePath.LastIndexOf(Path.DirectorySeparatorChar) + 1)); pack.PutNextEntry(entry); pack.Write(buffer, 0, buffer.Length); } } catch { result = false; } finally { pack.Finish(); pack.Close(); } return result; } public static ArrayList ExtractFileFromZipFile(string filePath, string destinationPath, bool isInvoicePackage) { ArrayList result = new ArrayList(); ZipFile zip = new ZipFile(File.OpenRead(filePath)); try { foreach (ZipEntry entry in zip) { if (entry.IsFile) { string fileName = entry.Name; if (isInvoicePackage) { fileName = fileName.Replace("unsigned", "signed"); } result.Add(fileName); Stream inputStream = zip.GetInputStream(entry); FileStream fileStream = new FileStream(destinationPath + fileName, FileMode.Create); try { CopyStream(inputStream, fileStream); } finally { fileStream.Close(); inputStream.Close(); } } } } finally { zip.Close(); } return result; } private static void CopyStream(Stream input, Stream output) { byte[] buffer = new byte[0x1000]; int read; while ((read = input.Read(buffer, 0, buffer.Length)) > 0) { output.Write(buffer, 0, read); } } } }