예제 #1
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

				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);
                    }
                }
            }
        }