public static void Zip(string output, FileCollection files, MemoryFileCollection memoryFiles) { System.IO.DirectoryInfo directoryInfo = new System.IO.FileInfo(output).Directory; if (!directoryInfo.Exists) { directoryInfo.Create(); } using (System.IO.FileStream fileStream = System.IO.File.Create(output)) { NZlib.Zip.ZipOutputStream zipOutputStream = new NZlib.Zip.ZipOutputStream(fileStream); zipOutputStream.SetLevel(ZIP_LEVEL); //Files foreach (File file in files) { AddFile(zipOutputStream, file); } //MemoryFiles foreach (MemoryFile memoryFile in memoryFiles) { Add(zipOutputStream, memoryFile.Name, memoryFile.DateTime, memoryFile.Bytes.Length, memoryFile.Bytes); } zipOutputStream.Finish(); zipOutputStream.Close(); fileStream.Close(); } }
private static void Add(NZlib.Zip.ZipOutputStream zipOutputStream, string name, System.DateTime dateTime, long size, byte[] buffer) { NZlib.Zip.ZipEntry zipEntry = new NZlib.Zip.ZipEntry(name); zipEntry.DateTime = dateTime; if (ZIP_LEVEL == 0) { zipEntry.Size = size; // calculate crc32 of current file NZlib.Checksums.Crc32 crc = new NZlib.Checksums.Crc32(); crc.Update(buffer); zipEntry.Crc = crc.Value; } zipOutputStream.PutNextEntry(zipEntry); zipOutputStream.Write(buffer, 0, buffer.Length); }
private static void AddFile(NZlib.Zip.ZipOutputStream zipOutputStream, File file) { System.IO.FileInfo fileInfo = new System.IO.FileInfo(file.Path); System.IO.FileStream fileStream = System.IO.File.OpenRead(fileInfo.FullName); System.DateTime dateTime = fileInfo.LastWriteTime; long filesize = fileInfo.Length; byte[] buffer = new byte[fileStream.Length]; fileStream.Read(buffer, 0, buffer.Length); fileStream.Close(); Add(zipOutputStream, file.Name, dateTime, filesize, buffer); }