/// <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 FileSystemScanner scanner = new FileSystemScanner(fileFilter, directoryFilter); scanner.ProcessFile += new ProcessFileHandler(ProcessFile); if ( this.CreateEmptyDirectories ) { scanner.ProcessDirectory += new ProcessDirectoryHandler(ProcessDirectory); } if (events_ != null) { if ( events_.FileFailure != null ) { scanner.FileFailure += events_.FileFailure; } if ( events_.DirectoryFailure != null ) { scanner.DirectoryFailure += events_.DirectoryFailure; } } scanner.Scan(sourceDirectory, recurse); } }
private void CompressFile(Uri resourceUri) { if(resourceUri == null) throw (new ArgumentException("The resourceUri parameter value cannot be null")); if (resourceUri.ToString().Length == 0) throw (new IndexOutOfRangeException()); result.Text = ""; string filename = GetFilenameFromUri(resourceUri); // A memory stream to write to using (MemoryStream zippedMemoryStream = new MemoryStream()) { // A ZIP stream using (ZipOutputStream zipOutputStream = new ZipOutputStream(zippedMemoryStream)) { using (Stream stream = App.GetResourceStream(resourceUri).Stream) { // Highest compression rating zipOutputStream.SetLevel(9); // Show filename + length result.Text += string.Format("{0}:{1}\n", filename, stream.Length); byte[] buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); // Write the data to the ZIP file ZipEntry entry = new ZipEntry(string.Format("{0}.zip", filename)); zipOutputStream.PutNextEntry(entry); zipOutputStream.Write(buffer, 0, buffer.Length); zipOutputStream.Finish(); // Show Zipped filename + length result.Text += string.Format("{0}.zip:{1}\n", filename, zipOutputStream.Length); } } } }