Пример #1
0
 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();
     }
 }
Пример #2
0
		/// <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);
			}
		}