private static void ZipStream(IEnumerable<string> files, string zipfile) { FileStream fileStream = new FileStream(zipfile, FileMode.Create); using (ZipOutputStream zipOutputStream = new ZipOutputStream(fileStream)) { foreach (string file in files) { zipOutputStream.PutNextEntry(new ZipEntry(Path.GetFileName(file))); FileStream stream = new FileStream(file, FileMode.Open); byte[] buffer = new byte[1024]; int len; while ((len = stream.Read(buffer, 0, buffer.Length)) != 0) { zipOutputStream.Write(buffer, 0, len); } stream.Close(); stream.Dispose(); } zipOutputStream.Flush(); zipOutputStream.Close(); zipOutputStream.Dispose(); } }
/// <summary> /// Create a zip archive sending output to the <paramref name="outputStream"/> passed. /// </summary> /// <param name="outputStream">The stream to write archive data to.</param> /// <param name="sourceDirectory">The directory to source files from.</param> /// <param name="recurse">True to recurse directories, false for no recursion.</param> /// <param name="fileFilter">The <see cref="PathFilter">file filter</see> to apply.</param> /// <param name="directoryFilter">The <see cref="PathFilter">directory filter</see> to apply.</param> public void CreateZip(Stream outputStream, string sourceDirectory, bool recurse, string fileFilter, string directoryFilter) { NameTransform = new ZipNameTransform(sourceDirectory); sourceDirectory_ = sourceDirectory; using ( outputStream_ = new ZipOutputStream(outputStream) ) { #if !NETCF_1_0 if ( password_ != null ) { outputStream_.Password = password_; } #endif outputStream_.UseZip64 = UseZip64; FileSystemScanner scanner = new FileSystemScanner(fileFilter, directoryFilter); scanner.ProcessFile += ProcessFile; if ( this.CreateEmptyDirectories ) { scanner.ProcessDirectory += ProcessDirectory; } if (_events != null) { if ( _events.FileFailure != null ) { scanner.FileFailure += _events.FileFailure; } if ( _events.DirectoryFailure != null ) { scanner.DirectoryFailure += _events.DirectoryFailure; } } scanner.Scan(sourceDirectory, recurse); } }