From 34cc013c5e6fc5ad71a74e09ccb47b4e742e2078 Mon Sep 17 00:00:00 2001 From: SilicaAndPina Date: Sun, 15 Dec 2019 19:47:58 +1300 Subject: [PATCH] Add VXAce Support. --- .vs/RMDEC/v15/.suo | Bin 0 -> 78848 bytes RMDEC/MVProjectToolset.cs | 2 +- RMDEC/RMDEC.csproj | 3 - RMDEC/VXAProject.cs | 68 +- RMDEC/VXAProjectToolset.Designer.cs | 129 +- RMDEC/VXAProjectToolset.cs | 397 +- RMDEC/packages.config | 1 - packages/DotNetZip.1.13.4/.signature.p7s | Bin 9513 -> 0 bytes .../DotNetZip.1.13.4/DotNetZip.1.13.4.nupkg | Bin 911740 -> 0 bytes .../DotNetZip.1.13.4/lib/net40/DotNetZip.dll | Bin 458752 -> 0 bytes .../DotNetZip.1.13.4/lib/net40/DotNetZip.pdb | Bin 587264 -> 0 bytes .../DotNetZip.1.13.4/lib/net40/DotNetZip.xml | 18529 ---------------- .../lib/netstandard2.0/DotNetZip.dll | Bin 239616 -> 0 bytes .../lib/netstandard2.0/DotNetZip.pdb | Bin 103160 -> 0 bytes .../lib/netstandard2.0/DotNetZip.xml | 18031 --------------- 15 files changed, 133 insertions(+), 37027 deletions(-) create mode 100644 .vs/RMDEC/v15/.suo delete mode 100644 packages/DotNetZip.1.13.4/.signature.p7s delete mode 100644 packages/DotNetZip.1.13.4/DotNetZip.1.13.4.nupkg delete mode 100644 packages/DotNetZip.1.13.4/lib/net40/DotNetZip.dll delete mode 100644 packages/DotNetZip.1.13.4/lib/net40/DotNetZip.pdb delete mode 100644 packages/DotNetZip.1.13.4/lib/net40/DotNetZip.xml delete mode 100644 packages/DotNetZip.1.13.4/lib/netstandard2.0/DotNetZip.dll delete mode 100644 packages/DotNetZip.1.13.4/lib/netstandard2.0/DotNetZip.pdb delete mode 100644 packages/DotNetZip.1.13.4/lib/netstandard2.0/DotNetZip.xml diff --git a/.vs/RMDEC/v15/.suo b/.vs/RMDEC/v15/.suo new file mode 100644 index 0000000000000000000000000000000000000000..5724548efb2a4fa35ab5688cb944ab4c705d11e3 GIT binary patch literal 78848 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 literal 0 HcmV?d00001 diff --git a/RMDEC/MVProjectToolset.cs b/RMDEC/MVProjectToolset.cs index 4957d9f..d45a0f5 100644 --- a/RMDEC/MVProjectToolset.cs +++ b/RMDEC/MVProjectToolset.cs @@ -540,7 +540,7 @@ namespace RMDEC makeMV.Enabled = true; unmakeMV.Enabled = true; - Process.Start(mvProject.FilePath); + Process.Start(mvProject.FilePath+"\\"); } private void makeMV_Click(object sender, EventArgs e) { diff --git a/RMDEC/RMDEC.csproj b/RMDEC/RMDEC.csproj index 9806f71..be53865 100644 --- a/RMDEC/RMDEC.csproj +++ b/RMDEC/RMDEC.csproj @@ -32,9 +32,6 @@ 4 - - ..\packages\DotNetZip.1.13.4\lib\net40\DotNetZip.dll - ..\packages\WindowsAPICodePack-Core.1.1.2\lib\Microsoft.WindowsAPICodePack.dll diff --git a/RMDEC/VXAProject.cs b/RMDEC/VXAProject.cs index 8a42e35..6c45e76 100644 --- a/RMDEC/VXAProject.cs +++ b/RMDEC/VXAProject.cs @@ -1,10 +1,9 @@ -using Ionic.Zlib; + using System; using System.Collections.Generic; using System.IO; -using System.Linq; using System.Text; -using System.Threading.Tasks; + namespace RMDEC { @@ -13,11 +12,10 @@ namespace RMDEC public VXAProject() { } //Private Variables - private static int[] supportedVersions = { 0x3 }; - private int currentVersion = 0; private byte[] encryptionKey = new byte[0x4]; private string gameTitle; + private string exeName; private string filePath; private Stream rgss3aStream; @@ -43,6 +41,15 @@ namespace RMDEC } } + public String ExeName + { + get + { + return exeName; + } + } + + public String FilePath { get @@ -126,18 +133,21 @@ namespace RMDEC private byte[] decryptFileData(byte[] input, byte[] keydata) { - byte[] output = new byte[input.Length]; + long size = input.LongLength; + byte[] output = new byte[size]; uint keyInt = BitConverter.ToUInt32(keydata, 0x00); - for (int i = 0; i < input.Length; i++) + for (int i = 0; i < size; i++) { if (i != 0 && i % 4 == 0) { // Derive new key - keyInt *= 7; - keyInt += 3; - keydata = BitConverter.GetBytes(keyInt); + keyInt = ((keyInt * 7) + 3); + + byte[] derivedKeyBytes = BitConverter.GetBytes(keyInt); + Array.Copy(derivedKeyBytes, keydata, 0x4); // have to do this in order to make the arguments update.. + } output[i] = (byte)(input[i] ^ keydata[i % keydata.Length]); @@ -162,31 +172,23 @@ namespace RMDEC throw new InvalidDataException("Not a valid rgss3a!"); } string workDir = Path.GetDirectoryName(file); - string gameExeName = Path.GetFileNameWithoutExtension(file); - string iniFilePath = Path.Combine(workDir, gameExeName + ".ini"); + vxp.exeName = Path.GetFileNameWithoutExtension(file); + string iniFilePath = Path.Combine(workDir, vxp.exeName + ".ini"); vxp.rgss3aStream = rgss3a; try { - vxp.gameTitle = read_ini_value(iniFilePath, "Game", "Title", gameExeName); + vxp.gameTitle = read_ini_value(iniFilePath, "Game", "Title", vxp.exeName); } catch (Exception) { - vxp.gameTitle = gameExeName; + vxp.gameTitle = vxp.exeName; } vxp.filePath = workDir; - rgss3a.Seek(0x1, SeekOrigin.Current); - int version = rgss3a.ReadByte(); - - - if(!supportedVersions.Contains(version)) - { - throw new InvalidDataException("Unsupported version!"); - } - - vxp.currentVersion = version; + rgss3a.Seek(0x2, SeekOrigin.Current); + vxp.encryptionKey = BitConverter.GetBytes((((vxp.readUInt32()) * 9) + 3)); @@ -196,31 +198,29 @@ namespace RMDEC public void DecryptFile(int fileIndex, Stream outStream) { - + outStream.SetLength(0); ArchiveFile fileData = archiveFileList[fileIndex]; byte[] keyData = fileData.Key; rgss3aStream.Seek(fileData.Offset, SeekOrigin.Begin); uint size = fileData.Size; - for(int i = 0; i < size; i += 0x40000000) + for(int i = 0; i < size; i += 0x20000000) { - if (size >= 0x40000000) //1GB + if (size > 0x20000000) //512MB { - byte[] gameData = new byte[0x40000000]; - rgss3aStream.Read(gameData, 0x00, 0x40000000); + byte[] gameData = new byte[0x20000000]; + rgss3aStream.Read(gameData, 0x00, 0x20000000); gameData = decryptFileData(gameData, keyData); - //gameData = ZlibStream.UncompressBuffer(gameData); - outStream.Write(gameData, 0x00, (int)size); + outStream.Write(gameData, 0x00, gameData.Length); } else { byte[] gameData = new byte[size]; - rgss3aStream.Read(gameData, 0x00, (int)size); + rgss3aStream.Read(gameData, 0x00, gameData.Length); gameData = decryptFileData(gameData, keyData); - //gameData = ZlibStream.UncompressBuffer(gameData); - outStream.Write(gameData, 0x00, (int)size); + outStream.Write(gameData, 0x00, gameData.Length); } } diff --git a/RMDEC/VXAProjectToolset.Designer.cs b/RMDEC/VXAProjectToolset.Designer.cs index 8f32257..e6453e7 100644 --- a/RMDEC/VXAProjectToolset.Designer.cs +++ b/RMDEC/VXAProjectToolset.Designer.cs @@ -31,15 +31,11 @@ this.encryptedFileList = new System.Windows.Forms.ListBox(); this.decryptSelected = new System.Windows.Forms.Button(); this.decryptedFileList = new System.Windows.Forms.ListBox(); - this.encryptSelected = new System.Windows.Forms.Button(); this.processingBar = new System.Windows.Forms.ProgressBar(); this.processingText = new System.Windows.Forms.Label(); - this.makeMV = new System.Windows.Forms.Button(); - this.unmakeMV = new System.Windows.Forms.Button(); + this.makeVXA = new System.Windows.Forms.Button(); this.layout1 = new System.Windows.Forms.TableLayoutPanel(); - this.layout2 = new System.Windows.Forms.TableLayoutPanel(); this.layout1.SuspendLayout(); - this.layout2.SuspendLayout(); this.SuspendLayout(); // // encryptedFileList @@ -51,9 +47,8 @@ this.encryptedFileList.HorizontalScrollbar = true; this.encryptedFileList.Location = new System.Drawing.Point(3, 3); this.encryptedFileList.Name = "encryptedFileList"; - this.layout1.SetRowSpan(this.encryptedFileList, 4); this.encryptedFileList.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended; - this.encryptedFileList.Size = new System.Drawing.Size(334, 357); + this.encryptedFileList.Size = new System.Drawing.Size(820, 141); this.encryptedFileList.TabIndex = 3; // // decryptSelected @@ -63,11 +58,11 @@ this.decryptSelected.Enabled = false; this.decryptSelected.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.decryptSelected.ForeColor = System.Drawing.SystemColors.ActiveCaptionText; - this.decryptSelected.Location = new System.Drawing.Point(387, 98); + this.decryptSelected.Location = new System.Drawing.Point(389, 156); this.decryptSelected.Name = "decryptSelected"; this.decryptSelected.Size = new System.Drawing.Size(48, 48); this.decryptSelected.TabIndex = 4; - this.decryptSelected.Text = "-->"; + this.decryptSelected.Text = "|\r\nV"; this.decryptSelected.UseVisualStyleBackColor = false; this.decryptSelected.Click += new System.EventHandler(this.decryptSelected_Click); // @@ -78,31 +73,15 @@ this.decryptedFileList.Dock = System.Windows.Forms.DockStyle.Fill; this.decryptedFileList.FormattingEnabled = true; this.decryptedFileList.HorizontalScrollbar = true; - this.decryptedFileList.Location = new System.Drawing.Point(486, 3); + this.decryptedFileList.Location = new System.Drawing.Point(3, 217); this.decryptedFileList.Name = "decryptedFileList"; - this.layout1.SetRowSpan(this.decryptedFileList, 4); this.decryptedFileList.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended; - this.decryptedFileList.Size = new System.Drawing.Size(337, 357); + this.decryptedFileList.Size = new System.Drawing.Size(820, 143); this.decryptedFileList.TabIndex = 5; // - // encryptSelected - // - this.encryptSelected.Anchor = System.Windows.Forms.AnchorStyles.None; - this.encryptSelected.BackColor = System.Drawing.SystemColors.InactiveCaption; - this.encryptSelected.Enabled = false; - this.encryptSelected.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.encryptSelected.ForeColor = System.Drawing.SystemColors.ActiveCaptionText; - this.encryptSelected.Location = new System.Drawing.Point(387, 208); - this.encryptSelected.Name = "encryptSelected"; - this.encryptSelected.Size = new System.Drawing.Size(48, 48); - this.encryptSelected.TabIndex = 6; - this.encryptSelected.Text = "<--"; - this.encryptSelected.UseVisualStyleBackColor = false; - this.encryptSelected.Click += new System.EventHandler(this.encryptSelected_Click); - // // processingBar // - this.processingBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + this.processingBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.processingBar.BackColor = System.Drawing.SystemColors.InactiveCaption; this.processingBar.Location = new System.Drawing.Point(154, 415); @@ -123,93 +102,56 @@ this.processingText.Text = "Waiting"; this.processingText.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // - // makeMV + // makeVXA // - this.makeMV.BackColor = System.Drawing.SystemColors.InactiveCaption; - this.makeMV.Dock = System.Windows.Forms.DockStyle.Fill; - this.makeMV.Enabled = false; - this.makeMV.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.makeMV.Location = new System.Drawing.Point(417, 3); - this.makeMV.Name = "makeMV"; - this.makeMV.Size = new System.Drawing.Size(409, 24); - this.makeMV.TabIndex = 9; - this.makeMV.Text = "Un-Deploy MV Project"; - this.makeMV.UseVisualStyleBackColor = false; - this.makeMV.Click += new System.EventHandler(this.makeMV_Click); - // - // unmakeMV - // - this.unmakeMV.BackColor = System.Drawing.SystemColors.InactiveCaption; - this.unmakeMV.Dock = System.Windows.Forms.DockStyle.Fill; - this.unmakeMV.Enabled = false; - this.unmakeMV.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.unmakeMV.ForeColor = System.Drawing.SystemColors.InactiveCaptionText; - this.unmakeMV.Location = new System.Drawing.Point(3, 3); - this.unmakeMV.Name = "unmakeMV"; - this.unmakeMV.Size = new System.Drawing.Size(408, 24); - this.unmakeMV.TabIndex = 10; - this.unmakeMV.Text = "Deploy MV Project"; - this.unmakeMV.UseVisualStyleBackColor = false; - this.unmakeMV.Click += new System.EventHandler(this.unmakeMV_Click); + this.makeVXA.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.makeVXA.BackColor = System.Drawing.SystemColors.InactiveCaption; + this.makeVXA.Enabled = false; + this.makeVXA.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.makeVXA.ForeColor = System.Drawing.SystemColors.InactiveCaptionText; + this.makeVXA.Location = new System.Drawing.Point(18, 385); + this.makeVXA.Name = "makeVXA"; + this.makeVXA.Size = new System.Drawing.Size(820, 24); + this.makeVXA.TabIndex = 10; + this.makeVXA.Text = "Decrypt and Uncompress to VX Ace Project"; + this.makeVXA.UseVisualStyleBackColor = false; + this.makeVXA.Click += new System.EventHandler(this.makeVXA_Click); // // layout1 // - this.layout1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.layout1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.layout1.ColumnCount = 5; - this.layout1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 44.17065F)); - this.layout1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 5.829354F)); - this.layout1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 55F)); - this.layout1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 5.829354F)); - this.layout1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 44.17064F)); - this.layout1.Controls.Add(this.encryptSelected, 2, 2); + this.layout1.ColumnCount = 1; + this.layout1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.layout1.Controls.Add(this.encryptedFileList, 0, 0); - this.layout1.Controls.Add(this.decryptedFileList, 4, 0); + this.layout1.Controls.Add(this.decryptedFileList, 0, 2); this.layout1.Controls.Add(this.decryptSelected, 2, 1); this.layout1.Location = new System.Drawing.Point(15, 12); this.layout1.Name = "layout1"; - this.layout1.RowCount = 4; - this.layout1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 22.89562F)); - this.layout1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 39.05724F)); - this.layout1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 38.04714F)); - this.layout1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 74F)); + this.layout1.RowCount = 3; + this.layout1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 40.76087F)); + this.layout1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 18.47826F)); + this.layout1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 40.76087F)); this.layout1.Size = new System.Drawing.Size(826, 363); this.layout1.TabIndex = 7; // - // layout2 - // - this.layout2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.layout2.ColumnCount = 2; - this.layout2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.layout2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.layout2.Controls.Add(this.unmakeMV, 0, 0); - this.layout2.Controls.Add(this.makeMV, 1, 0); - this.layout2.Location = new System.Drawing.Point(12, 380); - this.layout2.Name = "layout2"; - this.layout2.RowCount = 1; - this.layout2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.layout2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.layout2.Size = new System.Drawing.Size(829, 30); - this.layout2.TabIndex = 11; - // - // VXAProjectToolset + // vxaProjectToolset // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.SystemColors.ActiveCaption; this.ClientSize = new System.Drawing.Size(853, 442); + this.Controls.Add(this.makeVXA); this.Controls.Add(this.processingText); this.Controls.Add(this.processingBar); this.Controls.Add(this.layout1); - this.Controls.Add(this.layout2); this.MinimumSize = new System.Drawing.Size(869, 481); - this.Name = "VXAProjectToolset"; + this.Name = "vxaProjectToolset"; this.Text = "RMDec - RPG Maker VX ACE"; this.Load += new System.EventHandler(this.VXAProjectToolset_Load); this.layout1.ResumeLayout(false); - this.layout2.ResumeLayout(false); this.ResumeLayout(false); } @@ -218,12 +160,9 @@ private System.Windows.Forms.ListBox encryptedFileList; private System.Windows.Forms.Button decryptSelected; private System.Windows.Forms.ListBox decryptedFileList; - private System.Windows.Forms.Button encryptSelected; private System.Windows.Forms.ProgressBar processingBar; private System.Windows.Forms.Label processingText; - private System.Windows.Forms.Button makeMV; - private System.Windows.Forms.Button unmakeMV; + private System.Windows.Forms.Button makeVXA; private System.Windows.Forms.TableLayoutPanel layout1; - private System.Windows.Forms.TableLayoutPanel layout2; } } \ No newline at end of file diff --git a/RMDEC/VXAProjectToolset.cs b/RMDEC/VXAProjectToolset.cs index 7ec1171..3ef0637 100644 --- a/RMDEC/VXAProjectToolset.cs +++ b/RMDEC/VXAProjectToolset.cs @@ -19,32 +19,21 @@ namespace RMDEC vxProject = proj; InitializeComponent(); } - - private List decFileList = new List(); - - - private bool encryptedIndexingComplete = false; - private bool unencryptedIndexingComplete = false; - private void onIndexThreadComplete() { - if(encryptedIndexingComplete && unencryptedIndexingComplete) - { - processingText.Text = "Waiting"; - processingText.BackColor = Color.Red; + processingText.Text = "Waiting"; + processingText.BackColor = Color.Red; - decryptSelected.Enabled = true; - encryptSelected.Enabled = true; + decryptSelected.Enabled = true; - makeMV.Enabled = true; - unmakeMV.Enabled = true; + makeVXA.Enabled = true; + makeVXA.Enabled = true; - processingBar.Style = ProgressBarStyle.Continuous; + processingBar.Style = ProgressBarStyle.Continuous; - this.Cursor = Cursors.Arrow; - } + this.Cursor = Cursors.Arrow; } private void indexFiles() { @@ -54,112 +43,39 @@ namespace RMDEC this.Cursor = Cursors.WaitCursor; //Index Encrypted Files - Thread indexEncryptedFilesThread = new Thread(() => + Thread indexFiles = new Thread(() => { vxProject.PopulateFileList(); foreach (string file in vxProject.FileList) { string fileExtension = Path.GetExtension(file); + string realPath = Path.Combine(vxProject.FilePath, file); + + Invoke((Action)delegate { encryptedFileList.Items.Add("[" + fileExtension.ToUpper().TrimStart('.') + "] " + file); }); + + if (File.Exists(realPath)) + { + Invoke((Action)delegate + { + decryptedFileList.Items.Add("[" + fileExtension.ToUpper().TrimStart('.') + "] " + file); + }); + } } Invoke((Action)delegate { - encryptedIndexingComplete = true; - unencryptedIndexingComplete = true; onIndexThreadComplete(); }); }); - indexEncryptedFilesThread.Start(); - - /*Index Unencrypted Files - Thread indexUnencryptedFilesThread = new Thread(() => - { - - List pngList = new List(); - List oggList = new List(); - List m4aList = new List(); - - foreach (string file in Directory.EnumerateFiles(vxProject.FilePath, "*", SearchOption.AllDirectories)) - { - - string relativeName = file.Remove(0, vxProject.FilePath.Length + 1); - string fileExtension = Path.GetExtension(file).ToLower(); - - if(blacklistedFiles.Contains(relativeName)) - { - continue; - } - - switch (fileExtension) - { - case ".png": - pngList.Add(file); - break; - case ".ogg": - oggList.Add(file); - break; - case ".m4a": - m4aList.Add(file); - break; - } - - - } - - //add PNG - foreach (string png in pngList) - { - string relativeName = png.Remove(0, vxProject.FilePath.Length+1); - - Invoke((Action)delegate - { - decryptedFileList.Items.Add("[PNG] " + relativeName); - }); - decFileList.Add(png); - } - - //add OGG - foreach (string ogg in oggList) - { - string relativeName = ogg.Remove(0, vxProject.FilePath.Length+1); - - Invoke((Action)delegate - { - decryptedFileList.Items.Add("[OGG] " + relativeName); - }); - decFileList.Add(ogg); - } - - //add M4A - foreach (string m4a in m4aList) - { - string relativeName = m4a.Remove(0, vxProject.FilePath.Length+1); - - Invoke((Action)delegate - { - decryptedFileList.Items.Add("[M4A] " + relativeName); - }); - decFileList.Add(m4a); - } - - Invoke((Action)delegate - { - unencryptedImageCount = pngList.Count; - unencryptedMusicCount = oggList.Count + m4aList.Count; - - unencryptedIndexingComplete = true; - onIndexThreadComplete(); - }); - }); - indexUnencryptedFilesThread.Start(); - */ + indexFiles.Start(); + } private void VXAProjectToolset_Load(object sender, EventArgs e) { @@ -172,87 +88,7 @@ namespace RMDEC this.Text = "RMDec - [RMVXA] " + vxProject.GameTitle + " - " + vxProject.FilePath; } - private void encryptSelected_Click(object sender, EventArgs e) - { - /* SelectedIndexCollection itemList = decryptedFileList.SelectedIndices; - int itemCount = itemList.Count; - if (itemCount < 1) - { - return; - } - - int item = 0; - - processingBar.Style = ProgressBarStyle.Continuous; - processingBar.Maximum = itemCount; - - processingText.BackColor = Color.Yellow; - - encryptSelected.Enabled = false; - decryptSelected.Enabled = false; - - - Thread decryptFilesThread = new Thread(() => - { - int i = 1; - int total = itemCount; - do - { - - Invoke((Action)delegate - { - - itemCount = itemList.Count; - item = itemList[0]; - - processingText.Text = "Encrypting " + i.ToString() + "/" + total.ToString(); - }); - - - - string decryptedFile = decFileList[item]; - string newExtension = encodeFileExtension(decryptedFile); - string encryptedFile = Path.ChangeExtension(decryptedFile, newExtension); - - FileStream Decrypted = File.OpenRead(decryptedFile); - FileStream Encrypted = File.OpenWrite(encryptedFile); - - vxProject.EncryptFile(Decrypted, Encrypted); - - Encrypted.Close(); - Decrypted.Close(); - - File.Delete(decryptedFile); - - Invoke((Action)delegate - { - string entry = decryptedFileList.Items[item].ToString(); - string encryptedEntry = Path.ChangeExtension(entry, newExtension); - encryptedFileList.Items.Add(encryptedEntry); - encFileList.Add(encryptedFile); - - decryptedFileList.Items.RemoveAt(item); - decFileList.RemoveAt(item); - - processingBar.Value = i; - }); - - i++; - } while (itemCount > 1); - - Invoke((Action)delegate - { - encryptSelected.Enabled = true; - decryptSelected.Enabled = true; - processingText.BackColor = Color.Green; - processingText.Text = "Encrypted " + total.ToString() + " files!"; - }); - }); - - decryptFilesThread.Start(); - */ - } private void decryptSelected_Click(object sender, EventArgs e) @@ -271,27 +107,20 @@ namespace RMDEC processingBar.Maximum = itemCount; processingText.BackColor = Color.Yellow; - - encryptSelected.Enabled = false; + decryptSelected.Enabled = false; - makeMV.Enabled = false; - unmakeMV.Enabled = false; - + makeVXA.Enabled = false; + Thread decryptFilesThread = new Thread(() => { - int i = 1; - int total = itemCount; - do - { + for(int i = 0; i < itemCount; i++) + { Invoke((Action)delegate - { - - itemCount = itemList.Count; - item = itemList[0]; - - processingText.Text = "Decrypting " + i.ToString() + "/" + total.ToString(); + { + item = itemList[i]; + processingText.Text = "Decrypting " + i.ToString() + "/" + itemCount.ToString(); }); @@ -308,50 +137,50 @@ namespace RMDEC Invoke((Action)delegate { - string entry = encryptedFileList.Items[item].ToString(); - string decryptedEntry = entry; - decryptedFileList.Items.Add(decryptedEntry); - - - encryptedFileList.Items.RemoveAt(item); - vxProject.FileList.RemoveAt(item); + string encEntry = encryptedFileList.Items[i].ToString(); + if (!decryptedFileList.Items.Contains(encEntry)) + { + decryptedFileList.Items.Add(encEntry); + } processingBar.Value = i; }); - i++; - } while (itemCount > 1); + } Invoke((Action)delegate { - encryptSelected.Enabled = true; decryptSelected.Enabled = true; - makeMV.Enabled = true; - unmakeMV.Enabled = true; + makeVXA.Enabled = true; processingText.BackColor = Color.Green; - processingText.Text = "Decrypted " + total.ToString() + " files!"; + processingText.Text = "Decrypted " + itemCount.ToString() + " files!"; }); }); decryptFilesThread.Start(); } - private void onMakeMvComplete() + private void onMakeVxaComplete() { - string rpgProject = Path.Combine(vxProject.FilePath, "Game.rvproj2"); + string rpgProject = Path.Combine(vxProject.FilePath, vxProject.ExeName+".rvproj2"); + string rpgEncryptedArchive = Path.Combine(vxProject.FilePath, vxProject.ExeName + ".rgss3a"); File.WriteAllText(rpgProject, "RPGVXAce 1.00"); + + if(File.Exists(rpgEncryptedArchive)) + { + vxProject.Close(); + File.Move(rpgEncryptedArchive, rpgEncryptedArchive+".delete-me"); + } processingText.BackColor = Color.Green; - processingText.Text = "Game Un-Deployed!"; + processingText.Text = "Game Decrypted!"; - encryptSelected.Enabled = true; decryptSelected.Enabled = true; - makeMV.Enabled = true; - unmakeMV.Enabled = true; + makeVXA.Enabled = true; - Process.Start(vxProject.FilePath); + Process.Start(vxProject.FilePath+"\\"); } - private void makeMV_Click(object sender, EventArgs e) + private void makeVXA_Click(object sender, EventArgs e) { int itemCount = vxProject.FileList.Count; @@ -362,12 +191,11 @@ namespace RMDEC processingBar.Maximum = itemCount; processingText.BackColor = Color.Yellow; - - encryptSelected.Enabled = false; + decryptSelected.Enabled = false; - makeMV.Enabled = false; - unmakeMV.Enabled = false; + makeVXA.Enabled = false; + makeVXA.Enabled = false; Thread decryptFilesThread = new Thread(() => { @@ -380,26 +208,22 @@ namespace RMDEC }); - string fileName = (Path.Combine(vxProject.FilePath, vxProject.FileList[0])); + string fileName = (Path.Combine(vxProject.FilePath, vxProject.FileList[i])); Directory.CreateDirectory(Path.GetDirectoryName(fileName)); - FileStream Decrypted = File.OpenWrite(fileName); - - vxProject.DecryptFile(0, Decrypted); - + vxProject.DecryptFile(i, Decrypted); Decrypted.Close(); Invoke((Action)delegate { - string entry = encryptedFileList.Items[0].ToString(); - string decryptedEntry = entry; - decryptedFileList.Items.Add(decryptedEntry); - decFileList.Add(fileName); - - encryptedFileList.Items.RemoveAt(0); - vxProject.FileList.RemoveAt(0); - + string encEntry = encryptedFileList.Items[0].ToString(); + if (!decryptedFileList.Items.Contains(encEntry)) + { + decryptedFileList.Items.Add(encEntry); + } + encryptedFileList.Items.Remove(encEntry); + processingBar.Value = i; }); } @@ -408,7 +232,7 @@ namespace RMDEC Invoke((Action)delegate { - onMakeMvComplete(); + onMakeVxaComplete(); }); @@ -418,103 +242,10 @@ namespace RMDEC } else { - onMakeMvComplete(); + onMakeVxaComplete(); } } - private void onUnMakeMvComplete() - { - string rpgProject = Path.Combine(vxProject.FilePath, "Game.rpgproject"); - - if(File.Exists(rpgProject)) - { - File.Delete(rpgProject); - } - - processingText.BackColor = Color.Green; - processingText.Text = "Game Deployed!"; - - encryptSelected.Enabled = true; - decryptSelected.Enabled = true; - makeMV.Enabled = true; - unmakeMV.Enabled = true; - - } - - private void unmakeMV_Click(object sender, EventArgs e) - { - /* int itemCount = decFileList.Count; - - //Encrypt Everything - if (itemCount > 0) - { - processingBar.Style = ProgressBarStyle.Continuous; - processingBar.Maximum = itemCount; - - processingText.BackColor = Color.Yellow; - - encryptSelected.Enabled = false; - decryptSelected.Enabled = false; - - makeMV.Enabled = false; - unmakeMV.Enabled = false; - - Thread encryptFilesThread = new Thread(() => - { - - for (int i = 0; i < itemCount; i++) - { - Invoke((Action)delegate - { - processingText.Text = "Encrypting " + i.ToString() + "/" + itemCount.ToString(); - }); - - - string decryptedFile = decFileList[0]; - string newExtension = encodeFileExtension(decryptedFile); - string encryptedFile = Path.ChangeExtension(decryptedFile, newExtension); - - FileStream Encrypted = File.OpenWrite(encryptedFile); - FileStream Decrypted = File.OpenRead(decryptedFile); - - vxProject.EncryptFile(Decrypted,Encrypted); - - Encrypted.Close(); - Decrypted.Close(); - - File.Delete(decryptedFile); - - Invoke((Action)delegate - { - string entry = decryptedFileList.Items[0].ToString(); - string encryptedEntry = Path.ChangeExtension(entry, newExtension); - encryptedFileList.Items.Add(encryptedEntry); - encFileList.Add(encryptedFile); - - decryptedFileList.Items.RemoveAt(0); - decFileList.RemoveAt(0); - - processingBar.Value = i; - }); - } - - - - Invoke((Action)delegate - { - onUnMakeMvComplete(); - }); - - }); - encryptFilesThread.Start(); - } - else - { - onUnMakeMvComplete(); - } - */ - } - } } diff --git a/RMDEC/packages.config b/RMDEC/packages.config index b25f0f0..9994f97 100644 --- a/RMDEC/packages.config +++ b/RMDEC/packages.config @@ -1,6 +1,5 @@  - diff --git a/packages/DotNetZip.1.13.4/.signature.p7s b/packages/DotNetZip.1.13.4/.signature.p7s deleted file mode 100644 index 20f545e9eb65679e40659767d289973169099472..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9513 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 N=#XDmcmZvN{2z1*M+5)> diff --git a/packages/DotNetZip.1.13.4/DotNetZip.1.13.4.nupkg b/packages/DotNetZip.1.13.4/DotNetZip.1.13.4.nupkg deleted file mode 100644 index 611052b0a3e7f3068e9ff928f8de0ade01b3ee70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 911740 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%0DGXA^n>aD+(mT?$W^I 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�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�NWBo@4HE&E7$@@b!rvNQ55D%oE-`62O$m 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

_y&fb+&mH*@rdZkUydJ+K^`(mo2B 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

m=?I9PC%B3Y1d}=Yo+v2> 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

;4J8X9M8$5!w%o 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 diff --git a/packages/DotNetZip.1.13.4/lib/net40/DotNetZip.dll b/packages/DotNetZip.1.13.4/lib/net40/DotNetZip.dll deleted file mode 100644 index 2b6455da39363fc98832ddae3a350456032a6564..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 458752 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 z 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 u%=O1t#{&X@p_YcdNuBS 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 L-x~OTZw>q(MoX$6 diff --git a/packages/DotNetZip.1.13.4/lib/net40/DotNetZip.xml b/packages/DotNetZip.1.13.4/lib/net40/DotNetZip.xml deleted file mode 100644 index 552c654..0000000 --- a/packages/DotNetZip.1.13.4/lib/net40/DotNetZip.xml +++ /dev/null @@ -1,18529 +0,0 @@ - - - - DotNetZip - - - -

- Delivers the remaining bits, left-aligned, in a byte. - - - - This is valid only if NumRemainingBits is less than 8; - in other words it is valid only after a call to Flush(). - - - - - - Reset the BitWriter. - - - - This is useful when the BitWriter writes into a MemoryStream, and - is used by a BZip2Compressor, which itself is re-used for multiple - distinct data blocks. - - - - - - Write some number of bits from the given value, into the output. - - - - The nbits value should be a max of 25, for safety. For performance - reasons, this method does not check! - - - - - - Write a full 8-bit byte into the output. - - - - - Write four 8-bit bytes into the output. - - - - - Write all available byte-aligned bytes. - - - - This method writes no new output, but flushes any accumulated - bits. At completion, the accumulator may contain up to 7 - bits. - - - This is necessary when re-assembling output from N independent - compressors, one for each of N blocks. The output of any - particular compressor will in general have some fragment of a byte - remaining. This fragment needs to be accumulated into the - parent BZip2OutputStream. - - - - - - Writes all available bytes, and emits padding for the final byte as - necessary. This must be the last method invoked on an instance of - BitWriter. - - - - Knuth's increments seem to work better than Incerpi-Sedgewick here. - Possibly because the number of elems to sort is usually small, typically - <= 20. - - - - BZip2Compressor writes its compressed data out via a BitWriter. This - is necessary because BZip2 does byte shredding. - - - - - The number of uncompressed bytes being held in the buffer. - - - - I am thinking this may be useful in a Stream that uses this - compressor class. In the Close() method on the stream it could - check this value to see if anything has been written at all. You - may think the stream could easily track the number of bytes it - wrote, which would eliminate the need for this. But, there is the - case where the stream writes a complete block, and it is full, and - then writes no more. In that case the stream may want to check. - - - - - - Accept new bytes into the compressor data buffer - - - - This method does the first-level (cheap) run-length encoding, and - stores the encoded data into the rle block. - - - - - - Process one input byte into the block. - - - - - To "process" the byte means to do the run-length encoding. - There are 3 possible return values: - - 0 - the byte was not written, in other words, not - encoded into the block. This happens when the - byte b would require the start of a new run, and - the block has no more room for new runs. - - 1 - the byte was written, and the block is not full. - - 2 - the byte was written, and the block is full. - - - - 0 if the byte was not written, non-zero if written. - - - - Append one run to the output block. - - - - - This compressor does run-length-encoding before BWT and etc. This - method simply appends a run to the output block. The append always - succeeds. The return value indicates whether the block is full: - false (not full) implies that at least one additional run could be - processed. - - - true if the block is now full; otherwise false. - - - - Compress the data that has been placed (Run-length-encoded) into the - block. The compressed data goes into the CompressedBytes array. - - - - Side effects: 1. fills the CompressedBytes array. 2. sets the - AvailableBytesOut property. - - - - - This is the most hammered method of this class. - -

- This is the version using unrolled loops. -

-
- - Method "mainQSort3", file "blocksort.c", BZip2 1.0.2 - - - Array instance identical to sfmap, both are used only - temporarily and independently, so we do not need to allocate - additional memory. - - - - A read-only decorator stream that performs BZip2 decompression on Read. - - - - - Compressor State - - - - - Create a BZip2InputStream, wrapping it around the given input Stream. - - - - The input stream will be closed when the BZip2InputStream is closed. - - - The stream from which to read compressed data - - - - Create a BZip2InputStream with the given stream, and - specifying whether to leave the wrapped stream open when - the BZip2InputStream is closed. - - The stream from which to read compressed data - - Whether to leave the input stream open, when the BZip2InputStream closes. - - - - - This example reads a bzip2-compressed file, decompresses it, - and writes the decompressed data into a newly created file. - - - var fname = "logfile.log.bz2"; - using (var fs = File.OpenRead(fname)) - { - using (var decompressor = new Ionic.BZip2.BZip2InputStream(fs)) - { - var outFname = fname + ".decompressed"; - using (var output = File.Create(outFname)) - { - byte[] buffer = new byte[2048]; - int n; - while ((n = decompressor.Read(buffer, 0, buffer.Length)) > 0) - { - output.Write(buffer, 0, n); - } - } - } - } - - - - - - Read data from the stream. - - - - - To decompress a BZip2 data stream, create a BZip2InputStream, - providing a stream that reads compressed data. Then call Read() on - that BZip2InputStream, and the data read will be decompressed - as you read. - - - - A BZip2InputStream can be used only for Read(), not for Write(). - - - - The buffer into which the read data should be placed. - the offset within that data array to put the first byte read. - the number of bytes to read. - the number of bytes actually read - - - - Read a single byte from the stream. - - the byte read from the stream, or -1 if EOF - - - - Indicates whether the stream can be read. - - - The return value depends on whether the captive stream supports reading. - - - - - Indicates whether the stream supports Seek operations. - - - Always returns false. - - - - - Indicates whether the stream can be written. - - - The return value depends on whether the captive stream supports writing. - - - - - Flush the stream. - - - - - Reading this property always throws a . - - - - - The position of the stream pointer. - - - - Setting this property always throws a . Reading will return the - total number of uncompressed bytes read in. - - - - - Calling this method always throws a . - - this is irrelevant, since it will always throw! - this is irrelevant, since it will always throw! - irrelevant! - - - - Calling this method always throws a . - - this is irrelevant, since it will always throw! - - - - Calling this method always throws a . - - this parameter is never used - this parameter is never used - this parameter is never used - - - - Dispose the stream. - - - indicates whether the Dispose method was invoked by user code. - - - - - Close the stream. - - - - - Read n bits from input, right justifying the result. - - - - For example, if you read 1 bit, the result is either 0 - or 1. - - - - The number of bits to read, always between 1 and 32. - - - - Called by createHuffmanDecodingTables() exclusively. - - - Called by recvDecodingTables() exclusively. - - - Freq table collected to save a pass over the data during - decompression. - - - Initializes the tt array. - - This method is called when the required length of the array is known. - I don't initialize it at construction time to avoid unneccessary - memory allocation when compressing small files. - - - - A write-only decorator stream that compresses data as it is - written using the BZip2 algorithm. - - - - - Constructs a new BZip2OutputStream, that sends its - compressed output to the given output stream. - - - - The destination stream, to which compressed output will be sent. - - - - - This example reads a file, then compresses it with bzip2 file, - and writes the compressed data into a newly created file. - - - var fname = "logfile.log"; - using (var fs = File.OpenRead(fname)) - { - var outFname = fname + ".bz2"; - using (var output = File.Create(outFname)) - { - using (var compressor = new Ionic.BZip2.BZip2OutputStream(output)) - { - byte[] buffer = new byte[2048]; - int n; - while ((n = fs.Read(buffer, 0, buffer.Length)) > 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - - - - Constructs a new BZip2OutputStream with specified blocksize. - - the destination stream. - - The blockSize in units of 100000 bytes. - The valid range is 1..9. - - - - - Constructs a new BZip2OutputStream. - - the destination stream. - - whether to leave the captive stream open upon closing this stream. - - - - - Constructs a new BZip2OutputStream with specified blocksize, - and explicitly specifies whether to leave the wrapped stream open. - - - the destination stream. - - The blockSize in units of 100000 bytes. - The valid range is 1..9. - - - whether to leave the captive stream open upon closing this stream. - - - - - Close the stream. - - - - This may or may not close the underlying stream. Check the - constructors that accept a bool value. - - - - - - Flush the stream. - - - - - The blocksize parameter specified at construction time. - - - - - Write data to the stream. - - - - - Use the BZip2OutputStream to compress data while writing: - create a BZip2OutputStream with a writable output stream. - Then call Write() on that BZip2OutputStream, providing - uncompressed data as input. The data sent to the output stream will - be the compressed form of the input data. - - - - A BZip2OutputStream can be used only for Write() not for Read(). - - - - - The buffer holding data to write to the stream. - the offset within that data array to find the first byte to write. - the number of bytes to write. - - - - Indicates whether the stream can be read. - - - The return value is always false. - - - - - Indicates whether the stream supports Seek operations. - - - Always returns false. - - - - - Indicates whether the stream can be written. - - - The return value should always be true, unless and until the - object is disposed and closed. - - - - - Reading this property always throws a . - - - - - The position of the stream pointer. - - - - Setting this property always throws a . Reading will return the - total number of uncompressed bytes written through. - - - - - Calling this method always throws a . - - this is irrelevant, since it will always throw! - this is irrelevant, since it will always throw! - irrelevant! - - - - Calling this method always throws a . - - this is irrelevant, since it will always throw! - - - - Calling this method always throws a . - - this parameter is never used - this parameter is never used - this parameter is never used - never returns anything; always throws - - - - A write-only decorator stream that compresses data as it is - written using the BZip2 algorithm. This stream compresses by - block using multiple threads. - - - This class performs BZIP2 compression through writing. For - more information on the BZIP2 algorithm, see - . - - - - This class is similar to , - except that this implementation uses an approach that employs multiple - worker threads to perform the compression. On a multi-cpu or multi-core - computer, the performance of this class can be significantly higher than - the single-threaded BZip2OutputStream, particularly for larger streams. - How large? Anything over 10mb is a good candidate for parallel - compression. - - - - The tradeoff is that this class uses more memory and more CPU than the - vanilla BZip2OutputStream. Also, for small files, the - ParallelBZip2OutputStream can be much slower than the vanilla - BZip2OutputStream, because of the overhead associated to using the - thread pool. - - - - - - - Constructs a new ParallelBZip2OutputStream, that sends its - compressed output to the given output stream. - - - - The destination stream, to which compressed output will be sent. - - - - - This example reads a file, then compresses it with bzip2 file, - and writes the compressed data into a newly created file. - - - var fname = "logfile.log"; - using (var fs = File.OpenRead(fname)) - { - var outFname = fname + ".bz2"; - using (var output = File.Create(outFname)) - { - using (var compressor = new Ionic.BZip2.ParallelBZip2OutputStream(output)) - { - byte[] buffer = new byte[2048]; - int n; - while ((n = fs.Read(buffer, 0, buffer.Length)) > 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - - - - Constructs a new ParallelBZip2OutputStream with specified blocksize. - - the destination stream. - - The blockSize in units of 100000 bytes. - The valid range is 1..9. - - - - - Constructs a new ParallelBZip2OutputStream. - - the destination stream. - - whether to leave the captive stream open upon closing this stream. - - - - - Constructs a new ParallelBZip2OutputStream with specified blocksize, - and explicitly specifies whether to leave the wrapped stream open. - - - the destination stream. - - The blockSize in units of 100000 bytes. - The valid range is 1..9. - - - whether to leave the captive stream open upon closing this stream. - - - - - The maximum number of concurrent compression worker threads to use. - - - - - This property sets an upper limit on the number of concurrent worker - threads to employ for compression. The implementation of this stream - employs multiple threads from the .NET thread pool, via - ThreadPool.QueueUserWorkItem(), to compress the incoming data by - block. As each block of data is compressed, this stream re-orders the - compressed blocks and writes them to the output stream. - - - - A higher number of workers enables a higher degree of - parallelism, which tends to increase the speed of compression on - multi-cpu computers. On the other hand, a higher number of buffer - pairs also implies a larger memory consumption, more active worker - threads, and a higher cpu utilization for any compression. This - property enables the application to limit its memory consumption and - CPU utilization behavior depending on requirements. - - - - By default, DotNetZip allocates 4 workers per CPU core, subject to the - upper limit specified in this property. For example, suppose the - application sets this property to 16. Then, on a machine with 2 - cores, DotNetZip will use 8 workers; that number does not exceed the - upper limit specified by this property, so the actual number of - workers used will be 4 * 2 = 8. On a machine with 4 cores, DotNetZip - will use 16 workers; again, the limit does not apply. On a machine - with 8 cores, DotNetZip will use 16 workers, because of the limit. - - - - For each compression "worker thread" that occurs in parallel, there is - up to 2mb of memory allocated, for buffering and processing. The - actual number depends on the property. - - - - CPU utilization will also go up with additional workers, because a - larger number of buffer pairs allows a larger number of background - threads to compress in parallel. If you find that parallel - compression is consuming too much memory or CPU, you can adjust this - value downward. - - - - The default value is 16. Different values may deliver better or - worse results, depending on your priorities and the dynamic - performance characteristics of your storage and compute resources. - - - - The application can set this value at any time, but it is effective - only before the first call to Write(), which is when the buffers are - allocated. - - - - - - Close the stream. - - - - This may or may not close the underlying stream. Check the - constructors that accept a bool value. - - - - - - Flush the stream. - - - - - The blocksize parameter specified at construction time. - - - - - Write data to the stream. - - - - - Use the ParallelBZip2OutputStream to compress data while - writing: create a ParallelBZip2OutputStream with a writable - output stream. Then call Write() on that - ParallelBZip2OutputStream, providing uncompressed data as - input. The data sent to the output stream will be the compressed - form of the input data. - - - - A ParallelBZip2OutputStream can be used only for - Write() not for Read(). - - - - - The buffer holding data to write to the stream. - the offset within that data array to find the first byte to write. - the number of bytes to write. - - - - Indicates whether the stream can be read. - - - The return value is always false. - - - - - Indicates whether the stream supports Seek operations. - - - Always returns false. - - - - - Indicates whether the stream can be written. - - - The return value depends on whether the captive stream supports writing. - - - - - Reading this property always throws a . - - - - - The position of the stream pointer. - - - - Setting this property always throws a . Reading will return the - total number of uncompressed bytes written through. - - - - - The total number of bytes written out by the stream. - - - This value is meaningful only after a call to Close(). - - - - - Calling this method always throws a . - - this is irrelevant, since it will always throw! - this is irrelevant, since it will always throw! - irrelevant! - - - - Calling this method always throws a . - - this is irrelevant, since it will always throw! - - - - Calling this method always throws a . - - this parameter is never used - this parameter is never used - this parameter is never used - never returns anything; always throws - - - - Returns the "random" number at a specific index. - - the index - the random number - - - - An enum that provides the different self-extractor flavors - - - - - A self-extracting zip archive that runs from the console or - command line. - - - - - A self-extracting zip archive that presents a graphical user - interface when it is executed. - - - - - The options for generating a self-extracting archive. - - - - - The type of SFX to create. - - - - - The command to run after extraction. - - - - - This is optional. Leave it empty (null in C# or Nothing in - VB) to run no command after extraction. - - - - If it is non-empty, the SFX will execute the command specified in this - string on the user's machine, and using the extract directory as the - working directory for the process, after unpacking the archive. The - program to execute can include a path, if you like. If you want to execute - a program that accepts arguments, specify the program name, followed by a - space, and then the arguments for the program, each separated by a space, - just as you would on a normal command line. Example: program.exe arg1 - arg2. The string prior to the first space will be taken as the - program name, and the string following the first space specifies the - arguments to the program. - - - - If you want to execute a program that has a space in the name or path of - the file, surround the program name in double-quotes. The first character - of the command line should be a double-quote character, and there must be - a matching double-quote following the end of the program file name. Any - optional arguments to the program follow that, separated by - spaces. Example: "c:\project files\program name.exe" arg1 arg2. - - - - If the flavor of the SFX is SelfExtractorFlavor.ConsoleApplication, - then the SFX starts a new process, using this string as the post-extract - command line. The SFX waits for the process to exit. The exit code of - the post-extract command line is returned as the exit code of the - command-line self-extractor exe. A non-zero exit code is typically used to - indicated a failure by the program. In the case of an SFX, a non-zero exit - code may indicate a failure during extraction, OR, it may indicate a - failure of the run-after-extract program if specified, OR, it may indicate - the run-after-extract program could not be fuond. There is no way to - distinguish these conditions from the calling shell, aside from parsing - the output of the SFX. If you have Quiet set to true, you may not - see error messages, if a problem occurs. - - - - If the flavor of the SFX is - SelfExtractorFlavor.WinFormsApplication, then the SFX starts a new - process, using this string as the post-extract command line, and using the - extract directory as the working directory for the process. The SFX does - not wait for the command to complete, and does not check the exit code of - the program. If the run-after-extract program cannot be fuond, a message - box is displayed indicating that fact. - - - - You can specify environment variables within this string, with a format like - %NAME%. The value of these variables will be expanded at the time - the SFX is run. Example: %WINDIR%\system32\xcopy.exe may expand at - runtime to c:\Windows\System32\xcopy.exe. - - - - By combining this with the RemoveUnpackedFilesAfterExecute - flag, you can create an SFX that extracts itself, runs a file that - was extracted, then deletes all the files that were extracted. If - you want it to run "invisibly" then set Flavor to - SelfExtractorFlavor.ConsoleApplication, and set Quiet - to true. The user running such an EXE will see a console window - appear, then disappear quickly. You may also want to specify the - default extract location, with DefaultExtractDirectory. - - - - If you set Flavor to - SelfExtractorFlavor.WinFormsApplication, and set Quiet to - true, then a GUI with progressbars is displayed, but it is - "non-interactive" - it accepts no input from the user. Instead the SFX - just automatically unpacks and exits. - - - - - - - The default extract directory the user will see when - running the self-extracting archive. - - - - - Passing null (or Nothing in VB) here will cause the Self Extractor to use - the the user's personal directory () for the default extract - location. - - - - This is only a default location. The actual extract location will be - settable on the command line when the SFX is executed. - - - - You can specify environment variables within this string, - with %NAME%. The value of these variables will be - expanded at the time the SFX is run. Example: - %USERPROFILE%\Documents\unpack may expand at runtime to - c:\users\melvin\Documents\unpack. - - - - - - The name of an .ico file in the filesystem to use for the application icon - for the generated SFX. - - - - - Normally, DotNetZip will embed an "zipped folder" icon into the generated - SFX. If you prefer to use a different icon, you can specify it here. It - should be a .ico file. This file is passed as the /win32icon - option to the csc.exe compiler when constructing the SFX file. - - - - - - - Whether the ConsoleApplication SFX will be quiet during extraction. - - - - - This option affects the way the generated SFX runs. By default it is - false. When you set it to true,... - - - - - Flavor - Behavior - - - - ConsoleApplication - no messages will be emitted during successful - operation. Double-clicking the SFX in Windows - Explorer or as an attachment in an email will cause a console - window to appear briefly, before it disappears. If you run the - ConsoleApplication SFX from the cmd.exe prompt, it runs as a - normal console app; by default, because it is quiet, it displays - no messages to the console. If you pass the -v+ command line - argument to the Console SFX when you run it, you will get verbose - messages to the console. - - - - - WinFormsApplication - the SFX extracts automatically when the application - is launched, with no additional user input. - - - - - - - When you set it to false,... - - - - - Flavor - Behavior - - - - ConsoleApplication - the extractor will emit a - message to the console for each entry extracted. - - When double-clicking to launch the SFX, the console window will - remain, and the SFX will emit a message for each file as it - extracts. The messages fly by quickly, they won't be easily - readable, unless the extracted files are fairly large. - - - - - - WinFormsApplication - the SFX presents a forms UI and allows the user to select - options before extracting. - - - - - - - - - - Specify what the self-extractor will do when extracting an entry - would overwrite an existing file. - - - - The default behavvior is to Throw. - - - - - - Whether to remove the files that have been unpacked, after executing the - PostExtractCommandLine. - - - - - If true, and if there is a - PostExtractCommandLine, and if the command runs successfully, - then the files that the SFX unpacked will be removed, afterwards. If - the command does not complete successfully (non-zero return code), - that is interpreted as a failure, and the extracted files will not be - removed. - - - - Setting this flag, and setting Flavor to - SelfExtractorFlavor.ConsoleApplication, and setting Quiet to - true, results in an SFX that extracts itself, runs a file that was - extracted, then deletes all the files that were extracted, with no - intervention by the user. You may also want to specify the default - extract location, with DefaultExtractDirectory. - - - - - - - The file version number to embed into the generated EXE. It will show up, for - example, during a mouseover in Windows Explorer. - - - - - - The product version to embed into the generated EXE. It will show up, for - example, during a mouseover in Windows Explorer. - - - - You can use any arbitrary string, but a human-readable version number is - recommended. For example "v1.2 alpha" or "v4.2 RC2". If you specify nothing, - then there is no product version embedded into the EXE. - - - - - - The copyright notice, if any, to embed into the generated EXE. - - - - It will show up, for example, while viewing properties of the file in - Windows Explorer. You can use any arbitrary string, but typically you - want something like "Copyright � Dino Chiesa 2011". - - - - - - The description to embed into the generated EXE. - - - - Use any arbitrary string. This text will be displayed during a - mouseover in Windows Explorer. If you specify nothing, then the string - "DotNetZip SFX Archive" is embedded into the EXE as the description. - - - - - - The product name to embed into the generated EXE. - - - - Use any arbitrary string. This text will be displayed - while viewing properties of the EXE file in - Windows Explorer. - - - - - - The title to display in the Window of a GUI SFX, while it extracts. - - - - - By default the title show in the GUI window of a self-extractor - is "DotNetZip Self-extractor (http://DotNetZip.codeplex.com/)". - You can change that by setting this property before saving the SFX. - - - - This property has an effect only when producing a Self-extractor - of flavor SelfExtractorFlavor.WinFormsApplication. - - - - - - - Additional options for the csc.exe compiler, when producing the SFX - EXE. - - - - - - The ZipFile type represents a zip archive file. - - - - - This is the main type in the DotNetZip class library. This class reads and - writes zip files, as defined in the specification - for zip files described by PKWare. The compression for this - implementation is provided by a managed-code version of Zlib, included with - DotNetZip in the classes in the Ionic.Zlib namespace. - - - - This class provides a general purpose zip file capability. Use it to read, - create, or update zip files. When you want to create zip files using a - Stream type to write the zip file, you may want to consider the class. - - - - Both the ZipOutputStream class and the ZipFile class can - be used to create zip files. Both of them support many of the common zip - features, including Unicode, different compression methods and levels, - and ZIP64. They provide very similar performance when creating zip - files. - - - - The ZipFile class is generally easier to use than - ZipOutputStream and should be considered a higher-level interface. For - example, when creating a zip file via calls to the PutNextEntry() and - Write() methods on the ZipOutputStream class, the caller is - responsible for opening the file, reading the bytes from the file, writing - those bytes into the ZipOutputStream, setting the attributes on the - ZipEntry, and setting the created, last modified, and last accessed - timestamps on the zip entry. All of these things are done automatically by a - call to ZipFile.AddFile(). - For this reason, the ZipOutputStream is generally recommended for use - only when your application emits arbitrary data, not necessarily data from a - filesystem file, directly into a zip file, and does so using a Stream - metaphor. - - - - Aside from the differences in programming model, there are other - differences in capability between the two classes. - - - - - ZipFile can be used to read and extract zip files, in addition to - creating zip files. ZipOutputStream cannot read zip files. If you want - to use a stream to read zip files, check out the class. - - - - ZipOutputStream does not support the creation of segmented or spanned - zip files. - - - - ZipOutputStream cannot produce a self-extracting archive. - - - - - Be aware that the ZipFile class implements the interface. In order for ZipFile to - produce a valid zip file, you use use it within a using clause (Using - in VB), or call the Dispose() method explicitly. See the examples - for how to employ a using clause. - - - - - - - Saves the ZipFile instance to a self-extracting zip archive. - - - - - - The generated exe image will execute on any machine that has the .NET - Framework 4.0 installed on it. The generated exe image is also a - valid ZIP file, readable with DotNetZip or another Zip library or tool - such as WinZip. - - - - There are two "flavors" of self-extracting archive. The - WinFormsApplication version will pop up a GUI and allow the - user to select a target directory into which to extract. There's also - a checkbox allowing the user to specify to overwrite existing files, - and another checkbox to allow the user to request that Explorer be - opened to see the extracted files after extraction. The other flavor - is ConsoleApplication. A self-extractor generated with that - flavor setting will run from the command line. It accepts command-line - options to set the overwrite behavior, and to specify the target - extraction directory. - - - - There are a few temporary files created during the saving to a - self-extracting zip. These files are created in the directory pointed - to by , which defaults to . These temporary files are - removed upon successful completion of this method. - - - - When a user runs the WinForms SFX, the user's personal directory (Environment.SpecialFolder.Personal) - will be used as the default extract location. If you want to set the - default extract location, you should use the other overload of - SaveSelfExtractor()/ The user who runs the SFX will have the - opportunity to change the extract directory before extracting. When - the user runs the Command-Line SFX, the user must explicitly specify - the directory to which to extract. The .NET Framework 4.0 is required - on the computer when the self-extracting archive is run. - - - - NB: This method is not available in the "Reduced" DotNetZip library. - - - - - - - string DirectoryPath = "c:\\Documents\\Project7"; - using (ZipFile zip = new ZipFile()) - { - zip.AddDirectory(DirectoryPath, System.IO.Path.GetFileName(DirectoryPath)); - zip.Comment = "This will be embedded into a self-extracting console-based exe"; - zip.SaveSelfExtractor("archive.exe", SelfExtractorFlavor.ConsoleApplication); - } - - - Dim DirectoryPath As String = "c:\Documents\Project7" - Using zip As New ZipFile() - zip.AddDirectory(DirectoryPath, System.IO.Path.GetFileName(DirectoryPath)) - zip.Comment = "This will be embedded into a self-extracting console-based exe" - zip.SaveSelfExtractor("archive.exe", SelfExtractorFlavor.ConsoleApplication) - End Using - - - - - a pathname, possibly fully qualified, to be created. Typically it - will end in an .exe extension. - - Indicates whether a Winforms or Console self-extractor is - desired. - - - - Saves the ZipFile instance to a self-extracting zip archive, using - the specified save options. - - - - - This method saves a self extracting archive, using the specified save - options. These options include the flavor of the SFX, the default extract - directory, the icon file, and so on. See the documentation - for for more - details. - - - - The user who runs the SFX will have the opportunity to change the extract - directory before extracting. If at the time of extraction, the specified - directory does not exist, the SFX will create the directory before - extracting the files. - - - - - - This example saves a WinForms-based self-extracting archive EXE that - will use c:\ExtractHere as the default extract location. The C# code - shows syntax for .NET 3.0, which uses an object initializer for - the SelfExtractorOptions object. - - string DirectoryPath = "c:\\Documents\\Project7"; - using (ZipFile zip = new ZipFile()) - { - zip.AddDirectory(DirectoryPath, System.IO.Path.GetFileName(DirectoryPath)); - zip.Comment = "This will be embedded into a self-extracting WinForms-based exe"; - var options = new SelfExtractorOptions - { - Flavor = SelfExtractorFlavor.WinFormsApplication, - DefaultExtractDirectory = "%USERPROFILE%\\ExtractHere", - PostExtractCommandLine = ExeToRunAfterExtract, - SfxExeWindowTitle = "My Custom Window Title", - RemoveUnpackedFilesAfterExecute = true - }; - zip.SaveSelfExtractor("archive.exe", options); - } - - - Dim DirectoryPath As String = "c:\Documents\Project7" - Using zip As New ZipFile() - zip.AddDirectory(DirectoryPath, System.IO.Path.GetFileName(DirectoryPath)) - zip.Comment = "This will be embedded into a self-extracting console-based exe" - Dim options As New SelfExtractorOptions() - options.Flavor = SelfExtractorFlavor.WinFormsApplication - options.DefaultExtractDirectory = "%USERPROFILE%\\ExtractHere" - options.PostExtractCommandLine = ExeToRunAfterExtract - options.SfxExeWindowTitle = "My Custom Window Title" - options.RemoveUnpackedFilesAfterExecute = True - zip.SaveSelfExtractor("archive.exe", options) - End Using - - - - The name of the EXE to generate. - provides the options for creating the - Self-extracting archive. - - - - Adds an item, either a file or a directory, to a zip file archive. - - - - - This method is handy if you are adding things to zip archive and don't - want to bother distinguishing between directories or files. Any files are - added as single entries. A directory added through this method is added - recursively: all files and subdirectories contained within the directory - are added to the ZipFile. - - - - The name of the item may be a relative path or a fully-qualified - path. Remember, the items contained in ZipFile instance get written - to the disk only when you call or a similar - save method. - - - - The directory name used for the file within the archive is the same - as the directory name (potentially a relative path) specified in the - . - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - - - - This method has two overloads. - - the name of the file or directory to add. - - The ZipEntry added. - - - - Adds an item, either a file or a directory, to a zip file archive, - explicitly specifying the directory path to be used in the archive. - - - - - If adding a directory, the add is recursive on all files and - subdirectories contained within it. - - - The name of the item may be a relative path or a fully-qualified path. - The item added by this call to the ZipFile is not read from the - disk nor written to the zip file archive until the application calls - Save() on the ZipFile. - - - - This version of the method allows the caller to explicitly specify the - directory path to be used in the archive, which would override the - "natural" path of the filesystem file. - - - - Encryption will be used on the file data if the Password has - been set on the ZipFile object, prior to calling this method. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - Thrown if the file or directory passed in does not exist. - - - the name of the file or directory to add. - - - - The name of the directory path to use within the zip archive. This path - need not refer to an extant directory in the current filesystem. If the - files within the zip are later extracted, this is the path used for the - extracted file. Passing null (Nothing in VB) will use the - path on the fileOrDirectoryName. Passing the empty string ("") will - insert the item at the root path within the archive. - - - - - - - - This example shows how to zip up a set of files into a flat hierarchy, - regardless of where in the filesystem the files originated. The resulting - zip archive will contain a toplevel directory named "flat", which itself - will contain files Readme.txt, MyProposal.docx, and Image1.jpg. A - subdirectory under "flat" called SupportFiles will contain all the files - in the "c:\SupportFiles" directory on disk. - - - String[] itemnames= { - "c:\\fixedContent\\Readme.txt", - "MyProposal.docx", - "c:\\SupportFiles", // a directory - "images\\Image1.jpg" - }; - - try - { - using (ZipFile zip = new ZipFile()) - { - for (int i = 1; i < itemnames.Length; i++) - { - // will add Files or Dirs, recurses and flattens subdirectories - zip.AddItem(itemnames[i],"flat"); - } - zip.Save(ZipToCreate); - } - } - catch (System.Exception ex1) - { - System.Console.Error.WriteLine("exception: {0}", ex1); - } - - - - Dim itemnames As String() = _ - New String() { "c:\fixedContent\Readme.txt", _ - "MyProposal.docx", _ - "SupportFiles", _ - "images\Image1.jpg" } - Try - Using zip As New ZipFile - Dim i As Integer - For i = 1 To itemnames.Length - 1 - ' will add Files or Dirs, recursing and flattening subdirectories. - zip.AddItem(itemnames(i), "flat") - Next i - zip.Save(ZipToCreate) - End Using - Catch ex1 As Exception - Console.Error.WriteLine("exception: {0}", ex1.ToString()) - End Try - - - The ZipEntry added. - - - - Adds a File to a Zip file archive. - - - - - This call collects metadata for the named file in the filesystem, - including the file attributes and the timestamp, and inserts that metadata - into the resulting ZipEntry. Only when the application calls Save() on - the ZipFile, does DotNetZip read the file from the filesystem and - then write the content to the zip file archive. - - - - This method will throw an exception if an entry with the same name already - exists in the ZipFile. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - - In this example, three files are added to a Zip archive. The ReadMe.txt - file will be placed in the root of the archive. The .png file will be - placed in a folder within the zip called photos\personal. The pdf file - will be included into a folder within the zip called Desktop. - - - try - { - using (ZipFile zip = new ZipFile()) - { - zip.AddFile("c:\\photos\\personal\\7440-N49th.png"); - zip.AddFile("c:\\Desktop\\2008-Regional-Sales-Report.pdf"); - zip.AddFile("ReadMe.txt"); - - zip.Save("Package.zip"); - } - } - catch (System.Exception ex1) - { - System.Console.Error.WriteLine("exception: " + ex1); - } - - - - Try - Using zip As ZipFile = New ZipFile - zip.AddFile("c:\photos\personal\7440-N49th.png") - zip.AddFile("c:\Desktop\2008-Regional-Sales-Report.pdf") - zip.AddFile("ReadMe.txt") - zip.Save("Package.zip") - End Using - Catch ex1 As Exception - Console.Error.WriteLine("exception: {0}", ex1.ToString) - End Try - - - - This method has two overloads. - - - - - - - The name of the file to add. It should refer to a file in the filesystem. - The name of the file may be a relative path or a fully-qualified path. - - The ZipEntry corresponding to the File added. - - - - Adds a File to a Zip file archive, potentially overriding the path to be - used within the zip archive. - - - - - The file added by this call to the ZipFile is not written to the - zip file archive until the application calls Save() on the ZipFile. - - - - This method will throw an exception if an entry with the same name already - exists in the ZipFile. - - - - This version of the method allows the caller to explicitly specify the - directory path to be used in the archive. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - - In this example, three files are added to a Zip archive. The ReadMe.txt - file will be placed in the root of the archive. The .png file will be - placed in a folder within the zip called images. The pdf file will be - included into a folder within the zip called files\docs, and will be - encrypted with the given password. - - - try - { - using (ZipFile zip = new ZipFile()) - { - // the following entry will be inserted at the root in the archive. - zip.AddFile("c:\\datafiles\\ReadMe.txt", ""); - // this image file will be inserted into the "images" directory in the archive. - zip.AddFile("c:\\photos\\personal\\7440-N49th.png", "images"); - // the following will result in a password-protected file called - // files\\docs\\2008-Regional-Sales-Report.pdf in the archive. - zip.Password = "EncryptMe!"; - zip.AddFile("c:\\Desktop\\2008-Regional-Sales-Report.pdf", "files\\docs"); - zip.Save("Archive.zip"); - } - } - catch (System.Exception ex1) - { - System.Console.Error.WriteLine("exception: {0}", ex1); - } - - - - Try - Using zip As ZipFile = New ZipFile - ' the following entry will be inserted at the root in the archive. - zip.AddFile("c:\datafiles\ReadMe.txt", "") - ' this image file will be inserted into the "images" directory in the archive. - zip.AddFile("c:\photos\personal\7440-N49th.png", "images") - ' the following will result in a password-protected file called - ' files\\docs\\2008-Regional-Sales-Report.pdf in the archive. - zip.Password = "EncryptMe!" - zip.AddFile("c:\Desktop\2008-Regional-Sales-Report.pdf", "files\documents") - zip.Save("Archive.zip") - End Using - Catch ex1 As Exception - Console.Error.WriteLine("exception: {0}", ex1) - End Try - - - - - - - - - The name of the file to add. The name of the file may be a relative path - or a fully-qualified path. - - - - Specifies a directory path to use to override any path in the fileName. - This path may, or may not, correspond to a real directory in the current - filesystem. If the files within the zip are later extracted, this is the - path used for the extracted file. Passing null (Nothing in - VB) will use the path on the fileName, if any. Passing the empty string - ("") will insert the item at the root path within the archive. - - - The ZipEntry corresponding to the file added. - - - - This method removes a collection of entries from the ZipFile. - - - - A collection of ZipEntry instances from this zip file to be removed. For - example, you can pass in an array of ZipEntry instances; or you can call - SelectEntries(), and then add or remove entries from that - ICollection<ZipEntry> (ICollection(Of ZipEntry) in VB), and pass - that ICollection to this method. - - - - - - - - This method removes a collection of entries from the ZipFile, by name. - - - - A collection of strings that refer to names of entries to be removed - from the ZipFile. For example, you can pass in an array or a - List of Strings that provide the names of entries to be removed. - - - - - - - - This method adds a set of files to the ZipFile. - - - - - Use this method to add a set of files to the zip archive, in one call. - For example, a list of files received from - System.IO.Directory.GetFiles() can be added to a zip archive in one - call. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to each - ZipEntry added. - - - - - The collection of names of the files to add. Each string should refer to a - file in the filesystem. The name of the file may be a relative path or a - fully-qualified path. - - - - This example shows how to create a zip file, and add a few files into it. - - String ZipFileToCreate = "archive1.zip"; - String DirectoryToZip = "c:\\reports"; - using (ZipFile zip = new ZipFile()) - { - // Store all files found in the top level directory, into the zip archive. - String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); - zip.AddFiles(filenames); - zip.Save(ZipFileToCreate); - } - - - - Dim ZipFileToCreate As String = "archive1.zip" - Dim DirectoryToZip As String = "c:\reports" - Using zip As ZipFile = New ZipFile - ' Store all files found in the top level directory, into the zip archive. - Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) - zip.AddFiles(filenames) - zip.Save(ZipFileToCreate) - End Using - - - - - - - - Adds or updates a set of files in the ZipFile. - - - - - Any files that already exist in the archive are updated. Any files that - don't yet exist in the archive are added. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to each - ZipEntry added. - - - - - The collection of names of the files to update. Each string should refer to a file in - the filesystem. The name of the file may be a relative path or a fully-qualified path. - - - - - - Adds a set of files to the ZipFile, using the - specified directory path in the archive. - - - - - Any directory structure that may be present in the - filenames contained in the list is "flattened" in the - archive. Each file in the list is added to the archive in - the specified top-level directory. - - - - For ZipFile properties including , , , , , , and , their respective values at the - time of this call will be applied to each ZipEntry added. - - - - - The names of the files to add. Each string should refer to - a file in the filesystem. The name of the file may be a - relative path or a fully-qualified path. - - - - Specifies a directory path to use to override any path in the file name. - Th is path may, or may not, correspond to a real directory in the current - filesystem. If the files within the zip are later extracted, this is the - path used for the extracted file. Passing null (Nothing in - VB) will use the path on each of the fileNames, if any. Passing - the empty string ("") will insert the item at the root path within the - archive. - - - - - - - Adds a set of files to the ZipFile, using the specified directory - path in the archive, and preserving the full directory structure in the - filenames. - - - - - - Think of the as a "root" or - base directory used in the archive for the files that get added. when - is true, the hierarchy of files - found in the filesystem will be placed, with the hierarchy intact, - starting at that root in the archive. When preserveDirHierarchy - is false, the path hierarchy of files is flattned, and the flattened - set of files gets placed in the root within the archive as specified in - directoryPathInArchive. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to each - ZipEntry added. - - - - - - The names of the files to add. Each string should refer to a file in the - filesystem. The name of the file may be a relative path or a - fully-qualified path. - - - - Specifies a directory path to use as a prefix for each entry name. - This path may, or may not, correspond to a real directory in the current - filesystem. If the files within the zip are later extracted, this is the - path used for the extracted file. Passing null (Nothing in - VB) will use the path on each of the fileNames, if any. Passing - the empty string ("") will insert the item at the root path within the - archive. - - - - whether the entries in the zip archive will reflect the directory - hierarchy that is present in the various filenames. For example, if - includes two paths, - \Animalia\Chordata\Mammalia\Info.txt and - \Plantae\Magnoliophyta\Dicotyledon\Info.txt, then calling this method - with = false will - result in an exception because of a duplicate entry name, while - calling this method with = - true will result in the full direcory paths being included in - the entries added to the ZipFile. - - - - - - Adds or updates a set of files to the ZipFile, using the specified - directory path in the archive. - - - - - - Any files that already exist in the archive are updated. Any files that - don't yet exist in the archive are added. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to each - ZipEntry added. - - - - - The names of the files to add or update. Each string should refer to a - file in the filesystem. The name of the file may be a relative path or a - fully-qualified path. - - - - Specifies a directory path to use to override any path in the file name. - This path may, or may not, correspond to a real directory in the current - filesystem. If the files within the zip are later extracted, this is the - path used for the extracted file. Passing null (Nothing in - VB) will use the path on each of the fileNames, if any. Passing - the empty string ("") will insert the item at the root path within the - archive. - - - - - - - Adds or Updates a File in a Zip file archive. - - - - - This method adds a file to a zip archive, or, if the file already exists - in the zip archive, this method Updates the content of that given filename - in the zip archive. The UpdateFile method might more accurately be - called "AddOrUpdateFile". - - - - Upon success, there is no way for the application to learn whether the file - was added versus updated. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - This example shows how to Update an existing entry in a zipfile. The first - call to UpdateFile adds the file to the newly-created zip archive. The - second call to UpdateFile updates the content for that file in the zip - archive. - - - using (ZipFile zip1 = new ZipFile()) - { - // UpdateFile might more accurately be called "AddOrUpdateFile" - zip1.UpdateFile("MyDocuments\\Readme.txt"); - zip1.UpdateFile("CustomerList.csv"); - zip1.Comment = "This zip archive has been created."; - zip1.Save("Content.zip"); - } - - using (ZipFile zip2 = ZipFile.Read("Content.zip")) - { - zip2.UpdateFile("Updates\\Readme.txt"); - zip2.Comment = "This zip archive has been updated: The Readme.txt file has been changed."; - zip2.Save(); - } - - - - Using zip1 As New ZipFile - ' UpdateFile might more accurately be called "AddOrUpdateFile" - zip1.UpdateFile("MyDocuments\Readme.txt") - zip1.UpdateFile("CustomerList.csv") - zip1.Comment = "This zip archive has been created." - zip1.Save("Content.zip") - End Using - - Using zip2 As ZipFile = ZipFile.Read("Content.zip") - zip2.UpdateFile("Updates\Readme.txt") - zip2.Comment = "This zip archive has been updated: The Readme.txt file has been changed." - zip2.Save - End Using - - - - - - - - - The name of the file to add or update. It should refer to a file in the - filesystem. The name of the file may be a relative path or a - fully-qualified path. - - - - The ZipEntry corresponding to the File that was added or updated. - - - - - Adds or Updates a File in a Zip file archive. - - - - - This method adds a file to a zip archive, or, if the file already exists - in the zip archive, this method Updates the content of that given filename - in the zip archive. - - - - This version of the method allows the caller to explicitly specify the - directory path to be used in the archive. The entry to be added or - updated is found by using the specified directory path, combined with the - basename of the specified filename. - - - - Upon success, there is no way for the application to learn if the file was - added versus updated. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - - - - The name of the file to add or update. It should refer to a file in the - filesystem. The name of the file may be a relative path or a - fully-qualified path. - - - - Specifies a directory path to use to override any path in the - fileName. This path may, or may not, correspond to a real - directory in the current filesystem. If the files within the zip are - later extracted, this is the path used for the extracted file. Passing - null (Nothing in VB) will use the path on the - fileName, if any. Passing the empty string ("") will insert the - item at the root path within the archive. - - - - The ZipEntry corresponding to the File that was added or updated. - - - - - Add or update a directory in a zip archive. - - - - If the specified directory does not exist in the archive, then this method - is equivalent to calling AddDirectory(). If the specified - directory already exists in the archive, then this method updates any - existing entries, and adds any new entries. Any entries that are in the - zip archive but not in the specified directory, are left alone. In other - words, the contents of the zip file will be a union of the previous - contents and the new files. - - - - - - - - The path to the directory to be added to the zip archive, or updated in - the zip archive. - - - - The ZipEntry corresponding to the Directory that was added or updated. - - - - - Add or update a directory in the zip archive at the specified root - directory in the archive. - - - - If the specified directory does not exist in the archive, then this method - is equivalent to calling AddDirectory(). If the specified - directory already exists in the archive, then this method updates any - existing entries, and adds any new entries. Any entries that are in the - zip archive but not in the specified directory, are left alone. In other - words, the contents of the zip file will be a union of the previous - contents and the new files. - - - - - - - - The path to the directory to be added to the zip archive, or updated - in the zip archive. - - - - Specifies a directory path to use to override any path in the - directoryName. This path may, or may not, correspond to a real - directory in the current filesystem. If the files within the zip are - later extracted, this is the path used for the extracted file. Passing - null (Nothing in VB) will use the path on the - directoryName, if any. Passing the empty string ("") will insert - the item at the root path within the archive. - - - - The ZipEntry corresponding to the Directory that was added or updated. - - - - - Add or update a file or directory in the zip archive. - - - - - This is useful when the application is not sure or does not care if the - item to be added is a file or directory, and does not know or does not - care if the item already exists in the ZipFile. Calling this method - is equivalent to calling RemoveEntry() if an entry by the same name - already exists, followed calling by AddItem(). - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - - - - the path to the file or directory to be added or updated. - - - - - Add or update a file or directory. - - - - - This method is useful when the application is not sure or does not care if - the item to be added is a file or directory, and does not know or does not - care if the item already exists in the ZipFile. Calling this method - is equivalent to calling RemoveEntry(), if an entry by that name - exists, and then calling AddItem(). - - - - This version of the method allows the caller to explicitly specify the - directory path to be used for the item being added to the archive. The - entry or entries that are added or updated will use the specified - DirectoryPathInArchive. Extracting the entry from the archive will - result in a file stored in that directory path. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - - - - The path for the File or Directory to be added or updated. - - - Specifies a directory path to use to override any path in the - itemName. This path may, or may not, correspond to a real - directory in the current filesystem. If the files within the zip are - later extracted, this is the path used for the extracted file. Passing - null (Nothing in VB) will use the path on the - itemName, if any. Passing the empty string ("") will insert the - item at the root path within the archive. - - - - - Adds a named entry into the zip archive, taking content for the entry - from a string. - - - - Calling this method creates an entry using the given fileName and - directory path within the archive. There is no need for a file by the - given name to exist in the filesystem; the name is used within the zip - archive only. The content for the entry is encoded using the default text - encoding for the machine. - - - - The content of the file, should it be extracted from the zip. - - - - The name, including any path, to use for the entry within the archive. - - - The ZipEntry added. - - - - This example shows how to add an entry to the zipfile, using a string as - content for that entry. - - - string Content = "This string will be the content of the Readme.txt file in the zip archive."; - using (ZipFile zip1 = new ZipFile()) - { - zip1.AddFile("MyDocuments\\Resume.doc", "files"); - zip1.AddEntry("Readme.txt", Content); - zip1.Comment = "This zip file was created at " + System.DateTime.Now.ToString("G"); - zip1.Save("Content.zip"); - } - - - - Public Sub Run() - Dim Content As String = "This string will be the content of the Readme.txt file in the zip archive." - Using zip1 As ZipFile = New ZipFile - zip1.AddEntry("Readme.txt", Content) - zip1.AddFile("MyDocuments\Resume.doc", "files") - zip1.Comment = ("This zip file was created at " & DateTime.Now.ToString("G")) - zip1.Save("Content.zip") - End Using - End Sub - - - - - - Adds a named entry into the zip archive, taking content for the entry - from a string, and using the specified text encoding. - - - - - - Calling this method creates an entry using the given fileName and - directory path within the archive. There is no need for a file by the - given name to exist in the filesystem; the name is used within the zip - archive only. - - - - The content for the entry, a string value, is encoded using the given - text encoding. A BOM (byte-order-mark) is emitted into the file, if the - Encoding parameter is set for that. - - - - Most Encoding classes support a constructor that accepts a boolean, - indicating whether to emit a BOM or not. For example see . - - - - - - The name, including any path, to use within the archive for the entry. - - - - The content of the file, should it be extracted from the zip. - - - - The text encoding to use when encoding the string. Be aware: This is - distinct from the text encoding used to encode the fileName, as specified - in . - - - The ZipEntry added. - - - - - Create an entry in the ZipFile using the given Stream - as input. The entry will have the given filename. - - - - - - The application should provide an open, readable stream; in this case it - will be read during the call to or one of - its overloads. - - - - The passed stream will be read from its current position. If - necessary, callers should set the position in the stream before - calling AddEntry(). This might be appropriate when using this method - with a MemoryStream, for example. - - - - In cases where a large number of streams will be added to the - ZipFile, the application may wish to avoid maintaining all of the - streams open simultaneously. To handle this situation, the application - should use the - overload. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - - This example adds a single entry to a ZipFile via a Stream. - - - - String zipToCreate = "Content.zip"; - String fileNameInArchive = "Content-From-Stream.bin"; - using (System.IO.Stream streamToRead = MyStreamOpener()) - { - using (ZipFile zip = new ZipFile()) - { - ZipEntry entry= zip.AddEntry(fileNameInArchive, streamToRead); - zip.AddFile("Readme.txt"); - zip.Save(zipToCreate); // the stream is read implicitly here - } - } - - - - Dim zipToCreate As String = "Content.zip" - Dim fileNameInArchive As String = "Content-From-Stream.bin" - Using streamToRead as System.IO.Stream = MyStreamOpener() - Using zip As ZipFile = New ZipFile() - Dim entry as ZipEntry = zip.AddEntry(fileNameInArchive, streamToRead) - zip.AddFile("Readme.txt") - zip.Save(zipToCreate) '' the stream is read implicitly, here - End Using - End Using - - - - - - - The name, including any path, which is shown in the zip file for the added - entry. - - - The input stream from which to grab content for the file - - The ZipEntry added. - - - - Add a ZipEntry for which content is written directly by the application. - - - - - When the application needs to write the zip entry data, use this - method to add the ZipEntry. For example, in the case that the - application wishes to write the XML representation of a DataSet into - a ZipEntry, the application can use this method to do so. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - About progress events: When using the WriteDelegate, DotNetZip does - not issue any SaveProgress events with EventType = - Saving_EntryBytesRead. (This is because it is the - application's code that runs in WriteDelegate - there's no way for - DotNetZip to know when to issue a EntryBytesRead event.) - Applications that want to update a progress bar or similar status - indicator should do so from within the WriteDelegate - itself. DotNetZip will issue the other SaveProgress events, - including - Saving_Started, - - Saving_BeforeWriteEntry, and - Saving_AfterWriteEntry. - - - - Note: When you use PKZip encryption, it's normally necessary to - compute the CRC of the content to be encrypted, before compressing or - encrypting it. Therefore, when using PKZip encryption with a - WriteDelegate, the WriteDelegate CAN BE called twice: once to compute - the CRC, and the second time to potentially compress and - encrypt. Surprising, but true. This is because PKWARE specified that - the encryption initialization data depends on the CRC. - If this happens, for each call of the delegate, your - application must stream the same entry data in its entirety. If your - application writes different data during the second call, it will - result in a corrupt zip file. - - - - The double-read behavior happens with all types of entries, not only - those that use WriteDelegate. It happens if you add an entry from a - filesystem file, or using a string, or a stream, or an opener/closer - pair. But in those cases, DotNetZip takes care of reading twice; in - the case of the WriteDelegate, the application code gets invoked - twice. Be aware. - - - - As you can imagine, this can cause performance problems for large - streams, and it can lead to correctness problems when you use a - WriteDelegate. This is a pretty big pitfall. There are two - ways to avoid it. First, and most preferred: don't use PKZIP - encryption. If you use the WinZip AES encryption, this problem - doesn't occur, because the encryption protocol doesn't require the CRC - up front. Second: if you do choose to use PKZIP encryption, write out - to a non-seekable stream (like standard output, or the - Response.OutputStream in an ASP.NET application). In this case, - DotNetZip will use an alternative encryption protocol that does not - rely on the CRC of the content. This also implies setting bit 3 in - the zip entry, which still presents problems for some zip tools. - - - - In the future I may modify DotNetZip to *always* use bit 3 when PKZIP - encryption is in use. This seems like a win overall, but there will - be some work involved. If you feel strongly about it, visit the - DotNetZip forums and vote up the Workitem - tracking this issue. - - - - - the name of the entry to add - the delegate which will write the entry content - the ZipEntry added - - - - This example shows an application filling a DataSet, then saving the - contents of that DataSet as XML, into a ZipEntry in a ZipFile, using an - anonymous delegate in C#. The DataSet XML is never saved to a disk file. - - - var c1= new System.Data.SqlClient.SqlConnection(connstring1); - var da = new System.Data.SqlClient.SqlDataAdapter() - { - SelectCommand= new System.Data.SqlClient.SqlCommand(strSelect, c1) - }; - - DataSet ds1 = new DataSet(); - da.Fill(ds1, "Invoices"); - - using(Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile()) - { - zip.AddEntry(zipEntryName, (name,stream) => ds1.WriteXml(stream) ); - zip.Save(zipFileName); - } - - - - - - This example uses an anonymous method in C# as the WriteDelegate to provide - the data for the ZipEntry. The example is a bit contrived - the - AddFile() method is a simpler way to insert the contents of a file - into an entry in a zip file. On the other hand, if there is some sort of - processing or transformation of the file contents required before writing, - the application could use the WriteDelegate to do it, in this way. - - - using (var input = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite )) - { - using(Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile()) - { - zip.AddEntry(zipEntryName, (name,output) => - { - byte[] buffer = new byte[BufferSize]; - int n; - while ((n = input.Read(buffer, 0, buffer.Length)) != 0) - { - // could transform the data here... - output.Write(buffer, 0, n); - // could update a progress bar here - } - }); - - zip.Save(zipFileName); - } - } - - - - - - This example uses a named delegate in VB to write data for the given - ZipEntry (VB9 does not have anonymous delegates). The example here is a bit - contrived - a simpler way to add the contents of a file to a ZipEntry is to - simply use the appropriate AddFile() method. The key scenario for - which the WriteDelegate makes sense is saving a DataSet, in XML - format, to the zip file. The DataSet can write XML to a stream, and the - WriteDelegate is the perfect place to write into the zip file. There may be - other data structures that can write to a stream, but cannot be read as a - stream. The WriteDelegate would be appropriate for those cases as - well. - - - Private Sub WriteEntry (ByVal name As String, ByVal output As Stream) - Using input As FileStream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) - Dim n As Integer = -1 - Dim buffer As Byte() = New Byte(BufferSize){} - Do While n <> 0 - n = input.Read(buffer, 0, buffer.Length) - output.Write(buffer, 0, n) - Loop - End Using - End Sub - - Public Sub Run() - Using zip = New ZipFile - zip.AddEntry(zipEntryName, New WriteDelegate(AddressOf WriteEntry)) - zip.Save(zipFileName) - End Using - End Sub - - - - - - Add an entry, for which the application will provide a stream - containing the entry data, on a just-in-time basis. - - - - - In cases where the application wishes to open the stream that - holds the content for the ZipEntry, on a just-in-time basis, the - application can use this method. The application provides an - opener delegate that will be called by the DotNetZip library to - obtain a readable stream that can be read to get the bytes for - the given entry. Typically, this delegate opens a stream. - Optionally, the application can provide a closer delegate as - well, which will be called by DotNetZip when all bytes have been - read from the entry. - - - - These delegates are called from within the scope of the call to - ZipFile.Save(). - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - - This example uses anonymous methods in C# to open and close the - source stream for the content for a zip entry. - - - using(Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile()) - { - zip.AddEntry(zipEntryName, - (name) => File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite ), - (name, stream) => stream.Close() - ); - - zip.Save(zipFileName); - } - - - - - - - This example uses delegates in VB.NET to open and close the - the source stream for the content for a zip entry. VB 9.0 lacks - support for "Sub" lambda expressions, and so the CloseDelegate must - be an actual, named Sub. - - - - Function MyStreamOpener(ByVal entryName As String) As Stream - '' This simply opens a file. You probably want to do somethinig - '' more involved here: open a stream to read from a database, - '' open a stream on an HTTP connection, and so on. - Return File.OpenRead(entryName) - End Function - - Sub MyStreamCloser(entryName As String, stream As Stream) - stream.Close() - End Sub - - Public Sub Run() - Dim dirToZip As String = "fodder" - Dim zipFileToCreate As String = "Archive.zip" - Dim opener As OpenDelegate = AddressOf MyStreamOpener - Dim closer As CloseDelegate = AddressOf MyStreamCloser - Dim numFilestoAdd As Int32 = 4 - Using zip As ZipFile = New ZipFile - Dim i As Integer - For i = 0 To numFilesToAdd - 1 - zip.AddEntry(String.Format("content-{0:000}.txt"), opener, closer) - Next i - zip.Save(zipFileToCreate) - End Using - End Sub - - - - - the name of the entry to add - - the delegate that will be invoked by ZipFile.Save() to get the - readable stream for the given entry. ZipFile.Save() will call - read on this stream to obtain the data for the entry. This data - will then be compressed and written to the newly created zip - file. - - - the delegate that will be invoked to close the stream. This may - be null (Nothing in VB), in which case no call is makde to close - the stream. - - the ZipEntry added - - - - - Updates the given entry in the ZipFile, using the given - string as content for the ZipEntry. - - - - - - Calling this method is equivalent to removing the ZipEntry for - the given file name and directory path, if it exists, and then calling - . See the documentation for - that method for further explanation. The string content is encoded - using the default encoding for the machine. This encoding is distinct - from the encoding used for the filename itself. See - . - - - - - - The name, including any path, to use within the archive for the entry. - - - - The content of the file, should it be extracted from the zip. - - - The ZipEntry added. - - - - - Updates the given entry in the ZipFile, using the given string as - content for the ZipEntry. - - - - Calling this method is equivalent to removing the ZipEntry for the - given file name and directory path, if it exists, and then calling . See the - documentation for that method for further explanation. - - - - The name, including any path, to use within the archive for the entry. - - - - The content of the file, should it be extracted from the zip. - - - - The text encoding to use when encoding the string. Be aware: This is - distinct from the text encoding used to encode the filename. See . - - - The ZipEntry added. - - - - - Updates the given entry in the ZipFile, using the given delegate - as the source for content for the ZipEntry. - - - - Calling this method is equivalent to removing the ZipEntry for the - given file name and directory path, if it exists, and then calling . See the - documentation for that method for further explanation. - - - - The name, including any path, to use within the archive for the entry. - - - the delegate which will write the entry content. - - The ZipEntry added. - - - - - Updates the given entry in the ZipFile, using the given delegates - to open and close the stream that provides the content for the ZipEntry. - - - - Calling this method is equivalent to removing the ZipEntry for the - given file name and directory path, if it exists, and then calling . See the - documentation for that method for further explanation. - - - - The name, including any path, to use within the archive for the entry. - - - - the delegate that will be invoked to open the stream - - - the delegate that will be invoked to close the stream - - - The ZipEntry added or updated. - - - - - Updates the given entry in the ZipFile, using the given stream as - input, and the given filename and given directory Path. - - - - - Calling the method is equivalent to calling RemoveEntry() if an - entry by the same name already exists, and then calling AddEntry() - with the given fileName and stream. - - - - The stream must be open and readable during the call to - ZipFile.Save. You can dispense the stream on a just-in-time basis - using the property. Check the - documentation of that property for more information. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - - - - The name, including any path, to use within the archive for the entry. - - - The input stream from which to read file data. - The ZipEntry added. - - - - Add an entry into the zip archive using the given filename and - directory path within the archive, and the given content for the - file. No file is created in the filesystem. - - - The data to use for the entry. - - - The name, including any path, to use within the archive for the entry. - - - The ZipEntry added. - - - - Updates the given entry in the ZipFile, using the given byte - array as content for the entry. - - - - Calling this method is equivalent to removing the ZipEntry - for the given filename and directory path, if it exists, and then - calling . See the - documentation for that method for further explanation. - - - - The name, including any path, to use within the archive for the entry. - - - The content to use for the ZipEntry. - - The ZipEntry added. - - - - - Adds the contents of a filesystem directory to a Zip file archive. - - - - - - The name of the directory may be a relative path or a fully-qualified - path. Any files within the named directory are added to the archive. Any - subdirectories within the named directory are also added to the archive, - recursively. - - - - Top-level entries in the named directory will appear as top-level entries - in the zip archive. Entries in subdirectories in the named directory will - result in entries in subdirectories in the zip archive. - - - - If you want the entries to appear in a containing directory in the zip - archive itself, then you should call the AddDirectory() overload that - allows you to explicitly specify a directory path for use in the archive. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to each - ZipEntry added. - - - - - - - - - - This method has 2 overloads. - - The name of the directory to add. - The ZipEntry added. - - - - Adds the contents of a filesystem directory to a Zip file archive, - overriding the path to be used for entries in the archive. - - - - - The name of the directory may be a relative path or a fully-qualified - path. The add operation is recursive, so that any files or subdirectories - within the name directory are also added to the archive. - - - - Top-level entries in the named directory will appear as top-level entries - in the zip archive. Entries in subdirectories in the named directory will - result in entries in subdirectories in the zip archive. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to each - ZipEntry added. - - - - - - - In this code, calling the ZipUp() method with a value of "c:\reports" for - the directory parameter will result in a zip file structure in which all - entries are contained in a toplevel "reports" directory. - - - - public void ZipUp(string targetZip, string directory) - { - using (var zip = new ZipFile()) - { - zip.AddDirectory(directory, System.IO.Path.GetFileName(directory)); - zip.Save(targetZip); - } - } - - - - - - - - The name of the directory to add. - - - Specifies a directory path to use to override any path in the - DirectoryName. This path may, or may not, correspond to a real directory - in the current filesystem. If the zip is later extracted, this is the - path used for the extracted file or directory. Passing null - (Nothing in VB) or the empty string ("") will insert the items at - the root path within the archive. - - - The ZipEntry added. - - - - Creates a directory in the zip archive. - - - - - - Use this when you want to create a directory in the archive but there is - no corresponding filesystem representation for that directory. - - - - You will probably not need to do this in your code. One of the only times - you will want to do this is if you want an empty directory in the zip - archive. The reason: if you add a file to a zip archive that is stored - within a multi-level directory, all of the directory tree is implicitly - created in the zip archive. - - - - - - The name of the directory to create in the archive. - - The ZipEntry added. - - - - Checks a zip file to see if its directory is consistent. - - - - - - In cases of data error, the directory within a zip file can get out - of synch with the entries in the zip file. This method checks the - given zip file and returns true if this has occurred. - - - This method may take a long time to run for large zip files. - - - This method is not supported in the Reduced version of DotNetZip. - - - - Developers using COM can use the ComHelper.CheckZip(String) - method. - - - - - The filename to of the zip file to check. - - true if the named zip file checks OK. Otherwise, false. - - - - - - - Checks a zip file to see if its directory is consistent, - and optionally fixes the directory if necessary. - - - - - - In cases of data error, the directory within a zip file can get out of - synch with the entries in the zip file. This method checks the given - zip file, and returns true if this has occurred. It also optionally - fixes the zipfile, saving the fixed copy in Name_Fixed.zip. - - - - This method may take a long time to run for large zip files. It - will take even longer if the file actually needs to be fixed, and if - fixIfNecessary is true. - - - - This method is not supported in the Reduced version of DotNetZip. - - - - - The filename to of the zip file to check. - - If true, the method will fix the zip file if - necessary. - - - a TextWriter in which messages generated while checking will be written. - - - true if the named zip is OK; false if the file needs to be fixed. - - - - - - - Rewrite the directory within a zipfile. - - - - - - In cases of data error, the directory in a zip file can get out of - synch with the entries in the zip file. This method attempts to fix - the zip file if this has occurred. - - - This can take a long time for large zip files. - - This won't work if the zip file uses a non-standard - code page - neither IBM437 nor UTF-8. - - - This method is not supported in the Reduced or Compact Framework - versions of DotNetZip. - - - - Developers using COM can use the ComHelper.FixZipDirectory(String) - method. - - - - - The filename to of the zip file to fix. - - - - - - - Verify the password on a zip file. - - - - - Keep in mind that passwords in zipfiles are applied to - zip entries, not to the entire zip file. So testing a - zipfile for a particular password doesn't work in the - general case. On the other hand, it's often the case - that a single password will be used on all entries in a - zip file. This method works for that case. - - - There is no way to check a password without doing the - decryption. So this code decrypts and extracts the given - zipfile into - - - - The filename to of the zip file to fix. - - The password to check. - - a bool indicating whether the password matches. - - - - Provides a human-readable string with information about the ZipFile. - - - - - The information string contains 10 lines or so, about each ZipEntry, - describing whether encryption is in use, the compressed and uncompressed - length of the entry, the offset of the entry, and so on. As a result the - information string can be very long for zip files that contain many - entries. - - - This information is mostly useful for diagnostic purposes. - - - - - - Indicates whether to perform a full scan of the zip file when reading it. - - - - - - You almost never want to use this property. - - - - When reading a zip file, if this flag is true (True in - VB), the entire zip archive will be scanned and searched for entries. - For large archives, this can take a very, long time. The much more - efficient default behavior is to read the zip directory, which is - stored at the end of the zip file. But, in some cases the directory is - corrupted and you need to perform a full scan of the zip file to - determine the contents of the zip file. This property lets you do - that, when necessary. - - - - This flag is effective only when calling . Normally you would read a ZipFile with the - static ZipFile.Read - method. But you can't set the FullScan property on the - ZipFile instance when you use a static factory method like - ZipFile.Read. - - - - - - - This example shows how to read a zip file using the full scan approach, - and then save it, thereby producing a corrected zip file. - - - using (var zip = new ZipFile()) - { - zip.FullScan = true; - zip.Initialize(zipFileName); - zip.Save(newName); - } - - - - Using zip As New ZipFile - zip.FullScan = True - zip.Initialize(zipFileName) - zip.Save(newName) - End Using - - - - - - - Whether to sort the ZipEntries before saving the file. - - - - The default is false. If you have a large number of zip entries, the sort - alone can consume significant time. - - - - - using (var zip = new ZipFile()) - { - zip.AddFiles(filesToAdd); - zip.SortEntriesBeforeSaving = true; - zip.Save(name); - } - - - - Using zip As New ZipFile - zip.AddFiles(filesToAdd) - zip.SortEntriesBeforeSaving = True - zip.Save(name) - End Using - - - - - - - Indicates whether NTFS Reparse Points, like junctions, should be - traversed during calls to AddDirectory(). - - - - By default, calls to AddDirectory() will traverse NTFS reparse - points, like mounted volumes, and directory junctions. An example - of a junction is the "My Music" directory in Windows Vista. In some - cases you may not want DotNetZip to traverse those directories. In - that case, set this property to false. - - - - - using (var zip = new ZipFile()) - { - zip.AddDirectoryWillTraverseReparsePoints = false; - zip.AddDirectory(dirToZip,"fodder"); - zip.Save(zipFileToCreate); - } - - - - - - Size of the IO buffer used while saving. - - - - - - First, let me say that you really don't need to bother with this. It is - here to allow for optimizations that you probably won't make! It will work - fine if you don't set or get this property at all. Ok? - - - - Now that we have that out of the way, the fine print: This - property affects the size of the buffer that is used for I/O for each - entry contained in the zip file. When a file is read in to be compressed, - it uses a buffer given by the size here. When you update a zip file, the - data for unmodified entries is copied from the first zip file to the - other, through a buffer given by the size here. - - - - Changing the buffer size affects a few things: first, for larger buffer - sizes, the memory used by the ZipFile, obviously, will be larger - during I/O operations. This may make operations faster for very much - larger files. Last, for any given entry, when you use a larger buffer - there will be fewer progress events during I/O operations, because there's - one progress event generated for each time the buffer is filled and then - emptied. - - - - The default buffer size is 8k. Increasing the buffer size may speed - things up as you compress larger files. But there are no hard-and-fast - rules here, eh? You won't know til you test it. And there will be a - limit where ever larger buffers actually slow things down. So as I said - in the beginning, it's probably best if you don't set or get this property - at all. - - - - - - This example shows how you might set a large buffer size for efficiency when - dealing with zip entries that are larger than 1gb. - - using (ZipFile zip = new ZipFile()) - { - zip.SaveProgress += this.zip1_SaveProgress; - zip.AddDirectory(directoryToZip, ""); - zip.UseZip64WhenSaving = Zip64Option.Always; - zip.BufferSize = 65536*8; // 65536 * 8 = 512k - zip.Save(ZipFileToCreate); - } - - - - - - Size of the work buffer to use for the ZLIB codec during compression. - - - - - When doing ZLIB or Deflate compression, the library fills a buffer, - then passes it to the compressor for compression. Then the library - reads out the compressed bytes. This happens repeatedly until there - is no more uncompressed data to compress. This property sets the - size of the buffer that will be used for chunk-wise compression. In - order for the setting to take effect, your application needs to set - this property before calling one of the ZipFile.Save() - overloads. - - - Setting this affects the performance and memory efficiency of - compression and decompression. For larger files, setting this to a - larger size may improve compression performance, but the exact - numbers vary depending on available memory, the size of the streams - you are compressing, and a bunch of other variables. I don't have - good firm recommendations on how to set it. You'll have to test it - yourself. Or just leave it alone and accept the default. - - - - - - Indicates whether extracted files should keep their paths as - stored in the zip archive. - - - - - This property affects Extraction. It is not used when creating zip - archives. - - - - With this property set to false, the default, extracting entries - from a zip file will create files in the filesystem that have the full - path associated to the entry within the zip file. With this property set - to true, extracting entries from the zip file results in files - with no path: the folders are "flattened." - - - - An example: suppose the zip file contains entries /directory1/file1.txt and - /directory2/file2.txt. With FlattenFoldersOnExtract set to false, - the files created will be \directory1\file1.txt and \directory2\file2.txt. - With the property set to true, the files created are file1.txt and file2.txt. - - - - - - - The compression strategy to use for all entries. - - - - Set the Strategy used by the ZLIB-compatible compressor, when - compressing entries using the DEFLATE method. Different compression - strategies work better on different sorts of data. The strategy - parameter can affect the compression ratio and the speed of - compression but not the correctness of the compresssion. For more - information see Ionic.Zlib.CompressionStrategy. - - - - - The name of the ZipFile, on disk. - - - - - - When the ZipFile instance was created by reading an archive using - one of the ZipFile.Read methods, this property represents the name - of the zip file that was read. When the ZipFile instance was - created by using the no-argument constructor, this value is null - (Nothing in VB). - - - - If you use the no-argument constructor, and you then explicitly set this - property, when you call , this name will - specify the name of the zip file created. Doing so is equivalent to - calling . When instantiating a - ZipFile by reading from a stream or byte array, the Name - property remains null. When saving to a stream, the Name - property is implicitly set to null. - - - - - - Sets the compression level to be used for entries subsequently added to - the zip archive. - - - - - Varying the compression level used on entries can affect the - size-vs-speed tradeoff when compression and decompressing data streams - or files. - - - - As with some other properties on the ZipFile class, like , , and , setting this property on a ZipFile - instance will cause the specified CompressionLevel to be used on all - items that are subsequently added to the - ZipFile instance. If you set this property after you have added - items to the ZipFile, but before you have called Save(), - those items will not use the specified compression level. - - - - If you do not set this property, the default compression level is used, - which normally gives a good balance of compression efficiency and - compression speed. In some tests, using BestCompression can - double the time it takes to compress, while delivering just a small - increase in compression efficiency. This behavior will vary with the - type of data you compress. If you are in doubt, just leave this setting - alone, and accept the default. - - - - - - The compression method for the zipfile. - - - - By default, the compression method is CompressionMethod.Deflate. - - - - - - - A comment attached to the zip archive. - - - - - - This property is read/write. It allows the application to specify a - comment for the ZipFile, or read the comment for the - ZipFile. After setting this property, changes are only made - permanent when you call a Save() method. - - - - According to PKWARE's - zip specification, the comment is not encrypted, even if there is a - password set on the zip file. - - - - The specification does not describe how to indicate the encoding used - on a comment string. Many "compliant" zip tools and libraries use - IBM437 as the code page for comments; DotNetZip, too, follows that - practice. On the other hand, there are situations where you want a - Comment to be encoded with something else, for example using code page - 950 "Big-5 Chinese". To fill that need, DotNetZip will encode the - comment following the same procedure it follows for encoding - filenames: (a) if is - Never, it uses the default encoding (IBM437). (b) if is Always, it always uses the - alternate encoding (). (c) if is AsNecessary, it uses the - alternate encoding only if the default encoding is not sufficient for - encoding the comment - in other words if decoding the result does not - produce the original string. This decision is taken at the time of - the call to ZipFile.Save(). - - - - When creating a zip archive using this library, it is possible to change - the value of between each - entry you add, and between adding entries and the call to - Save(). Don't do this. It will likely result in a zip file that is - not readable by any tool or application. For best interoperability, leave - alone, or specify it only - once, before adding any entries to the ZipFile instance. - - - - - - - Specifies whether the Creation, Access, and Modified times for entries - added to the zip file will be emitted in “Windows format” - when the zip archive is saved. - - - - - An application creating a zip archive can use this flag to explicitly - specify that the file times for the entries should or should not be stored - in the zip archive in the format used by Windows. By default this flag is - true, meaning the Windows-format times are stored in the zip - archive. - - - - When adding an entry from a file or directory, the Creation (), Access (), and Modified () times for the given entry are - automatically set from the filesystem values. When adding an entry from a - stream or string, all three values are implicitly set to - DateTime.Now. Applications can also explicitly set those times by - calling . - - - - PKWARE's - zip specification describes multiple ways to format these times in a - zip file. One is the format Windows applications normally use: 100ns ticks - since January 1, 1601 UTC. The other is a format Unix applications typically - use: seconds since January 1, 1970 UTC. Each format can be stored in an - "extra field" in the zip entry when saving the zip archive. The former - uses an extra field with a Header Id of 0x000A, while the latter uses a - header ID of 0x5455, although you probably don't need to know that. - - - - Not all tools and libraries can interpret these fields. Windows - compressed folders is one that can read the Windows Format timestamps, - while I believe the Infozip - tools can read the Unix format timestamps. Some tools and libraries - may be able to read only one or the other. DotNetZip can read or write - times in either or both formats. - - - - The times stored are taken from , , and . - - - - The value set here applies to all entries subsequently added to the - ZipFile. - - - - This property is not mutually exclusive of the property. It is possible and - legal and valid to produce a zip file that contains timestamps encoded in - the Unix format as well as in the Windows format, in addition to the LastModified time attached to each - entry in the archive, a time that is always stored in "DOS format". And, - notwithstanding the names PKWare uses for these time formats, any of them - can be read and written by any computer, on any operating system. But, - there are no guarantees that a program running on Mac or Linux will - gracefully handle a zip file with "Windows" formatted times, or that an - application that does not use DotNetZip but runs on Windows will be able to - handle file times in Unix format. - - - - When in doubt, test. Sorry, I haven't got a complete list of tools and - which sort of timestamps they can use and will tolerate. If you get any - good information and would like to pass it on, please do so and I will - include that information in this documentation. - - - - - This example shows how to save a zip file that contains file timestamps - in a format normally used by Unix. - - using (var zip = new ZipFile()) - { - // produce a zip file the Mac will like - zip.EmitTimesInWindowsFormatWhenSaving = false; - zip.EmitTimesInUnixFormatWhenSaving = true; - zip.AddDirectory(directoryToZip, "files"); - zip.Save(outputFile); - } - - - - Using zip As New ZipFile - '' produce a zip file the Mac will like - zip.EmitTimesInWindowsFormatWhenSaving = False - zip.EmitTimesInUnixFormatWhenSaving = True - zip.AddDirectory(directoryToZip, "files") - zip.Save(outputFile) - End Using - - - - - - - - - Specifies whether the Creation, Access, and Modified times - for entries added to the zip file will be emitted in "Unix(tm) - format" when the zip archive is saved. - - - - - An application creating a zip archive can use this flag to explicitly - specify that the file times for the entries should or should not be stored - in the zip archive in the format used by Unix. By default this flag is - false, meaning the Unix-format times are not stored in the zip - archive. - - - - When adding an entry from a file or directory, the Creation (), Access (), and Modified () times for the given entry are - automatically set from the filesystem values. When adding an entry from a - stream or string, all three values are implicitly set to DateTime.Now. - Applications can also explicitly set those times by calling . - - - - PKWARE's - zip specification describes multiple ways to format these times in a - zip file. One is the format Windows applications normally use: 100ns ticks - since January 1, 1601 UTC. The other is a format Unix applications - typically use: seconds since January 1, 1970 UTC. Each format can be - stored in an "extra field" in the zip entry when saving the zip - archive. The former uses an extra field with a Header Id of 0x000A, while - the latter uses a header ID of 0x5455, although you probably don't need to - know that. - - - - Not all tools and libraries can interpret these fields. Windows - compressed folders is one that can read the Windows Format timestamps, - while I believe the Infozip - tools can read the Unix format timestamps. Some tools and libraries may be - able to read only one or the other. DotNetZip can read or write times in - either or both formats. - - - - The times stored are taken from , , and . - - - - This property is not mutually exclusive of the property. It is possible and - legal and valid to produce a zip file that contains timestamps encoded in - the Unix format as well as in the Windows format, in addition to the LastModified time attached to each - entry in the zip archive, a time that is always stored in "DOS - format". And, notwithstanding the names PKWare uses for these time - formats, any of them can be read and written by any computer, on any - operating system. But, there are no guarantees that a program running on - Mac or Linux will gracefully handle a zip file with "Windows" formatted - times, or that an application that does not use DotNetZip but runs on - Windows will be able to handle file times in Unix format. - - - - When in doubt, test. Sorry, I haven't got a complete list of tools and - which sort of timestamps they can use and will tolerate. If you get any - good information and would like to pass it on, please do so and I will - include that information in this documentation. - - - - - - - - - Indicates whether verbose output is sent to the during AddXxx() and - ReadXxx() operations. - - - - This is a synthetic property. It returns true if the is non-null. - - - - - Returns true if an entry by the given name exists in the ZipFile. - - - the name of the entry to find - true if an entry with the given name exists; otherwise false. - - - - - Indicates whether to perform case-sensitive matching on the filename when - retrieving entries in the zipfile via the string-based indexer. - - - - The default value is false, which means don't do case-sensitive - matching. In other words, retrieving zip["ReadMe.Txt"] is the same as - zip["readme.txt"]. It really makes sense to set this to true only - if you are not running on Windows, which has case-insensitive - filenames. But since this library is not built for non-Windows platforms, - in most cases you should just leave this property alone. - - - - - Indicates whether to ignore duplicate files (report only the first entry) - when loading a zipfile. - - - - The default value is false, which will try to make all files - available (duplicates will have a "copy" suffix appended to their name). - Setting this to true prior to using Initialize to read a - zipfile will prevent this and instead just ignore the duplicates. - - - - - Indicates whether to encode entry filenames and entry comments using Unicode - (UTF-8). - - - - - The - PKWare zip specification provides for encoding file names and file - comments in either the IBM437 code page, or in UTF-8. This flag selects - the encoding according to that specification. By default, this flag is - false, and filenames and comments are encoded into the zip file in the - IBM437 codepage. Setting this flag to true will specify that filenames - and comments that cannot be encoded with IBM437 will be encoded with - UTF-8. - - - - Zip files created with strict adherence to the PKWare specification with - respect to UTF-8 encoding can contain entries with filenames containing - any combination of Unicode characters, including the full range of - characters from Chinese, Latin, Hebrew, Greek, Cyrillic, and many other - alphabets. However, because at this time, the UTF-8 portion of the PKWare - specification is not broadly supported by other zip libraries and - utilities, such zip files may not be readable by your favorite zip tool or - archiver. In other words, interoperability will decrease if you set this - flag to true. - - - - In particular, Zip files created with strict adherence to the PKWare - specification with respect to UTF-8 encoding will not work well with - Explorer in Windows XP or Windows Vista, because Windows compressed - folders, as far as I know, do not support UTF-8 in zip files. Vista can - read the zip files, but shows the filenames incorrectly. Unpacking from - Windows Vista Explorer will result in filenames that have rubbish - characters in place of the high-order UTF-8 bytes. - - - - Also, zip files that use UTF-8 encoding will not work well with Java - applications that use the java.util.zip classes, as of v5.0 of the Java - runtime. The Java runtime does not correctly implement the PKWare - specification in this regard. - - - - As a result, we have the unfortunate situation that "correct" behavior by - the DotNetZip library with regard to Unicode encoding of filenames during - zip creation will result in zip files that are readable by strictly - compliant and current tools (for example the most recent release of the - commercial WinZip tool); but these zip files will not be readable by - various other tools or libraries, including Windows Explorer. - - - - The DotNetZip library can read and write zip files with UTF8-encoded - entries, according to the PKware spec. If you use DotNetZip for both - creating and reading the zip file, and you use UTF-8, there will be no - loss of information in the filenames. For example, using a self-extractor - created by this library will allow you to unpack files correctly with no - loss of information in the filenames. - - - - If you do not set this flag, it will remain false. If this flag is false, - your ZipFile will encode all filenames and comments using the - IBM437 codepage. This can cause "loss of information" on some filenames, - but the resulting zipfile will be more interoperable with other - utilities. As an example of the loss of information, diacritics can be - lost. The o-tilde character will be down-coded to plain o. The c with a - cedilla (Unicode 0xE7) used in Portugese will be downcoded to a c. - Likewise, the O-stroke character (Unicode 248), used in Danish and - Norwegian, will be down-coded to plain o. Chinese characters cannot be - represented in codepage IBM437; when using the default encoding, Chinese - characters in filenames will be represented as ?. These are all examples - of "information loss". - - - - The loss of information associated to the use of the IBM437 encoding is - inconvenient, and can also lead to runtime errors. For example, using - IBM437, any sequence of 4 Chinese characters will be encoded as ????. If - your application creates a ZipFile, then adds two files, each with - names of four Chinese characters each, this will result in a duplicate - filename exception. In the case where you add a single file with a name - containing four Chinese characters, calling Extract() on the entry that - has question marks in the filename will result in an exception, because - the question mark is not legal for use within filenames on Windows. These - are just a few examples of the problems associated to loss of information. - - - - This flag is independent of the encoding of the content within the entries - in the zip file. Think of the zip file as a container - it supports an - encoding. Within the container are other "containers" - the file entries - themselves. The encoding within those entries is independent of the - encoding of the zip archive container for those entries. - - - - Rather than specify the encoding in a binary fashion using this flag, an - application can specify an arbitrary encoding via the property. Setting the encoding - explicitly when creating zip archives will result in non-compliant zip - files that, curiously, are fairly interoperable. The challenge is, the - PKWare specification does not provide for a way to specify that an entry - in a zip archive uses a code page that is neither IBM437 nor UTF-8. - Therefore if you set the encoding explicitly when creating a zip archive, - you must take care upon reading the zip archive to use the same code page. - If you get it wrong, the behavior is undefined and may result in incorrect - filenames, exceptions, stomach upset, hair loss, and acne. - - - - - - - Specify whether to use ZIP64 extensions when saving a zip archive. - - - - - - When creating a zip file, the default value for the property is . is - safest, in the sense that you will not get an Exception if a pre-ZIP64 - limit is exceeded. - - - - You may set the property at any time before calling Save(). - - - - When reading a zip file via the Zipfile.Read() method, DotNetZip - will properly read ZIP64-endowed zip archives, regardless of the value of - this property. DotNetZip will always read ZIP64 archives. This property - governs only whether DotNetZip will write them. Therefore, when updating - archives, be careful about setting this property after reading an archive - that may use ZIP64 extensions. - - - - An interesting question is, if you have set this property to - AsNecessary, and then successfully saved, does the resulting - archive use ZIP64 extensions or not? To learn this, check the property, after calling Save(). - - - - Have you thought about - donating? - - - - - - - - Indicates whether the archive requires ZIP64 extensions. - - - - - - This property is null (or Nothing in VB) if the archive has - not been saved, and there are fewer than 65334 ZipEntry items - contained in the archive. - - - - The Value is true if any of the following four conditions holds: - the uncompressed size of any entry is larger than 0xFFFFFFFF; the - compressed size of any entry is larger than 0xFFFFFFFF; the relative - offset of any entry within the zip archive is larger than 0xFFFFFFFF; or - there are more than 65534 entries in the archive. (0xFFFFFFFF = - 4,294,967,295). The result may not be known until a Save() is attempted - on the zip archive. The Value of this - property may be set only AFTER one of the Save() methods has been called. - - - - If none of the four conditions holds, and the archive has been saved, then - the Value is false. - - - - A Value of false does not indicate that the zip archive, as saved, - does not use ZIP64. It merely indicates that ZIP64 is not required. An - archive may use ZIP64 even when not required if the property is set to , or if the property is set to and the output stream was not - seekable. Use the property to determine if - the most recent Save() method resulted in an archive that utilized - the ZIP64 extensions. - - - - - - - - - Indicates whether the most recent Save() operation used ZIP64 extensions. - - - - - The use of ZIP64 extensions within an archive is not always necessary, and - for interoperability concerns, it may be desired to NOT use ZIP64 if - possible. The property can be - set to use ZIP64 extensions only when necessary. In those cases, - Sometimes applications want to know whether a Save() actually used ZIP64 - extensions. Applications can query this read-only property to learn - whether ZIP64 has been used in a just-saved ZipFile. - - - - The value is null (or Nothing in VB) if the archive has not - been saved. - - - - Non-null values (HasValue is true) indicate whether ZIP64 - extensions were used during the most recent Save() operation. The - ZIP64 extensions may have been used as required by any particular entry - because of its uncompressed or compressed size, or because the archive is - larger than 4294967295 bytes, or because there are more than 65534 entries - in the archive, or because the UseZip64WhenSaving property was set - to , or because the - UseZip64WhenSaving property was set to and the output stream was not seekable. - The value of this property does not indicate the reason the ZIP64 - extensions were used. - - - - - - - - - Indicates whether the most recent Read() operation read a zip file that uses - ZIP64 extensions. - - - - This property will return null (Nothing in VB) if you've added an entry after reading - the zip file. - - - - - The text encoding to use when writing new entries to the ZipFile, - for those entries that cannot be encoded with the default (IBM437) - encoding; or, the text encoding that was used when reading the entries - from the ZipFile. - - - - - In its - zip specification, PKWare describes two options for encoding - filenames and comments: using IBM437 or UTF-8. But, some archiving tools - or libraries do not follow the specification, and instead encode - characters using the system default code page. For example, WinRAR when - run on a machine in Shanghai may encode filenames with the Big-5 Chinese - (950) code page. This behavior is contrary to the Zip specification, but - it occurs anyway. - - - - When using DotNetZip to write zip archives that will be read by one of - these other archivers, set this property to specify the code page to use - when encoding the and for each ZipEntry in the zip file, for - values that cannot be encoded with the default codepage for zip files, - IBM437. This is why this property is "provisional". In all cases, IBM437 - is used where possible, in other words, where no loss of data would - result. It is possible, therefore, to have a given entry with a - Comment encoded in IBM437 and a FileName encoded with the - specified "provisional" codepage. - - - - Be aware that a zip file created after you've explicitly set the property to a value other than - IBM437 may not be compliant to the PKWare specification, and may not be - readable by compliant archivers. On the other hand, many (most?) - archivers are non-compliant and can read zip files created in arbitrary - code pages. The trick is to use or specify the proper codepage when - reading the zip. - - - - When creating a zip archive using this library, it is possible to change - the value of between each - entry you add, and between adding entries and the call to - Save(). Don't do this. It will likely result in a zipfile that is - not readable. For best interoperability, either leave alone, or specify it only once, - before adding any entries to the ZipFile instance. There is one - exception to this recommendation, described later. - - - - When using an arbitrary, non-UTF8 code page for encoding, there is no - standard way for the creator application - whether DotNetZip, WinZip, - WinRar, or something else - to formally specify in the zip file which - codepage has been used for the entries. As a result, readers of zip files - are not able to inspect the zip file and determine the codepage that was - used for the entries contained within it. It is left to the application - or user to determine the necessary codepage when reading zip files encoded - this way. In other words, if you explicitly specify the codepage when you - create the zipfile, you must explicitly specify the same codepage when - reading the zipfile. - - - - The way you specify the code page to use when reading a zip file varies - depending on the tool or library you use to read the zip. In DotNetZip, - you use a ZipFile.Read() method that accepts an encoding parameter. It - isn't possible with Windows Explorer, as far as I know, to specify an - explicit codepage to use when reading a zip. If you use an incorrect - codepage when reading a zipfile, you will get entries with filenames that - are incorrect, and the incorrect filenames may even contain characters - that are not legal for use within filenames in Windows. Extracting entries - with illegal characters in the filenames will lead to exceptions. It's too - bad, but this is just the way things are with code pages in zip - files. Caveat Emptor. - - - - Example: Suppose you create a zipfile that contains entries with - filenames that have Danish characters. If you use equal to "iso-8859-1" (cp 28591), - the filenames will be correctly encoded in the zip. But, to read that - zipfile correctly, you have to specify the same codepage at the time you - read it. If try to read that zip file with Windows Explorer or another - application that is not flexible with respect to the codepage used to - decode filenames in zipfiles, you will get a filename like "Inf�.txt". - - - - When using DotNetZip to read a zip archive, and the zip archive uses an - arbitrary code page, you must specify the encoding to use before or when - the Zipfile is READ. This means you must use a ZipFile.Read() - method that allows you to specify a System.Text.Encoding parameter. Setting - the ProvisionalAlternateEncoding property after your application has read in - the zip archive will not affect the entry names of entries that have already - been read in. - - - - And now, the exception to the rule described above. One strategy for - specifying the code page for a given zip file is to describe the code page - in a human-readable form in the Zip comment. For example, the comment may - read "Entries in this archive are encoded in the Big5 code page". For - maximum interoperability, the zip comment in this case should be encoded - in the default, IBM437 code page. In this case, the zip comment is - encoded using a different page than the filenames. To do this, Specify - ProvisionalAlternateEncoding to your desired region-specific code - page, once before adding any entries, and then reset - ProvisionalAlternateEncoding to IBM437 before setting the property and calling Save(). - - - - - This example shows how to read a zip file using the Big-5 Chinese code page - (950), and extract each entry in the zip file. For this code to work as - desired, the Zipfile must have been created using the big5 code page - (CP950). This is typical, for example, when using WinRar on a machine with - CP950 set as the default code page. In that case, the names of entries - within the Zip archive will be stored in that code page, and reading the zip - archive must be done using that code page. If the application did not use - the correct code page in ZipFile.Read(), then names of entries within the - zip archive would not be correctly retrieved. - - using (var zip = ZipFile.Read(zipFileName, System.Text.Encoding.GetEncoding("big5"))) - { - // retrieve and extract an entry using a name encoded with CP950 - zip[MyDesiredEntry].Extract("unpack"); - } - - - - Using zip As ZipFile = ZipFile.Read(ZipToExtract, System.Text.Encoding.GetEncoding("big5")) - ' retrieve and extract an entry using a name encoded with CP950 - zip(MyDesiredEntry).Extract("unpack") - End Using - - - - DefaultEncoding - - - - A Text Encoding to use when encoding the filenames and comments for - all the ZipEntry items, during a ZipFile.Save() operation. - - - - Whether the encoding specified here is used during the save depends - on . - - - - - - A flag that tells if and when this instance should apply - AlternateEncoding to encode the filenames and comments associated to - of ZipEntry objects contained within this instance. - - - - - Gets or sets the TextWriter to which status messages are delivered - for the instance. - - - - If the TextWriter is set to a non-null value, then verbose output is sent - to the TextWriter during Add, Read, Save and - Extract operations. Typically, console applications might use - Console.Out and graphical or headless applications might use a - System.IO.StringWriter. The output of this is suitable for viewing - by humans. - - - - - In this example, a console application instantiates a ZipFile, then - sets the StatusMessageTextWriter to Console.Out. At that - point, all verbose status messages for that ZipFile are sent to the - console. - - - - using (ZipFile zip= ZipFile.Read(FilePath)) - { - zip.StatusMessageTextWriter= System.Console.Out; - // messages are sent to the console during extraction - zip.ExtractAll(); - } - - - - Using zip As ZipFile = ZipFile.Read(FilePath) - zip.StatusMessageTextWriter= System.Console.Out - 'Status Messages will be sent to the console during extraction - zip.ExtractAll() - End Using - - - - In this example, a Windows Forms application instantiates a - ZipFile, then sets the StatusMessageTextWriter to a - StringWriter. At that point, all verbose status messages for that - ZipFile are sent to the StringWriter. - - - - var sw = new System.IO.StringWriter(); - using (ZipFile zip= ZipFile.Read(FilePath)) - { - zip.StatusMessageTextWriter= sw; - zip.ExtractAll(); - } - Console.WriteLine("{0}", sw.ToString()); - - - - Dim sw as New System.IO.StringWriter - Using zip As ZipFile = ZipFile.Read(FilePath) - zip.StatusMessageTextWriter= sw - zip.ExtractAll() - End Using - 'Status Messages are now available in sw - - - - - - - Gets or sets the name for the folder to store the temporary file - this library writes when saving a zip archive. - - - - - This library will create a temporary file when saving a Zip archive to a - file. This file is written when calling one of the Save() methods - that does not save to a stream, or one of the SaveSelfExtractor() - methods. - - - - By default, the library will create the temporary file in the directory - specified for the file itself, via the property or via - the method. - - - - Setting this property allows applications to override this default - behavior, so that the library will create the temporary file in the - specified folder. For example, to have the library create the temporary - file in the current working directory, regardless where the ZipFile - is saved, specfy ".". To revert to the default behavior, set this - property to null (Nothing in VB). - - - - When setting the property to a non-null value, the folder specified must - exist; if it does not an exception is thrown. The application should have - write and delete permissions on the folder. The permissions are not - explicitly checked ahead of time; if the application does not have the - appropriate rights, an exception will be thrown at the time Save() - is called. - - - - There is no temporary file created when reading a zip archive. When - saving to a Stream, there is no temporary file created. For example, if - the application is an ASP.NET application and calls Save() - specifying the Response.OutputStream as the output stream, there is - no temporary file created. - - - - - Thrown when setting the property if the directory does not exist. - - - - - - Sets the password to be used on the ZipFile instance. - - - - - - When writing a zip archive, this password is applied to the entries, not - to the zip archive itself. It applies to any ZipEntry subsequently - added to the ZipFile, using one of the AddFile, - AddDirectory, AddEntry, or AddItem methods, etc. - When reading a zip archive, this property applies to any entry - subsequently extracted from the ZipFile using one of the Extract - methods on the ZipFile class. - - - - When writing a zip archive, keep this in mind: though the password is set - on the ZipFile object, according to the Zip spec, the "directory" of the - archive - in other words the list of entries or files contained in the archive - is - not encrypted with the password, or protected in any way. If you set the - Password property, the password actually applies to individual entries - that are added to the archive, subsequent to the setting of this property. - The list of filenames in the archive that is eventually created will - appear in clear text, but the contents of the individual files are - encrypted. This is how Zip encryption works. - - - - One simple way around this limitation is to simply double-wrap sensitive - filenames: Store the files in a zip file, and then store that zip file - within a second, "outer" zip file. If you apply a password to the outer - zip file, then readers will be able to see that the outer zip file - contains an inner zip file. But readers will not be able to read the - directory or file list of the inner zip file. - - - - If you set the password on the ZipFile, and then add a set of files - to the archive, then each entry is encrypted with that password. You may - also want to change the password between adding different entries. If you - set the password, add an entry, then set the password to null - (Nothing in VB), and add another entry, the first entry is - encrypted and the second is not. If you call AddFile(), then set - the Password property, then call ZipFile.Save, the file - added will not be password-protected, and no warning will be generated. - - - - When setting the Password, you may also want to explicitly set the property, to specify how to encrypt the entries added - to the ZipFile. If you set the Password to a non-null value and do not - set , then PKZip 2.0 ("Weak") encryption is used. - This encryption is relatively weak but is very interoperable. If you set - the password to a null value (Nothing in VB), Encryption is - reset to None. - - - - All of the preceding applies to writing zip archives, in other words when - you use one of the Save methods. To use this property when reading or an - existing ZipFile, do the following: set the Password property on the - ZipFile, then call one of the Extract() overloads on the . In this case, the entry is extracted using the - Password that is specified on the ZipFile instance. If you - have not set the Password property, then the password is - null, and the entry is extracted with no password. - - - - If you set the Password property on the ZipFile, then call - Extract() an entry that has not been encrypted with a password, the - password is not used for that entry, and the ZipEntry is extracted - as normal. In other words, the password is used only if necessary. - - - - The class also has a Password property. It takes precedence - over this property on the ZipFile. Typically, you would use the - per-entry Password when most entries in the zip archive use one password, - and a few entries use a different password. If all entries in the zip - file use the same password, then it is simpler to just set this property - on the ZipFile itself, whether creating a zip archive or extracting - a zip archive. - - - - - - - This example creates a zip file, using password protection for the - entries, and then extracts the entries from the zip file. When creating - the zip file, the Readme.txt file is not protected with a password, but - the other two are password-protected as they are saved. During extraction, - each file is extracted with the appropriate password. - - - // create a file with encryption - using (ZipFile zip = new ZipFile()) - { - zip.AddFile("ReadMe.txt"); - zip.Password= "!Secret1"; - zip.AddFile("MapToTheSite-7440-N49th.png"); - zip.AddFile("2008-Regional-Sales-Report.pdf"); - zip.Save("EncryptedArchive.zip"); - } - - // extract entries that use encryption - using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) - { - zip.Password= "!Secret1"; - zip.ExtractAll("extractDir"); - } - - - - - Using zip As New ZipFile - zip.AddFile("ReadMe.txt") - zip.Password = "123456!" - zip.AddFile("MapToTheSite-7440-N49th.png") - zip.Password= "!Secret1"; - zip.AddFile("2008-Regional-Sales-Report.pdf") - zip.Save("EncryptedArchive.zip") - End Using - - - ' extract entries that use encryption - Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) - zip.Password= "!Secret1" - zip.ExtractAll("extractDir") - End Using - - - - - - ZipFile.Encryption - ZipEntry.Password - - - - The action the library should take when extracting a file that already - exists. - - - - - This property affects the behavior of the Extract methods (one of the - Extract() or ExtractWithPassword() overloads), when - extraction would would overwrite an existing filesystem file. If you do - not set this property, the library throws an exception when extracting an - entry would overwrite an existing file. - - - - This property has no effect when extracting to a stream, or when the file - to be extracted does not already exist. - - - - - - - The action the library should take when an error is encountered while - opening or reading files as they are saved into a zip archive. - - - - - Errors can occur as a file is being saved to the zip archive. For - example, the File.Open may fail, or a File.Read may fail, because of - lock conflicts or other reasons. - - - - The first problem might occur after having called AddDirectory() on a - directory that contains a Clipper .dbf file; the file is locked by - Clipper and cannot be opened for read by another process. An example of - the second problem might occur when trying to zip a .pst file that is in - use by Microsoft Outlook. Outlook locks a range on the file, which allows - other processes to open the file, but not read it in its entirety. - - - - This property tells DotNetZip what you would like to do in the case of - these errors. The primary options are: ZipErrorAction.Throw to - throw an exception (this is the default behavior if you don't set this - property); ZipErrorAction.Skip to Skip the file for which there - was an error and continue saving; ZipErrorAction.Retry to Retry - the entry that caused the problem; or - ZipErrorAction.InvokeErrorEvent to invoke an event handler. - - - - This property is implicitly set to ZipErrorAction.InvokeErrorEvent - if you add a handler to the event. If you set - this property to something other than - ZipErrorAction.InvokeErrorEvent, then the ZipError - event is implicitly cleared. What it means is you can set one or the - other (or neither), depending on what you want, but you never need to set - both. - - - - As with some other properties on the ZipFile class, like , , and , setting this property on a ZipFile - instance will cause the specified ZipErrorAction to be used on all - items that are subsequently added to the - ZipFile instance. If you set this property after you have added - items to the ZipFile, but before you have called Save(), - those items will not use the specified error handling action. - - - - If you want to handle any errors that occur with any entry in the zip - file in the same way, then set this property once, before adding any - entries to the zip archive. - - - - If you set this property to ZipErrorAction.Skip and you'd like to - learn which files may have been skipped after a Save(), you can - set the on the ZipFile before - calling Save(). A message will be emitted into that writer for - each skipped file, if any. - - - - - - This example shows how to tell DotNetZip to skip any files for which an - error is generated during the Save(). - - Public Sub SaveZipFile() - Dim SourceFolder As String = "fodder" - Dim DestFile As String = "eHandler.zip" - Dim sw as New StringWriter - Using zipArchive As ZipFile = New ZipFile - ' Tell DotNetZip to skip any files for which it encounters an error - zipArchive.ZipErrorAction = ZipErrorAction.Skip - zipArchive.StatusMessageTextWriter = sw - zipArchive.AddDirectory(SourceFolder) - zipArchive.Save(DestFile) - End Using - ' examine sw here to see any messages - End Sub - - - - - - - - - - The Encryption to use for entries added to the ZipFile. - - - - - Set this when creating a zip archive, or when updating a zip archive. The - specified Encryption is applied to the entries subsequently added to the - ZipFile instance. Applications do not need to set the - Encryption property when reading or extracting a zip archive. - - - - If you set this to something other than EncryptionAlgorithm.None, you - will also need to set the . - - - - As with some other properties on the ZipFile class, like and , setting this - property on a ZipFile instance will cause the specified - EncryptionAlgorithm to be used on all items - that are subsequently added to the ZipFile instance. In other - words, if you set this property after you have added items to the - ZipFile, but before you have called Save(), those items will - not be encrypted or protected with a password in the resulting zip - archive. To get a zip archive with encrypted entries, set this property, - along with the property, before calling - AddFile, AddItem, or AddDirectory (etc.) on the - ZipFile instance. - - - - If you read a ZipFile, you can modify the Encryption on an - encrypted entry, only by setting the Encryption property on the - ZipEntry itself. Setting the Encryption property on the - ZipFile, once it has been created via a call to - ZipFile.Read(), does not affect entries that were previously read. - - - - For example, suppose you read a ZipFile, and there is an encrypted - entry. Setting the Encryption property on that ZipFile and - then calling Save() on the ZipFile does not update the - Encryption used for the entries in the archive. Neither is an - exception thrown. Instead, what happens during the Save() is that - all previously existing entries are copied through to the new zip archive, - with whatever encryption and password that was used when originally - creating the zip archive. Upon re-reading that archive, to extract - entries, applications should use the original password or passwords, if - any. - - - - Suppose an application reads a ZipFile, and there is an encrypted - entry. Setting the Encryption property on that ZipFile and - then adding new entries (via AddFile(), AddEntry(), etc) - and then calling Save() on the ZipFile does not update the - Encryption on any of the entries that had previously been in the - ZipFile. The Encryption property applies only to the - newly-added entries. - - - - - - - This example creates a zip archive that uses encryption, and then extracts - entries from the archive. When creating the zip archive, the ReadMe.txt - file is zipped without using a password or encryption. The other files - use encryption. - - - - // Create a zip archive with AES Encryption. - using (ZipFile zip = new ZipFile()) - { - zip.AddFile("ReadMe.txt"); - zip.Encryption= EncryptionAlgorithm.WinZipAes256; - zip.Password= "Top.Secret.No.Peeking!"; - zip.AddFile("7440-N49th.png"); - zip.AddFile("2008-Regional-Sales-Report.pdf"); - zip.Save("EncryptedArchive.zip"); - } - - // Extract a zip archive that uses AES Encryption. - // You do not need to specify the algorithm during extraction. - using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) - { - zip.Password= "Top.Secret.No.Peeking!"; - zip.ExtractAll("extractDirectory"); - } - - - - ' Create a zip that uses Encryption. - Using zip As New ZipFile() - zip.Encryption= EncryptionAlgorithm.WinZipAes256 - zip.Password= "Top.Secret.No.Peeking!" - zip.AddFile("ReadMe.txt") - zip.AddFile("7440-N49th.png") - zip.AddFile("2008-Regional-Sales-Report.pdf") - zip.Save("EncryptedArchive.zip") - End Using - - ' Extract a zip archive that uses AES Encryption. - ' You do not need to specify the algorithm during extraction. - Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) - zip.Password= "Top.Secret.No.Peeking!" - zip.ExtractAll("extractDirectory") - End Using - - - - - ZipFile.Password - ZipEntry.Encryption - - - - A callback that allows the application to specify the compression level - to use for entries subsequently added to the zip archive. - - - - - - With this callback, the DotNetZip library allows the application to - determine whether compression will be used, at the time of the - Save. This may be useful if the application wants to favor - speed over size, and wants to defer the decision until the time of - Save. - - - - Typically applications set the property on - the ZipFile or on each ZipEntry to determine the level of - compression used. This is done at the time the entry is added to the - ZipFile. Setting the property to - Ionic.Zlib.CompressionLevel.None means no compression will be used. - - - - This callback allows the application to defer the decision on the - CompressionLevel to use, until the time of the call to - ZipFile.Save(). The callback is invoked once per ZipEntry, - at the time the data for the entry is being written out as part of a - Save() operation. The application can use whatever criteria it - likes in determining the level to return. For example, an application may - wish that no .mp3 files should be compressed, because they are already - compressed and the extra compression is not worth the CPU time incurred, - and so can return None for all .mp3 entries. - - - - The library determines whether compression will be attempted for an entry - this way: If the entry is a zero length file, or a directory, no - compression is used. Otherwise, if this callback is set, it is invoked - and the CompressionLevel is set to the return value. If this - callback has not been set, then the previously set value for - CompressionLevel is used. - - - - - - - The maximum size of an output segment, when saving a split Zip file. - - - - Make sure you do not read from this field if you've set the value using - - - - Set this to a non-zero value before calling or to specify that the ZipFile should be saved as a - split archive, also sometimes called a spanned archive. Some also - call them multi-file archives. - - - - A split zip archive is saved in a set of discrete filesystem files, - rather than in a single file. This is handy when transmitting the - archive in email or some other mechanism that has a limit to the size of - each file. The first file in a split archive will be named - basename.z01, the second will be named basename.z02, and - so on. The final file is named basename.zip. According to the zip - specification from PKWare, the minimum value is 65536, for a 64k segment - size. The maximum number of segments allows in a split archive is 99. - - - - The value of this property determines the maximum size of a split - segment when writing a split archive. For example, suppose you have a - ZipFile that would save to a single file of 200k. If you set the - MaxOutputSegmentSize to 65536 before calling Save(), you - will get four distinct output files. On the other hand if you set this - property to 256k, then you will get a single-file archive for that - ZipFile. - - - - The size of each split output file will be as large as possible, up to - the maximum size set here. The zip specification requires that some data - fields in a zip archive may not span a split boundary, and an output - segment may be smaller than the maximum if necessary to avoid that - problem. Also, obviously the final segment of the archive may be smaller - than the maximum segment size. Segments will never be larger than the - value set with this property. - - - - You can save a split Zip file only when saving to a regular filesystem - file. It's not possible to save a split zip file as a self-extracting - archive, nor is it possible to save a split zip file to a stream. When - saving to a SFX or to a Stream, this property is ignored. - - - - About interoperability: Split or spanned zip files produced by DotNetZip - can be read by WinZip or PKZip, and vice-versa. Segmented zip files may - not be readable by other tools, if those other tools don't support zip - spanning or splitting. When in doubt, test. I don't believe Windows - Explorer can extract a split archive. - - - - This property has no effect when reading a split archive. You can read - a split archive in the normal way with DotNetZip. - - - - When saving a zip file, if you want a regular zip file rather than a - split zip file, don't set this property, or set it to Zero. - - - - If you read a split archive, with and - then subsequently call ZipFile.Save(), unless you set this - property before calling Save(), you will get a normal, - single-file archive. - - - - - - - - The maximum size of an output segment, when saving a split Zip file. - - - - If you set this value, make sure you do not accidently use in your code - - - - Set this to a non-zero value before calling or to specify that the ZipFile should be saved as a - split archive, also sometimes called a spanned archive. Some also - call them multi-file archives. - - - - A split zip archive is saved in a set of discrete filesystem files, - rather than in a single file. This is handy when transmitting the - archive in email or some other mechanism that has a limit to the size of - each file. The first file in a split archive will be named - basename.z01, the second will be named basename.z02, and - so on. The final file is named basename.zip. According to the zip - specification from PKWare, the minimum value is 65536, for a 64k segment - size. The maximum number of segments allows in a split archive is 99. - - - - The value of this property determines the maximum size of a split - segment when writing a split archive. For example, suppose you have a - ZipFile that would save to a single file of 200k. If you set the - MaxOutputSegmentSize to 65536 before calling Save(), you - will get four distinct output files. On the other hand if you set this - property to 256k, then you will get a single-file archive for that - ZipFile. - - - - The size of each split output file will be as large as possible, up to - the maximum size set here. The zip specification requires that some data - fields in a zip archive may not span a split boundary, and an output - segment may be smaller than the maximum if necessary to avoid that - problem. Also, obviously the final segment of the archive may be smaller - than the maximum segment size. Segments will never be larger than the - value set with this property. - - - - You can save a split Zip file only when saving to a regular filesystem - file. It's not possible to save a split zip file as a self-extracting - archive, nor is it possible to save a split zip file to a stream. When - saving to a SFX or to a Stream, this property is ignored. - - - - About interoperability: Split or spanned zip files produced by DotNetZip - can be read by WinZip or PKZip, and vice-versa. Segmented zip files may - not be readable by other tools, if those other tools don't support zip - spanning or splitting. When in doubt, test. I don't believe Windows - Explorer can extract a split archive. - - - - This property has no effect when reading a split archive. You can read - a split archive in the normal way with DotNetZip. - - - - When saving a zip file, if you want a regular zip file rather than a - split zip file, don't set this property, or set it to Zero. - - - - If you read a split archive, with and - then subsequently call ZipFile.Save(), unless you set this - property before calling Save(), you will get a normal, - single-file archive. - - - - - - - - Returns the number of segments used in the most recent Save() operation. - - - - This is normally zero, unless you have set the property. If you have set , and then you save a file, after the call to - Save() completes, you can read this value to learn the number of segments that - were created. - - - If you call Save("Archive.zip"), and it creates 5 segments, then you - will have filesystem files named Archive.z01, Archive.z02, Archive.z03, - Archive.z04, and Archive.zip, and the value of this property will be 5. - - - - - - - The size threshold for an entry, above which a parallel deflate is used. - - - - - - DotNetZip will use multiple threads to compress any ZipEntry, - if the entry is larger than the given size. Zero means "always - use parallel deflate", while -1 means "never use parallel - deflate". The default value for this property is 512k. Aside - from the special values of 0 and 1, the minimum value is 65536. - - - - If the entry size cannot be known before compression, as with a - read-forward stream, then Parallel deflate will never be - performed, unless the value of this property is zero. - - - - A parallel deflate operations will speed up the compression of - large files, on computers with multiple CPUs or multiple CPU - cores. For files above 1mb, on a dual core or dual-cpu (2p) - machine, the time required to compress the file can be 70% of the - single-threaded deflate. For very large files on 4p machines the - compression can be done in 30% of the normal time. The downside - is that parallel deflate consumes extra memory during the deflate, - and the deflation is not as effective. - - - - Parallel deflate tends to yield slightly less compression when - compared to as single-threaded deflate; this is because the original - data stream is split into multiple independent buffers, each of which - is compressed in parallel. But because they are treated - independently, there is no opportunity to share compression - dictionaries. For that reason, a deflated stream may be slightly - larger when compressed using parallel deflate, as compared to a - traditional single-threaded deflate. Sometimes the increase over the - normal deflate is as much as 5% of the total compressed size. For - larger files it can be as small as 0.1%. - - - - Multi-threaded compression does not give as much an advantage when - using Encryption. This is primarily because encryption tends to slow - down the entire pipeline. Also, multi-threaded compression gives less - of an advantage when using lower compression levels, for example . You may have to - perform some tests to determine the best approach for your situation. - - - - - - - - - - The maximum number of buffer pairs to use when performing - parallel compression. - - - - - This property sets an upper limit on the number of memory - buffer pairs to create when performing parallel - compression. The implementation of the parallel - compression stream allocates multiple buffers to - facilitate parallel compression. As each buffer fills up, - the stream uses - ThreadPool.QueueUserWorkItem() to compress those - buffers in a background threadpool thread. After a buffer - is compressed, it is re-ordered and written to the output - stream. - - - - A higher number of buffer pairs enables a higher degree of - parallelism, which tends to increase the speed of compression on - multi-cpu computers. On the other hand, a higher number of buffer - pairs also implies a larger memory consumption, more active worker - threads, and a higher cpu utilization for any compression. This - property enables the application to limit its memory consumption and - CPU utilization behavior depending on requirements. - - - - For each compression "task" that occurs in parallel, there are 2 - buffers allocated: one for input and one for output. This property - sets a limit for the number of pairs. The total amount of storage - space allocated for buffering will then be (N*S*2), where N is the - number of buffer pairs, S is the size of each buffer (). By default, DotNetZip allocates 4 buffer - pairs per CPU core, so if your machine has 4 cores, and you retain - the default buffer size of 128k, then the - ParallelDeflateOutputStream will use 4 * 4 * 2 * 128kb of buffer - memory in total, or 4mb, in blocks of 128kb. If you then set this - property to 8, then the number will be 8 * 2 * 128kb of buffer - memory, or 2mb. - - - - CPU utilization will also go up with additional buffers, because a - larger number of buffer pairs allows a larger number of background - threads to compress in parallel. If you find that parallel - compression is consuming too much memory or CPU, you can adjust this - value downward. - - - - The default value is 16. Different values may deliver better or - worse results, depending on your priorities and the dynamic - performance characteristics of your storage and compute resources. - - - - This property is not the number of buffer pairs to use; it is an - upper limit. An illustration: Suppose you have an application that - uses the default value of this property (which is 16), and it runs - on a machine with 2 CPU cores. In that case, DotNetZip will allocate - 4 buffer pairs per CPU core, for a total of 8 pairs. The upper - limit specified by this property has no effect. - - - - The application can set this value at any time - before calling ZipFile.Save(). - - - - - - - - Provides a string representation of the instance. - a string representation of the instance. - - - - Returns the version number on the DotNetZip assembly. - - - - - This property is exposed as a convenience. Callers could also get the - version value by retrieving GetName().Version on the - System.Reflection.Assembly object pointing to the DotNetZip - assembly. But sometimes it is not clear which assembly is being loaded. - This property makes it clear. - - - This static property is primarily useful for diagnostic purposes. - - - - - - Creates a new ZipFile instance, using the specified filename. - - - - - Applications can use this constructor to create a new ZipFile for writing, - or to slurp in an existing zip archive for read and update purposes. - - - - To create a new zip archive, an application can call this constructor, - passing the name of a file that does not exist. The name may be a fully - qualified path. Then the application can add directories or files to the - ZipFile via AddDirectory(), AddFile(), AddItem() - and then write the zip archive to the disk by calling Save(). The - zip file is not actually opened and written to the disk until the - application calls ZipFile.Save(). At that point the new zip file - with the given name is created. - - - - If you won't know the name of the Zipfile until the time you call - ZipFile.Save(), or if you plan to save to a stream (which has no - name), then you should use the no-argument constructor. - - - - The application can also call this constructor to read an existing zip - archive. passing the name of a valid zip file that does exist. But, it's - better form to use the static method, - passing the name of the zip file, because using ZipFile.Read() in - your code communicates very clearly what you are doing. In either case, - the file is then read into the ZipFile instance. The app can then - enumerate the entries or can modify the zip file, for example adding - entries, removing entries, changing comments, and so on. - - - - One advantage to this parameterized constructor: it allows applications to - use the same code to add items to a zip archive, regardless of whether the - zip file exists. - - - - Instances of the ZipFile class are not multi-thread safe. You may - not party on a single instance with multiple threads. You may have - multiple threads that each use a distinct ZipFile instance, or you - can synchronize multi-thread access to a single instance. - - - - By the way, since DotNetZip is so easy to use, don't you think you should - donate $5 or $10? - - - - - - Thrown if name refers to an existing file that is not a valid zip file. - - - - This example shows how to create a zipfile, and add a few files into it. - - String ZipFileToCreate = "archive1.zip"; - String DirectoryToZip = "c:\\reports"; - using (ZipFile zip = new ZipFile()) - { - // Store all files found in the top level directory, into the zip archive. - String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); - zip.AddFiles(filenames, "files"); - zip.Save(ZipFileToCreate); - } - - - - Dim ZipFileToCreate As String = "archive1.zip" - Dim DirectoryToZip As String = "c:\reports" - Using zip As ZipFile = New ZipFile() - Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) - zip.AddFiles(filenames, "files") - zip.Save(ZipFileToCreate) - End Using - - - - The filename to use for the new zip archive. - - - - - Creates a new ZipFile instance, using the specified name for the - filename, and the specified Encoding. - - - - - See the documentation on the ZipFile - constructor that accepts a single string argument for basic - information on all the ZipFile constructors. - - - - The Encoding is used as the default alternate encoding for entries with - filenames or comments that cannot be encoded with the IBM437 code page. - This is equivalent to setting the property on the ZipFile - instance after construction. - - - - Instances of the ZipFile class are not multi-thread safe. You may - not party on a single instance with multiple threads. You may have - multiple threads that each use a distinct ZipFile instance, or you - can synchronize multi-thread access to a single instance. - - - - - - Thrown if name refers to an existing file that is not a valid zip file. - - - The filename to use for the new zip archive. - The Encoding is used as the default alternate - encoding for entries with filenames or comments that cannot be encoded - with the IBM437 code page. - - - - Create a zip file, without specifying a target filename or stream to save to. - - - - - See the documentation on the ZipFile - constructor that accepts a single string argument for basic - information on all the ZipFile constructors. - - - - After instantiating with this constructor and adding entries to the - archive, the application should call or - to save to a file or a - stream, respectively. The application can also set the - property and then call the no-argument method. (This - is the preferred approach for applications that use the library through - COM interop.) If you call the no-argument method - without having set the Name of the ZipFile, either through - the parameterized constructor or through the explicit property , the - Save() will throw, because there is no place to save the file. - - - Instances of the ZipFile class are not multi-thread safe. You may - have multiple threads that each use a distinct ZipFile instance, or - you can synchronize multi-thread access to a single instance. - - - - - This example creates a Zip archive called Backup.zip, containing all the files - in the directory DirectoryToZip. Files within subdirectories are not zipped up. - - using (ZipFile zip = new ZipFile()) - { - // Store all files found in the top level directory, into the zip archive. - // note: this code does not recurse subdirectories! - String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); - zip.AddFiles(filenames, "files"); - zip.Save("Backup.zip"); - } - - - - Using zip As New ZipFile - ' Store all files found in the top level directory, into the zip archive. - ' note: this code does not recurse subdirectories! - Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) - zip.AddFiles(filenames, "files") - zip.Save("Backup.zip") - End Using - - - - - - Create a zip file, specifying a text Encoding, but without specifying a - target filename or stream to save to. - - - - - See the documentation on the ZipFile - constructor that accepts a single string argument for basic - information on all the ZipFile constructors. - - - - - - The Encoding is used as the default alternate encoding for entries with - filenames or comments that cannot be encoded with the IBM437 code page. - - - - - Creates a new ZipFile instance, using the specified name for the - filename, and the specified status message writer. - - - - - See the documentation on the ZipFile - constructor that accepts a single string argument for basic - information on all the ZipFile constructors. - - - - This version of the constructor allows the caller to pass in a TextWriter, - to which verbose messages will be written during extraction or creation of - the zip archive. A console application may wish to pass - System.Console.Out to get messages on the Console. A graphical or headless - application may wish to capture the messages in a different - TextWriter, for example, a StringWriter, and then display - the messages in a TextBox, or generate an audit log of ZipFile operations. - - - - To encrypt the data for the files added to the ZipFile instance, - set the Password property after creating the ZipFile instance. - - - - Instances of the ZipFile class are not multi-thread safe. You may - not party on a single instance with multiple threads. You may have - multiple threads that each use a distinct ZipFile instance, or you - can synchronize multi-thread access to a single instance. - - - - - - Thrown if name refers to an existing file that is not a valid zip file. - - - - - using (ZipFile zip = new ZipFile("Backup.zip", Console.Out)) - { - // Store all files found in the top level directory, into the zip archive. - // note: this code does not recurse subdirectories! - // Status messages will be written to Console.Out - String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); - zip.AddFiles(filenames); - zip.Save(); - } - - - - Using zip As New ZipFile("Backup.zip", Console.Out) - ' Store all files found in the top level directory, into the zip archive. - ' note: this code does not recurse subdirectories! - ' Status messages will be written to Console.Out - Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) - zip.AddFiles(filenames) - zip.Save() - End Using - - - - The filename to use for the new zip archive. - A TextWriter to use for writing - verbose status messages. - - - - Creates a new ZipFile instance, using the specified name for the - filename, the specified status message writer, and the specified Encoding. - - - - - This constructor works like the ZipFile - constructor that accepts a single string argument. See that - reference for detail on what this constructor does. - - - - This version of the constructor allows the caller to pass in a - TextWriter, and an Encoding. The TextWriter will collect - verbose messages that are generated by the library during extraction or - creation of the zip archive. A console application may wish to pass - System.Console.Out to get messages on the Console. A graphical or - headless application may wish to capture the messages in a different - TextWriter, for example, a StringWriter, and then display - the messages in a TextBox, or generate an audit log of - ZipFile operations. - - - - The Encoding is used as the default alternate encoding for entries - with filenames or comments that cannot be encoded with the IBM437 code - page. This is a equivalent to setting the property on the ZipFile - instance after construction. - - - - To encrypt the data for the files added to the ZipFile instance, - set the Password property after creating the ZipFile - instance. - - - - Instances of the ZipFile class are not multi-thread safe. You may - not party on a single instance with multiple threads. You may have - multiple threads that each use a distinct ZipFile instance, or you - can synchronize multi-thread access to a single instance. - - - - - - Thrown if fileName refers to an existing file that is not a valid zip file. - - - The filename to use for the new zip archive. - A TextWriter to use for writing verbose - status messages. - - The Encoding is used as the default alternate encoding for entries with - filenames or comments that cannot be encoded with the IBM437 code page. - - - - - Initialize a ZipFile instance by reading in a zip file. - - - - - - This method is primarily useful from COM Automation environments, when - reading or extracting zip files. In COM, it is not possible to invoke - parameterized constructors for a class. A COM Automation application can - update a zip file by using the default (no argument) - constructor, then calling Initialize() to read the contents - of an on-disk zip archive into the ZipFile instance. - - - - .NET applications are encouraged to use the ZipFile.Read() methods - for better clarity. - - - - the name of the existing zip file to read in. - - - - This is an integer indexer into the Zip archive. - - - - - This property is read-only. - - - - Internally, the ZipEntry instances that belong to the - ZipFile are stored in a Dictionary. When you use this - indexer the first time, it creates a read-only - List<ZipEntry> from the Dictionary.Values Collection. - If at any time you modify the set of entries in the ZipFile, - either by adding an entry, removing an entry, or renaming an - entry, a new List will be created, and the numeric indexes for the - remaining entries may be different. - - - - This means you cannot rename any ZipEntry from - inside an enumeration of the zip file. - - - - The index value. - - - - - - The ZipEntry within the Zip archive at the specified index. If the - entry does not exist in the archive, this indexer throws. - - - - - - This is a name-based indexer into the Zip archive. - - - - - This property is read-only. - - - - The property on the ZipFile - determines whether retrieval via this indexer is done via case-sensitive - comparisons. By default, retrieval is not case sensitive. This makes - sense on Windows, in which filesystems are not case sensitive. - - - - Regardless of case-sensitivity, it is not always the case that - this[value].FileName == value. In other words, the FileName - property of the ZipEntry retrieved with this indexer, may or may - not be equal to the index value. - - - - This is because DotNetZip performs a normalization of filenames passed to - this indexer, before attempting to retrieve the item. That normalization - includes: removal of a volume letter and colon, swapping backward slashes - for forward slashes. So, zip["dir1\\entry1.txt"].FileName == - "dir1/entry.txt". - - - - Directory entries in the zip file may be retrieved via this indexer only - with names that have a trailing slash. DotNetZip automatically appends a - trailing slash to the names of any directory entries added to a zip. - - - - - - This example extracts only the entries in a zip file that are .txt files. - - using (ZipFile zip = ZipFile.Read("PackedDocuments.zip")) - { - foreach (string s1 in zip.EntryFilenames) - { - if (s1.EndsWith(".txt")) - zip[s1].Extract("textfiles"); - } - } - - - Using zip As ZipFile = ZipFile.Read("PackedDocuments.zip") - Dim s1 As String - For Each s1 In zip.EntryFilenames - If s1.EndsWith(".txt") Then - zip(s1).Extract("textfiles") - End If - Next - End Using - - - - - - Thrown if the caller attempts to assign a non-null value to the indexer. - - - - The name of the file, including any directory path, to retrieve from the - zip. The filename match is not case-sensitive by default; you can use the - property to change this behavior. The - pathname can use forward-slashes or backward slashes. - - - - The ZipEntry within the Zip archive, given by the specified - filename. If the named entry does not exist in the archive, this indexer - returns null (Nothing in VB). - - - - - - The list of filenames for the entries contained within the zip archive. - - - - According to the ZIP specification, the names of the entries use forward - slashes in pathnames. If you are scanning through the list, you may have - to swap forward slashes for backslashes. - - - - - - This example shows one way to test if a filename is already contained - within a zip archive. - - String zipFileToRead= "PackedDocuments.zip"; - string candidate = "DatedMaterial.xps"; - using (ZipFile zip = new ZipFile(zipFileToRead)) - { - if (zip.EntryFilenames.Contains(candidate)) - Console.WriteLine("The file '{0}' exists in the zip archive '{1}'", - candidate, - zipFileName); - else - Console.WriteLine("The file, '{0}', does not exist in the zip archive '{1}'", - candidate, - zipFileName); - Console.WriteLine(); - } - - - Dim zipFileToRead As String = "PackedDocuments.zip" - Dim candidate As String = "DatedMaterial.xps" - Using zip As ZipFile.Read(ZipFileToRead) - If zip.EntryFilenames.Contains(candidate) Then - Console.WriteLine("The file '{0}' exists in the zip archive '{1}'", _ - candidate, _ - zipFileName) - Else - Console.WriteLine("The file, '{0}', does not exist in the zip archive '{1}'", _ - candidate, _ - zipFileName) - End If - Console.WriteLine - End Using - - - - - The list of strings for the filenames contained within the Zip archive. - - - - - - Returns the readonly collection of entries in the Zip archive. - - - - - - If there are no entries in the current ZipFile, the value returned is a - non-null zero-element collection. If there are entries in the zip file, - the elements are returned in no particular order. - - - This is the implied enumerator on the ZipFile class. If you use a - ZipFile instance in a context that expects an enumerator, you will - get this collection. - - - - - - - Returns a readonly collection of entries in the Zip archive, sorted by FileName. - - - - If there are no entries in the current ZipFile, the value returned - is a non-null zero-element collection. If there are entries in the zip - file, the elements are returned sorted by the name of the entry. - - - - - This example fills a Windows Forms ListView with the entries in a zip file. - - - using (ZipFile zip = ZipFile.Read(zipFile)) - { - foreach (ZipEntry entry in zip.EntriesSorted) - { - ListViewItem item = new ListViewItem(n.ToString()); - n++; - string[] subitems = new string[] { - entry.FileName.Replace("/","\\"), - entry.LastModified.ToString("yyyy-MM-dd HH:mm:ss"), - entry.UncompressedSize.ToString(), - String.Format("{0,5:F0}%", entry.CompressionRatio), - entry.CompressedSize.ToString(), - (entry.UsesEncryption) ? "Y" : "N", - String.Format("{0:X8}", entry.Crc)}; - - foreach (String s in subitems) - { - ListViewItem.ListViewSubItem subitem = new ListViewItem.ListViewSubItem(); - subitem.Text = s; - item.SubItems.Add(subitem); - } - - this.listView1.Items.Add(item); - } - } - - - - - - - - Returns the number of entries in the Zip archive. - - - - - Removes the given ZipEntry from the zip archive. - - - - - After calling RemoveEntry, the application must call Save to - make the changes permanent. - - - - - Thrown if the specified ZipEntry does not exist in the ZipFile. - - - - In this example, all entries in the zip archive dating from before - December 31st, 2007, are removed from the archive. This is actually much - easier if you use the RemoveSelectedEntries method. But I needed an - example for RemoveEntry, so here it is. - - String ZipFileToRead = "ArchiveToModify.zip"; - System.DateTime Threshold = new System.DateTime(2007,12,31); - using (ZipFile zip = ZipFile.Read(ZipFileToRead)) - { - var EntriesToRemove = new System.Collections.Generic.List<ZipEntry>(); - foreach (ZipEntry e in zip) - { - if (e.LastModified < Threshold) - { - // We cannot remove the entry from the list, within the context of - // an enumeration of said list. - // So we add the doomed entry to a list to be removed later. - EntriesToRemove.Add(e); - } - } - - // actually remove the doomed entries. - foreach (ZipEntry zombie in EntriesToRemove) - zip.RemoveEntry(zombie); - - zip.Comment= String.Format("This zip archive was updated at {0}.", - System.DateTime.Now.ToString("G")); - - // save with a different name - zip.Save("Archive-Updated.zip"); - } - - - - Dim ZipFileToRead As String = "ArchiveToModify.zip" - Dim Threshold As New DateTime(2007, 12, 31) - Using zip As ZipFile = ZipFile.Read(ZipFileToRead) - Dim EntriesToRemove As New System.Collections.Generic.List(Of ZipEntry) - Dim e As ZipEntry - For Each e In zip - If (e.LastModified < Threshold) Then - ' We cannot remove the entry from the list, within the context of - ' an enumeration of said list. - ' So we add the doomed entry to a list to be removed later. - EntriesToRemove.Add(e) - End If - Next - - ' actually remove the doomed entries. - Dim zombie As ZipEntry - For Each zombie In EntriesToRemove - zip.RemoveEntry(zombie) - Next - zip.Comment = String.Format("This zip archive was updated at {0}.", DateTime.Now.ToString("G")) - 'save as a different name - zip.Save("Archive-Updated.zip") - End Using - - - - - The ZipEntry to remove from the zip. - - - - - - - - Removes the ZipEntry with the given filename from the zip archive. - - - - - After calling RemoveEntry, the application must call Save to - make the changes permanent. - - - - - - Thrown if the ZipFile is not updatable. - - - - Thrown if a ZipEntry with the specified filename does not exist in - the ZipFile. - - - - - This example shows one way to remove an entry with a given filename from - an existing zip archive. - - - String zipFileToRead= "PackedDocuments.zip"; - string candidate = "DatedMaterial.xps"; - using (ZipFile zip = ZipFile.Read(zipFileToRead)) - { - if (zip.EntryFilenames.Contains(candidate)) - { - zip.RemoveEntry(candidate); - zip.Comment= String.Format("The file '{0}' has been removed from this archive.", - Candidate); - zip.Save(); - } - } - - - Dim zipFileToRead As String = "PackedDocuments.zip" - Dim candidate As String = "DatedMaterial.xps" - Using zip As ZipFile = ZipFile.Read(zipFileToRead) - If zip.EntryFilenames.Contains(candidate) Then - zip.RemoveEntry(candidate) - zip.Comment = String.Format("The file '{0}' has been removed from this archive.", Candidate) - zip.Save - End If - End Using - - - - - The name of the file, including any directory path, to remove from the zip. - The filename match is not case-sensitive by default; you can use the - CaseSensitiveRetrieval property to change this behavior. The - pathname can use forward-slashes or backward slashes. - - - - - - Closes the read and write streams associated - to the ZipFile, if necessary. - - - - The Dispose() method is generally employed implicitly, via a using(..) {..} - statement. (Using...End Using in VB) If you do not employ a using - statement, insure that your application calls Dispose() explicitly. For - example, in a Powershell application, or an application that uses the COM - interop interface, you must call Dispose() explicitly. - - - - This example extracts an entry selected by name, from the Zip file to the - Console. - - using (ZipFile zip = ZipFile.Read(zipfile)) - { - foreach (ZipEntry e in zip) - { - if (WantThisEntry(e.FileName)) - zip.Extract(e.FileName, Console.OpenStandardOutput()); - } - } // Dispose() is called implicitly here. - - - - Using zip As ZipFile = ZipFile.Read(zipfile) - Dim e As ZipEntry - For Each e In zip - If WantThisEntry(e.FileName) Then - zip.Extract(e.FileName, Console.OpenStandardOutput()) - End If - Next - End Using ' Dispose is implicity called here - - - - - - Disposes any managed resources, if the flag is set, then marks the - instance disposed. This method is typically not called explicitly from - application code. - - - - Applications should call the no-arg Dispose method. - - - - indicates whether the method should dispose streams or not. - - - - - Default size of the buffer used for IO. - - - - - An event handler invoked when a Save() starts, before and after each - entry has been written to the archive, when a Save() completes, and - during other Save events. - - - - - Depending on the particular event, different properties on the parameter are set. The following - table summarizes the available EventTypes and the conditions under - which this event handler is invoked with a - SaveProgressEventArgs with the given EventType. - - - - - value of EntryType - Meaning and conditions - - - - ZipProgressEventType.Saving_Started - Fired when ZipFile.Save() begins. - - - - - ZipProgressEventType.Saving_BeforeSaveEntry - - Fired within ZipFile.Save(), just before writing data for each - particular entry. - - - - - ZipProgressEventType.Saving_AfterSaveEntry - - Fired within ZipFile.Save(), just after having finished writing data - for each particular entry. - - - - - ZipProgressEventType.Saving_Completed - Fired when ZipFile.Save() has completed. - - - - - ZipProgressEventType.Saving_AfterSaveTempArchive - - Fired after the temporary file has been created. This happens only - when saving to a disk file. This event will not be invoked when - saving to a stream. - - - - - ZipProgressEventType.Saving_BeforeRenameTempArchive - - Fired just before renaming the temporary file to the permanent - location. This happens only when saving to a disk file. This event - will not be invoked when saving to a stream. - - - - - ZipProgressEventType.Saving_AfterRenameTempArchive - - Fired just after renaming the temporary file to the permanent - location. This happens only when saving to a disk file. This event - will not be invoked when saving to a stream. - - - - - ZipProgressEventType.Saving_AfterCompileSelfExtractor - - Fired after a self-extracting archive has finished compiling. This - EventType is used only within SaveSelfExtractor(). - - - - - ZipProgressEventType.Saving_BytesRead - - Set during the save of a particular entry, to update progress of the - Save(). When this EventType is set, the BytesTransferred is the - number of bytes that have been read from the source stream. The - TotalBytesToTransfer is the number of bytes in the uncompressed - file. - - - - - - - - - This example uses an anonymous method to handle the - SaveProgress event, by updating a progress bar. - - - progressBar1.Value = 0; - progressBar1.Max = listbox1.Items.Count; - using (ZipFile zip = new ZipFile()) - { - // listbox1 contains a list of filenames - zip.AddFiles(listbox1.Items); - - // do the progress bar: - zip.SaveProgress += (sender, e) => { - if (e.EventType == ZipProgressEventType.Saving_BeforeWriteEntry) { - progressBar1.PerformStep(); - } - }; - - zip.Save(fs); - } - - - - - This example uses a named method as the - SaveProgress event handler, to update the user, in a - console-based application. - - - static bool justHadByteUpdate= false; - public static void SaveProgress(object sender, SaveProgressEventArgs e) - { - if (e.EventType == ZipProgressEventType.Saving_Started) - Console.WriteLine("Saving: {0}", e.ArchiveName); - - else if (e.EventType == ZipProgressEventType.Saving_Completed) - { - justHadByteUpdate= false; - Console.WriteLine(); - Console.WriteLine("Done: {0}", e.ArchiveName); - } - - else if (e.EventType == ZipProgressEventType.Saving_BeforeWriteEntry) - { - if (justHadByteUpdate) - Console.WriteLine(); - Console.WriteLine(" Writing: {0} ({1}/{2})", - e.CurrentEntry.FileName, e.EntriesSaved, e.EntriesTotal); - justHadByteUpdate= false; - } - - else if (e.EventType == ZipProgressEventType.Saving_EntryBytesRead) - { - if (justHadByteUpdate) - Console.SetCursorPosition(0, Console.CursorTop); - Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, e.TotalBytesToTransfer, - e.BytesTransferred / (0.01 * e.TotalBytesToTransfer )); - justHadByteUpdate= true; - } - } - - public static ZipUp(string targetZip, string directory) - { - using (var zip = new ZipFile()) { - zip.SaveProgress += SaveProgress; - zip.AddDirectory(directory); - zip.Save(targetZip); - } - } - - - - - Public Sub ZipUp(ByVal targetZip As String, ByVal directory As String) - Using zip As ZipFile = New ZipFile - AddHandler zip.SaveProgress, AddressOf MySaveProgress - zip.AddDirectory(directory) - zip.Save(targetZip) - End Using - End Sub - - Private Shared justHadByteUpdate As Boolean = False - - Public Shared Sub MySaveProgress(ByVal sender As Object, ByVal e As SaveProgressEventArgs) - If (e.EventType Is ZipProgressEventType.Saving_Started) Then - Console.WriteLine("Saving: {0}", e.ArchiveName) - - ElseIf (e.EventType Is ZipProgressEventType.Saving_Completed) Then - justHadByteUpdate = False - Console.WriteLine - Console.WriteLine("Done: {0}", e.ArchiveName) - - ElseIf (e.EventType Is ZipProgressEventType.Saving_BeforeWriteEntry) Then - If justHadByteUpdate Then - Console.WriteLine - End If - Console.WriteLine(" Writing: {0} ({1}/{2})", e.CurrentEntry.FileName, e.EntriesSaved, e.EntriesTotal) - justHadByteUpdate = False - - ElseIf (e.EventType Is ZipProgressEventType.Saving_EntryBytesRead) Then - If justHadByteUpdate Then - Console.SetCursorPosition(0, Console.CursorTop) - End If - Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, _ - e.TotalBytesToTransfer, _ - (CDbl(e.BytesTransferred) / (0.01 * e.TotalBytesToTransfer))) - justHadByteUpdate = True - End If - End Sub - - - - - - This is a more complete example of using the SaveProgress - events in a Windows Forms application, with a - Thread object. - - - delegate void SaveEntryProgress(SaveProgressEventArgs e); - delegate void ButtonClick(object sender, EventArgs e); - - public class WorkerOptions - { - public string ZipName; - public string Folder; - public string Encoding; - public string Comment; - public int ZipFlavor; - public Zip64Option Zip64; - } - - private int _progress2MaxFactor; - private bool _saveCanceled; - private long _totalBytesBeforeCompress; - private long _totalBytesAfterCompress; - private Thread _workerThread; - - - private void btnZipup_Click(object sender, EventArgs e) - { - KickoffZipup(); - } - - private void btnCancel_Click(object sender, EventArgs e) - { - if (this.lblStatus.InvokeRequired) - { - this.lblStatus.Invoke(new ButtonClick(this.btnCancel_Click), new object[] { sender, e }); - } - else - { - _saveCanceled = true; - lblStatus.Text = "Canceled..."; - ResetState(); - } - } - - private void KickoffZipup() - { - _folderName = tbDirName.Text; - - if (_folderName == null || _folderName == "") return; - if (this.tbZipName.Text == null || this.tbZipName.Text == "") return; - - // check for existence of the zip file: - if (System.IO.File.Exists(this.tbZipName.Text)) - { - var dlgResult = MessageBox.Show(String.Format("The file you have specified ({0}) already exists." + - " Do you want to overwrite this file?", this.tbZipName.Text), - "Confirmation is Required", MessageBoxButtons.YesNo, MessageBoxIcon.Question); - if (dlgResult != DialogResult.Yes) return; - System.IO.File.Delete(this.tbZipName.Text); - } - - _saveCanceled = false; - _nFilesCompleted = 0; - _totalBytesAfterCompress = 0; - _totalBytesBeforeCompress = 0; - this.btnOk.Enabled = false; - this.btnOk.Text = "Zipping..."; - this.btnCancel.Enabled = true; - lblStatus.Text = "Zipping..."; - - var options = new WorkerOptions - { - ZipName = this.tbZipName.Text, - Folder = _folderName, - Encoding = "ibm437" - }; - - if (this.comboBox1.SelectedIndex != 0) - { - options.Encoding = this.comboBox1.SelectedItem.ToString(); - } - - if (this.radioFlavorSfxCmd.Checked) - options.ZipFlavor = 2; - else if (this.radioFlavorSfxGui.Checked) - options.ZipFlavor = 1; - else options.ZipFlavor = 0; - - if (this.radioZip64AsNecessary.Checked) - options.Zip64 = Zip64Option.AsNecessary; - else if (this.radioZip64Always.Checked) - options.Zip64 = Zip64Option.Always; - else options.Zip64 = Zip64Option.Never; - - options.Comment = String.Format("Encoding:{0} || Flavor:{1} || ZIP64:{2}\r\nCreated at {3} || {4}\r\n", - options.Encoding, - FlavorToString(options.ZipFlavor), - options.Zip64.ToString(), - System.DateTime.Now.ToString("yyyy-MMM-dd HH:mm:ss"), - this.Text); - - if (this.tbComment.Text != TB_COMMENT_NOTE) - options.Comment += this.tbComment.Text; - - _workerThread = new Thread(this.DoSave); - _workerThread.Name = "Zip Saver thread"; - _workerThread.Start(options); - this.Cursor = Cursors.WaitCursor; - } - - - private void DoSave(Object p) - { - WorkerOptions options = p as WorkerOptions; - try - { - using (var zip1 = new ZipFile()) - { - zip1.ProvisionalAlternateEncoding = System.Text.Encoding.GetEncoding(options.Encoding); - zip1.Comment = options.Comment; - zip1.AddDirectory(options.Folder); - _entriesToZip = zip1.EntryFileNames.Count; - SetProgressBars(); - zip1.SaveProgress += this.zip1_SaveProgress; - - zip1.UseZip64WhenSaving = options.Zip64; - - if (options.ZipFlavor == 1) - zip1.SaveSelfExtractor(options.ZipName, SelfExtractorFlavor.WinFormsApplication); - else if (options.ZipFlavor == 2) - zip1.SaveSelfExtractor(options.ZipName, SelfExtractorFlavor.ConsoleApplication); - else - zip1.Save(options.ZipName); - } - } - catch (System.Exception exc1) - { - MessageBox.Show(String.Format("Exception while zipping: {0}", exc1.Message)); - btnCancel_Click(null, null); - } - } - - - - void zip1_SaveProgress(object sender, SaveProgressEventArgs e) - { - switch (e.EventType) - { - case ZipProgressEventType.Saving_AfterWriteEntry: - StepArchiveProgress(e); - break; - case ZipProgressEventType.Saving_EntryBytesRead: - StepEntryProgress(e); - break; - case ZipProgressEventType.Saving_Completed: - SaveCompleted(); - break; - case ZipProgressEventType.Saving_AfterSaveTempArchive: - // this event only occurs when saving an SFX file - TempArchiveSaved(); - break; - } - if (_saveCanceled) - e.Cancel = true; - } - - - - private void StepArchiveProgress(SaveProgressEventArgs e) - { - if (this.progressBar1.InvokeRequired) - { - this.progressBar1.Invoke(new SaveEntryProgress(this.StepArchiveProgress), new object[] { e }); - } - else - { - if (!_saveCanceled) - { - _nFilesCompleted++; - this.progressBar1.PerformStep(); - _totalBytesAfterCompress += e.CurrentEntry.CompressedSize; - _totalBytesBeforeCompress += e.CurrentEntry.UncompressedSize; - - // reset the progress bar for the entry: - this.progressBar2.Value = this.progressBar2.Maximum = 1; - - this.Update(); - } - } - } - - - private void StepEntryProgress(SaveProgressEventArgs e) - { - if (this.progressBar2.InvokeRequired) - { - this.progressBar2.Invoke(new SaveEntryProgress(this.StepEntryProgress), new object[] { e }); - } - else - { - if (!_saveCanceled) - { - if (this.progressBar2.Maximum == 1) - { - // reset - Int64 max = e.TotalBytesToTransfer; - _progress2MaxFactor = 0; - while (max > System.Int32.MaxValue) - { - max /= 2; - _progress2MaxFactor++; - } - this.progressBar2.Maximum = (int)max; - lblStatus.Text = String.Format("{0} of {1} files...({2})", - _nFilesCompleted + 1, _entriesToZip, e.CurrentEntry.FileName); - } - - int xferred = e.BytesTransferred >> _progress2MaxFactor; - - this.progressBar2.Value = (xferred >= this.progressBar2.Maximum) - ? this.progressBar2.Maximum - : xferred; - - this.Update(); - } - } - } - - private void SaveCompleted() - { - if (this.lblStatus.InvokeRequired) - { - this.lblStatus.Invoke(new MethodInvoker(this.SaveCompleted)); - } - else - { - lblStatus.Text = String.Format("Done, Compressed {0} files, {1:N0}% of original.", - _nFilesCompleted, (100.00 * _totalBytesAfterCompress) / _totalBytesBeforeCompress); - ResetState(); - } - } - - private void ResetState() - { - this.btnCancel.Enabled = false; - this.btnOk.Enabled = true; - this.btnOk.Text = "Zip it!"; - this.progressBar1.Value = 0; - this.progressBar2.Value = 0; - this.Cursor = Cursors.Default; - if (!_workerThread.IsAlive) - _workerThread.Join(); - } - - - - - - - - - - - An event handler invoked before, during, and after the reading of a zip archive. - - - - - Depending on the particular event being signaled, different properties on the - parameter are set. The following table - summarizes the available EventTypes and the conditions under which this - event handler is invoked with a ReadProgressEventArgs with the given EventType. - - - - - value of EntryType - Meaning and conditions - - - - ZipProgressEventType.Reading_Started - Fired just as ZipFile.Read() begins. Meaningful properties: ArchiveName. - - - - - ZipProgressEventType.Reading_Completed - Fired when ZipFile.Read() has completed. Meaningful properties: ArchiveName. - - - - - ZipProgressEventType.Reading_ArchiveBytesRead - Fired while reading, updates the number of bytes read for the entire archive. - Meaningful properties: ArchiveName, CurrentEntry, BytesTransferred, TotalBytesToTransfer. - - - - - ZipProgressEventType.Reading_BeforeReadEntry - Indicates an entry is about to be read from the archive. - Meaningful properties: ArchiveName, EntriesTotal. - - - - - ZipProgressEventType.Reading_AfterReadEntry - Indicates an entry has just been read from the archive. - Meaningful properties: ArchiveName, EntriesTotal, CurrentEntry. - - - - - - - - - - - - - An event handler invoked before, during, and after extraction of - entries in the zip archive. - - - - - Depending on the particular event, different properties on the parameter are set. The following - table summarizes the available EventTypes and the conditions under - which this event handler is invoked with a - ExtractProgressEventArgs with the given EventType. - - - - - value of EntryType - Meaning and conditions - - - - ZipProgressEventType.Extracting_BeforeExtractAll - - Set when ExtractAll() begins. The ArchiveName, Overwrite, and - ExtractLocation properties are meaningful. - - - - ZipProgressEventType.Extracting_AfterExtractAll - - Set when ExtractAll() has completed. The ArchiveName, Overwrite, - and ExtractLocation properties are meaningful. - - - - - ZipProgressEventType.Extracting_BeforeExtractEntry - - Set when an Extract() on an entry in the ZipFile has begun. - Properties that are meaningful: ArchiveName, EntriesTotal, - CurrentEntry, Overwrite, ExtractLocation, EntriesExtracted. - - - - - ZipProgressEventType.Extracting_AfterExtractEntry - - Set when an Extract() on an entry in the ZipFile has completed. - Properties that are meaningful: ArchiveName, EntriesTotal, - CurrentEntry, Overwrite, ExtractLocation, EntriesExtracted. - - - - - ZipProgressEventType.Extracting_EntryBytesWritten - - Set within a call to Extract() on an entry in the ZipFile, as data - is extracted for the entry. Properties that are meaningful: - ArchiveName, CurrentEntry, BytesTransferred, TotalBytesToTransfer. - - - - - ZipProgressEventType.Extracting_ExtractEntryWouldOverwrite - - Set within a call to Extract() on an entry in the ZipFile, when the - extraction would overwrite an existing file. This event type is used - only when ExtractExistingFileAction on the ZipFile or - ZipEntry is set to InvokeExtractProgressEvent. - - - - - - - - - - private static bool justHadByteUpdate = false; - public static void ExtractProgress(object sender, ExtractProgressEventArgs e) - { - if(e.EventType == ZipProgressEventType.Extracting_EntryBytesWritten) - { - if (justHadByteUpdate) - Console.SetCursorPosition(0, Console.CursorTop); - - Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, e.TotalBytesToTransfer, - e.BytesTransferred / (0.01 * e.TotalBytesToTransfer )); - justHadByteUpdate = true; - } - else if(e.EventType == ZipProgressEventType.Extracting_BeforeExtractEntry) - { - if (justHadByteUpdate) - Console.WriteLine(); - Console.WriteLine("Extracting: {0}", e.CurrentEntry.FileName); - justHadByteUpdate= false; - } - } - - public static ExtractZip(string zipToExtract, string directory) - { - string TargetDirectory= "extract"; - using (var zip = ZipFile.Read(zipToExtract)) { - zip.ExtractProgress += ExtractProgress; - foreach (var e in zip1) - { - e.Extract(TargetDirectory, true); - } - } - } - - - - Public Shared Sub Main(ByVal args As String()) - Dim ZipToUnpack As String = "C1P3SML.zip" - Dim TargetDir As String = "ExtractTest_Extract" - Console.WriteLine("Extracting file {0} to {1}", ZipToUnpack, TargetDir) - Using zip1 As ZipFile = ZipFile.Read(ZipToUnpack) - AddHandler zip1.ExtractProgress, AddressOf MyExtractProgress - Dim e As ZipEntry - For Each e In zip1 - e.Extract(TargetDir, True) - Next - End Using - End Sub - - Private Shared justHadByteUpdate As Boolean = False - - Public Shared Sub MyExtractProgress(ByVal sender As Object, ByVal e As ExtractProgressEventArgs) - If (e.EventType = ZipProgressEventType.Extracting_EntryBytesWritten) Then - If ExtractTest.justHadByteUpdate Then - Console.SetCursorPosition(0, Console.CursorTop) - End If - Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, e.TotalBytesToTransfer, (CDbl(e.BytesTransferred) / (0.01 * e.TotalBytesToTransfer))) - ExtractTest.justHadByteUpdate = True - ElseIf (e.EventType = ZipProgressEventType.Extracting_BeforeExtractEntry) Then - If ExtractTest.justHadByteUpdate Then - Console.WriteLine - End If - Console.WriteLine("Extracting: {0}", e.CurrentEntry.FileName) - ExtractTest.justHadByteUpdate = False - End If - End Sub - - - - - - - - - - An event handler invoked before, during, and after Adding entries to a zip archive. - - - - Adding a large number of entries to a zip file can take a long - time. For example, when calling on a - directory that contains 50,000 files, it could take 3 minutes or so. - This event handler allws an application to track the progress of the Add - operation, and to optionally cancel a lengthy Add operation. - - - - - - int _numEntriesToAdd= 0; - int _numEntriesAdded= 0; - void AddProgressHandler(object sender, AddProgressEventArgs e) - { - switch (e.EventType) - { - case ZipProgressEventType.Adding_Started: - Console.WriteLine("Adding files to the zip..."); - break; - case ZipProgressEventType.Adding_AfterAddEntry: - _numEntriesAdded++; - Console.WriteLine(String.Format("Adding file {0}/{1} :: {2}", - _numEntriesAdded, _numEntriesToAdd, e.CurrentEntry.FileName)); - break; - case ZipProgressEventType.Adding_Completed: - Console.WriteLine("Added all files"); - break; - } - } - - void CreateTheZip() - { - using (ZipFile zip = new ZipFile()) - { - zip.AddProgress += AddProgressHandler; - zip.AddDirectory(System.IO.Path.GetFileName(DirToZip)); - zip.Save(ZipFileToCreate); - } - } - - - - - - Private Sub AddProgressHandler(ByVal sender As Object, ByVal e As AddProgressEventArgs) - Select Case e.EventType - Case ZipProgressEventType.Adding_Started - Console.WriteLine("Adding files to the zip...") - Exit Select - Case ZipProgressEventType.Adding_AfterAddEntry - Console.WriteLine(String.Format("Adding file {0}", e.CurrentEntry.FileName)) - Exit Select - Case ZipProgressEventType.Adding_Completed - Console.WriteLine("Added all files") - Exit Select - End Select - End Sub - - Sub CreateTheZip() - Using zip as ZipFile = New ZipFile - AddHandler zip.AddProgress, AddressOf AddProgressHandler - zip.AddDirectory(System.IO.Path.GetFileName(DirToZip)) - zip.Save(ZipFileToCreate); - End Using - End Sub - - - - - - - - - - - - An event that is raised when an error occurs during open or read of files - while saving a zip archive. - - - - - Errors can occur as a file is being saved to the zip archive. For - example, the File.Open may fail, or a File.Read may fail, because of - lock conflicts or other reasons. If you add a handler to this event, - you can handle such errors in your own code. If you don't add a - handler, the library will throw an exception if it encounters an I/O - error during a call to Save(). - - - - Setting a handler implicitly sets to - ZipErrorAction.InvokeErrorEvent. - - - - The handler you add applies to all items that are - subsequently added to the ZipFile instance. If you set this - property after you have added items to the ZipFile, but before you - have called Save(), errors that occur while saving those items - will not cause the error handler to be invoked. - - - - If you want to handle any errors that occur with any entry in the zip - file using the same error handler, then add your error handler once, - before adding any entries to the zip archive. - - - - In the error handler method, you need to set the property on the - ZipErrorEventArgs.CurrentEntry. This communicates back to - DotNetZip what you would like to do with this particular error. Within - an error handler, if you set the ZipEntry.ZipErrorAction property - on the ZipEntry to ZipErrorAction.InvokeErrorEvent or if - you don't set it at all, the library will throw the exception. (It is the - same as if you had set the ZipEntry.ZipErrorAction property on the - ZipEntry to ZipErrorAction.Throw.) If you set the - ZipErrorEventArgs.Cancel to true, the entire Save() will be - canceled. - - - - In the case that you use ZipErrorAction.Skip, implying that - you want to skip the entry for which there's been an error, DotNetZip - tries to seek backwards in the output stream, and truncate all bytes - written on behalf of that particular entry. This works only if the - output stream is seekable. It will not work, for example, when using - ASPNET's Response.OutputStream. - - - - - - - This example shows how to use an event handler to handle - errors during save of the zip file. - - - public static void MyZipError(object sender, ZipErrorEventArgs e) - { - Console.WriteLine("Error saving {0}...", e.FileName); - Console.WriteLine(" Exception: {0}", e.exception); - ZipEntry entry = e.CurrentEntry; - string response = null; - // Ask the user whether he wants to skip this error or not - do - { - Console.Write("Retry, Skip, Throw, or Cancel ? (R/S/T/C) "); - response = Console.ReadLine(); - Console.WriteLine(); - - } while (response != null && - response[0]!='S' && response[0]!='s' && - response[0]!='R' && response[0]!='r' && - response[0]!='T' && response[0]!='t' && - response[0]!='C' && response[0]!='c'); - - e.Cancel = (response[0]=='C' || response[0]=='c'); - - if (response[0]=='S' || response[0]=='s') - entry.ZipErrorAction = ZipErrorAction.Skip; - else if (response[0]=='R' || response[0]=='r') - entry.ZipErrorAction = ZipErrorAction.Retry; - else if (response[0]=='T' || response[0]=='t') - entry.ZipErrorAction = ZipErrorAction.Throw; - } - - public void SaveTheFile() - { - string directoryToZip = "fodder"; - string directoryInArchive = "files"; - string zipFileToCreate = "Archive.zip"; - using (var zip = new ZipFile()) - { - // set the event handler before adding any entries - zip.ZipError += MyZipError; - zip.AddDirectory(directoryToZip, directoryInArchive); - zip.Save(zipFileToCreate); - } - } - - - - Private Sub MyZipError(ByVal sender As Object, ByVal e As Ionic.Zip.ZipErrorEventArgs) - ' At this point, the application could prompt the user for an action to take. - ' But in this case, this application will simply automatically skip the file, in case of error. - Console.WriteLine("Zip Error, entry {0}", e.CurrentEntry.FileName) - Console.WriteLine(" Exception: {0}", e.exception) - ' set the desired ZipErrorAction on the CurrentEntry to communicate that to DotNetZip - e.CurrentEntry.ZipErrorAction = Zip.ZipErrorAction.Skip - End Sub - - Public Sub SaveTheFile() - Dim directoryToZip As String = "fodder" - Dim directoryInArchive As String = "files" - Dim zipFileToCreate as String = "Archive.zip" - Using zipArchive As ZipFile = New ZipFile - ' set the event handler before adding any entries - AddHandler zipArchive.ZipError, AddressOf MyZipError - zipArchive.AddDirectory(directoryToZip, directoryInArchive) - zipArchive.Save(zipFileToCreate) - End Using - End Sub - - - - - - - - - Extracts all of the items in the zip archive, to the specified path in the - filesystem. The path can be relative or fully-qualified. - - - - - This method will extract all entries in the ZipFile to the - specified path. - - - - If an extraction of a file from the zip archive would overwrite an - existing file in the filesystem, the action taken is dictated by the - ExtractExistingFile property, which overrides any setting you may have - made on individual ZipEntry instances. By default, if you have not - set that property on the ZipFile instance, the entry will not - be extracted, the existing file will not be overwritten and an - exception will be thrown. To change this, set the property, or use the - overload that allows you to - specify an ExtractExistingFileAction parameter. - - - - The action to take when an extract would overwrite an existing file - applies to all entries. If you want to set this on a per-entry basis, - then you must use one of the ZipEntry.Extract methods. - - - - This method will send verbose output messages to the , if it is set on the ZipFile - instance. - - - - You may wish to take advantage of the ExtractProgress event. - - - - About timestamps: When extracting a file entry from a zip archive, the - extracted file gets the last modified time of the entry as stored in - the archive. The archive may also store extended file timestamp - information, including last accessed and created times. If these are - present in the ZipEntry, then the extracted file will also get - these times. - - - - A Directory entry is somewhat different. It will get the times as - described for a file entry, but, if there are file entries in the zip - archive that, when extracted, appear in the just-created directory, - then when those file entries are extracted, the last modified and last - accessed times of the directory will change, as a side effect. The - result is that after an extraction of a directory and a number of - files within the directory, the last modified and last accessed - timestamps on the directory will reflect the time that the last file - was extracted into the directory, rather than the time stored in the - zip archive for the directory. - - - - To compensate, when extracting an archive with ExtractAll, - DotNetZip will extract all the file and directory entries as described - above, but it will then make a second pass on the directories, and - reset the times on the directories to reflect what is stored in the - zip archive. - - - - This compensation is performed only within the context of an - ExtractAll. If you call ZipEntry.Extract on a directory - entry, the timestamps on directory in the filesystem will reflect the - times stored in the zip. If you then call ZipEntry.Extract on - a file entry, which is extracted into the directory, the timestamps on - the directory will be updated to the current time. - - - - - This example extracts all the entries in a zip archive file, to the - specified target directory. The extraction will overwrite any - existing files silently. - - - String TargetDirectory= "unpack"; - using(ZipFile zip= ZipFile.Read(ZipFileToExtract)) - { - zip.ExtractExistingFile= ExtractExistingFileAction.OverwriteSilently; - zip.ExtractAll(TargetDirectory); - } - - - - Dim TargetDirectory As String = "unpack" - Using zip As ZipFile = ZipFile.Read(ZipFileToExtract) - zip.ExtractExistingFile= ExtractExistingFileAction.OverwriteSilently - zip.ExtractAll(TargetDirectory) - End Using - - - - - - - - The path to which the contents of the zipfile will be extracted. - The path can be relative or fully-qualified. - - - - - - Extracts all of the items in the zip archive, to the specified path in the - filesystem, using the specified behavior when extraction would overwrite an - existing file. - - - - - - This method will extract all entries in the ZipFile to the specified - path. For an extraction that would overwrite an existing file, the behavior - is dictated by , which overrides any - setting you may have made on individual ZipEntry instances. - - - - The action to take when an extract would overwrite an existing file - applies to all entries. If you want to set this on a per-entry basis, - then you must use or one of the similar methods. - - - - Calling this method is equivalent to setting the property and then calling . - - - - This method will send verbose output messages to the - , if it is set on the ZipFile instance. - - - - - This example extracts all the entries in a zip archive file, to the - specified target directory. It does not overwrite any existing files. - - String TargetDirectory= "c:\\unpack"; - using(ZipFile zip= ZipFile.Read(ZipFileToExtract)) - { - zip.ExtractAll(TargetDirectory, ExtractExistingFileAction.DontOverwrite); - } - - - - Dim TargetDirectory As String = "c:\unpack" - Using zip As ZipFile = ZipFile.Read(ZipFileToExtract) - zip.ExtractAll(TargetDirectory, ExtractExistingFileAction.DontOverwrite) - End Using - - - - - The path to which the contents of the zipfile will be extracted. - The path can be relative or fully-qualified. - - - - The action to take if extraction would overwrite an existing file. - - - - - - Reads a zip file archive and returns the instance. - - - - - The stream is read using the default System.Text.Encoding, which is the - IBM437 codepage. - - - - - Thrown if the ZipFile cannot be read. The implementation of this method - relies on System.IO.File.OpenRead, which can throw a variety of exceptions, - including specific exceptions if a file is not found, an unauthorized access - exception, exceptions for poorly formatted filenames, and so on. - - - - The name of the zip archive to open. This can be a fully-qualified or relative - pathname. - - - . - - The instance read from the zip archive. - - - - - Reads a zip file archive from the named filesystem file using the - specified options. - - - - - This version of the Read() method allows the caller to pass - in a TextWriter an Encoding, via an instance of the - ReadOptions class. The ZipFile is read in using the - specified encoding for entries where UTF-8 encoding is not - explicitly specified. - - - - - - - This example shows how to read a zip file using the Big-5 Chinese - code page (950), and extract each entry in the zip file, while - sending status messages out to the Console. - - - - For this code to work as intended, the zipfile must have been - created using the big5 code page (CP950). This is typical, for - example, when using WinRar on a machine with CP950 set as the - default code page. In that case, the names of entries within the - Zip archive will be stored in that code page, and reading the zip - archive must be done using that code page. If the application did - not use the correct code page in ZipFile.Read(), then names of - entries within the zip archive would not be correctly retrieved. - - - - string zipToExtract = "MyArchive.zip"; - string extractDirectory = "extract"; - var options = new ReadOptions - { - StatusMessageWriter = System.Console.Out, - Encoding = System.Text.Encoding.GetEncoding(950) - }; - using (ZipFile zip = ZipFile.Read(zipToExtract, options)) - { - foreach (ZipEntry e in zip) - { - e.Extract(extractDirectory); - } - } - - - - - Dim zipToExtract as String = "MyArchive.zip" - Dim extractDirectory as String = "extract" - Dim options as New ReadOptions - options.Encoding = System.Text.Encoding.GetEncoding(950) - options.StatusMessageWriter = System.Console.Out - Using zip As ZipFile = ZipFile.Read(zipToExtract, options) - Dim e As ZipEntry - For Each e In zip - e.Extract(extractDirectory) - Next - End Using - - - - - - - - This example shows how to read a zip file using the default - code page, to remove entries that have a modified date before a given threshold, - sending status messages out to a StringWriter. - - - - var options = new ReadOptions - { - StatusMessageWriter = new System.IO.StringWriter() - }; - using (ZipFile zip = ZipFile.Read("PackedDocuments.zip", options)) - { - var Threshold = new DateTime(2007,7,4); - // We cannot remove the entry from the list, within the context of - // an enumeration of said list. - // So we add the doomed entry to a list to be removed later. - // pass 1: mark the entries for removal - var MarkedEntries = new System.Collections.Generic.List<ZipEntry>(); - foreach (ZipEntry e in zip) - { - if (e.LastModified < Threshold) - MarkedEntries.Add(e); - } - // pass 2: actually remove the entry. - foreach (ZipEntry zombie in MarkedEntries) - zip.RemoveEntry(zombie); - zip.Comment = "This archive has been updated."; - zip.Save(); - } - // can now use contents of sw, eg store in an audit log - - - - Dim options as New ReadOptions - options.StatusMessageWriter = New System.IO.StringWriter - Using zip As ZipFile = ZipFile.Read("PackedDocuments.zip", options) - Dim Threshold As New DateTime(2007, 7, 4) - ' We cannot remove the entry from the list, within the context of - ' an enumeration of said list. - ' So we add the doomed entry to a list to be removed later. - ' pass 1: mark the entries for removal - Dim MarkedEntries As New System.Collections.Generic.List(Of ZipEntry) - Dim e As ZipEntry - For Each e In zip - If (e.LastModified < Threshold) Then - MarkedEntries.Add(e) - End If - Next - ' pass 2: actually remove the entry. - Dim zombie As ZipEntry - For Each zombie In MarkedEntries - zip.RemoveEntry(zombie) - Next - zip.Comment = "This archive has been updated." - zip.Save - End Using - ' can now use contents of sw, eg store in an audit log - - - - - Thrown if the zipfile cannot be read. The implementation of - this method relies on System.IO.File.OpenRead, which - can throw a variety of exceptions, including specific - exceptions if a file is not found, an unauthorized access - exception, exceptions for poorly formatted filenames, and so - on. - - - - The name of the zip archive to open. - This can be a fully-qualified or relative pathname. - - - - The set of options to use when reading the zip file. - - - The ZipFile instance read from the zip archive. - - - - - - - Reads a zip file archive using the specified text encoding, the specified - TextWriter for status messages, and the specified ReadProgress event handler, - and returns the instance. - - - - The name of the zip archive to open. - This can be a fully-qualified or relative pathname. - - - - An event handler for Read operations. - - - - The System.IO.TextWriter to use for writing verbose status messages - during operations on the zip archive. A console application may wish to - pass System.Console.Out to get messages on the Console. A graphical - or headless application may wish to capture the messages in a different - TextWriter, such as a System.IO.StringWriter. - - - - The System.Text.Encoding to use when reading in the zip archive. Be - careful specifying the encoding. If the value you use here is not the same - as the Encoding used when the zip archive was created (possibly by a - different archiver) you will get unexpected results and possibly exceptions. - - - The instance read from the zip archive. - - - - - Reads a zip archive from a stream. - - - - - - When reading from a file, it's probably easier to just use - ZipFile.Read(String, ReadOptions). This - overload is useful when when the zip archive content is - available from an already-open stream. The stream must be - open and readable and seekable when calling this method. The - stream is left open when the reading is completed. - - - - Using this overload, the stream is read using the default - System.Text.Encoding, which is the IBM437 - codepage. If you want to specify the encoding to use when - reading the zipfile content, see - ZipFile.Read(Stream, ReadOptions). This - - - - Reading of zip content begins at the current position in the - stream. This means if you have a stream that concatenates - regular data and zip data, if you position the open, readable - stream at the start of the zip data, you will be able to read - the zip archive using this constructor, or any of the ZipFile - constructors that accept a as - input. Some examples of where this might be useful: the zip - content is concatenated at the end of a regular EXE file, as - some self-extracting archives do. (Note: SFX files produced - by DotNetZip do not work this way; they can be read as normal - ZIP files). Another example might be a stream being read from - a database, where the zip content is embedded within an - aggregate stream of data. - - - - - - - This example shows how to Read zip content from a stream, and - extract one entry into a different stream. In this example, - the filename "NameOfEntryInArchive.doc", refers only to the - name of the entry within the zip archive. A file by that - name is not created in the filesystem. The I/O is done - strictly with the given streams. - - - - using (ZipFile zip = ZipFile.Read(InputStream)) - { - zip.Extract("NameOfEntryInArchive.doc", OutputStream); - } - - - - Using zip as ZipFile = ZipFile.Read(InputStream) - zip.Extract("NameOfEntryInArchive.doc", OutputStream) - End Using - - - - the stream containing the zip data. - - The ZipFile instance read from the stream - - - - - Reads a zip file archive from the given stream using the - specified options. - - - - - - When reading from a file, it's probably easier to just use - ZipFile.Read(String, ReadOptions). This - overload is useful when when the zip archive content is - available from an already-open stream. The stream must be - open and readable and seekable when calling this method. The - stream is left open when the reading is completed. - - - - Reading of zip content begins at the current position in the - stream. This means if you have a stream that concatenates - regular data and zip data, if you position the open, readable - stream at the start of the zip data, you will be able to read - the zip archive using this constructor, or any of the ZipFile - constructors that accept a as - input. Some examples of where this might be useful: the zip - content is concatenated at the end of a regular EXE file, as - some self-extracting archives do. (Note: SFX files produced - by DotNetZip do not work this way; they can be read as normal - ZIP files). Another example might be a stream being read from - a database, where the zip content is embedded within an - aggregate stream of data. - - - - the stream containing the zip data. - - - The set of options to use when reading the zip file. - - - - Thrown if the zip archive cannot be read. - - - The ZipFile instance read from the stream. - - - - - - - Reads a zip archive from a stream, using the specified text Encoding, the - specified TextWriter for status messages, - and the specified ReadProgress event handler. - - - - - Reading of zip content begins at the current position in the stream. This - means if you have a stream that concatenates regular data and zip data, if - you position the open, readable stream at the start of the zip data, you - will be able to read the zip archive using this constructor, or any of the - ZipFile constructors that accept a as - input. Some examples of where this might be useful: the zip content is - concatenated at the end of a regular EXE file, as some self-extracting - archives do. (Note: SFX files produced by DotNetZip do not work this - way). Another example might be a stream being read from a database, where - the zip content is embedded within an aggregate stream of data. - - - - the stream containing the zip data. - - - The System.IO.TextWriter to which verbose status messages are written - during operations on the ZipFile. For example, in a console - application, System.Console.Out works, and will get a message for each entry - added to the ZipFile. If the TextWriter is null, no verbose messages - are written. - - - - The text encoding to use when reading entries that do not have the UTF-8 - encoding bit set. Be careful specifying the encoding. If the value you use - here is not the same as the Encoding used when the zip archive was created - (possibly by a different archiver) you will get unexpected results and - possibly exceptions. See the - property for more information. - - - - An event handler for Read operations. - - - an instance of ZipFile - - - - Checks the given file to see if it appears to be a valid zip file. - - - - - Calling this method is equivalent to calling with the testExtract parameter set to false. - - - - The file to check. - true if the file appears to be a zip file. - - - - Checks a file to see if it is a valid zip file. - - - - - This method opens the specified zip file, reads in the zip archive, - verifying the ZIP metadata as it reads. - - - - If everything succeeds, then the method returns true. If anything fails - - for example if an incorrect signature or CRC is found, indicating a - corrupt file, the the method returns false. This method also returns - false for a file that does not exist. - - - - If is true, as part of its check, this - method reads in the content for each entry, expands it, and checks CRCs. - This provides an additional check beyond verifying the zip header and - directory data. - - - - If is true, and if any of the zip entries - are protected with a password, this method will return false. If you want - to verify a ZipFile that has entries which are protected with a - password, you will need to do that manually. - - - - - The zip file to check. - true if the caller wants to extract each entry. - true if the file contains a valid zip file. - - - - Checks a stream to see if it contains a valid zip archive. - - - - - This method reads the zip archive contained in the specified stream, verifying - the ZIP metadata as it reads. If testExtract is true, this method also extracts - each entry in the archive, dumping all the bits into . - - - - If everything succeeds, then the method returns true. If anything fails - - for example if an incorrect signature or CRC is found, indicating a corrupt - file, the the method returns false. This method also returns false for a - file that does not exist. - - - - If testExtract is true, this method reads in the content for each - entry, expands it, and checks CRCs. This provides an additional check - beyond verifying the zip header data. - - - - If testExtract is true, and if any of the zip entries are protected - with a password, this method will return false. If you want to verify a - ZipFile that has entries which are protected with a password, you will need - to do that manually. - - - - - - The stream to check. - true if the caller wants to extract each entry. - true if the stream contains a valid zip archive. - - - - Delete file with retry on UnauthorizedAccessException. - - - - - When calling File.Delete() on a file that has been "recently" - created, the call sometimes fails with - UnauthorizedAccessException. This method simply retries the Delete 3 - times with a sleep between tries. - - - - the name of the file to be deleted - - - - Saves the Zip archive to a file, specified by the Name property of the - ZipFile. - - - - - The ZipFile instance is written to storage, typically a zip file - in a filesystem, only when the caller calls Save. In the typical - case, the Save operation writes the zip content to a temporary file, and - then renames the temporary file to the desired name. If necessary, this - method will delete a pre-existing file before the rename. - - - - The property is specified either explicitly, - or implicitly using one of the parameterized ZipFile constructors. For - COM Automation clients, the Name property must be set explicitly, - because COM Automation clients cannot call parameterized constructors. - - - - When using a filesystem file for the Zip output, it is possible to call - Save multiple times on the ZipFile instance. With each - call the zip content is re-written to the same output file. - - - - Data for entries that have been added to the ZipFile instance is - written to the output when the Save method is called. This means - that the input streams for those entries must be available at the time - the application calls Save. If, for example, the application - adds entries with AddEntry using a dynamically-allocated - MemoryStream, the memory stream must not have been disposed - before the call to Save. See the property for more discussion of the - availability requirements of the input stream for an entry, and an - approach for providing just-in-time stream lifecycle management. - - - - - - - - Thrown if you haven't specified a location or stream for saving the zip, - either in the constructor or by setting the Name property, or if you try - to save a regular zip archive to a filename with a .exe extension. - - - - Thrown if or is non-zero, and the number - of segments that would be generated for the spanned zip file during the - save operation exceeds 99. If this happens, you need to increase the - segment size. - - - - - - Save the file to a new zipfile, with the given name. - - - - - This method allows the application to explicitly specify the name of the zip - file when saving. Use this when creating a new zip file, or when - updating a zip archive. - - - - An application can also save a zip archive in several places by calling this - method multiple times in succession, with different filenames. - - - - The ZipFile instance is written to storage, typically a zip file in a - filesystem, only when the caller calls Save. The Save operation writes - the zip content to a temporary file, and then renames the temporary file - to the desired name. If necessary, this method will delete a pre-existing file - before the rename. - - - - - - Thrown if you specify a directory for the filename. - - - - The name of the zip archive to save to. Existing files will - be overwritten with great prejudice. - - - - This example shows how to create and Save a zip file. - - using (ZipFile zip = new ZipFile()) - { - zip.AddDirectory(@"c:\reports\January"); - zip.Save("January.zip"); - } - - - - Using zip As New ZipFile() - zip.AddDirectory("c:\reports\January") - zip.Save("January.zip") - End Using - - - - - - This example shows how to update a zip file. - - using (ZipFile zip = ZipFile.Read("ExistingArchive.zip")) - { - zip.AddFile("NewData.csv"); - zip.Save("UpdatedArchive.zip"); - } - - - - Using zip As ZipFile = ZipFile.Read("ExistingArchive.zip") - zip.AddFile("NewData.csv") - zip.Save("UpdatedArchive.zip") - End Using - - - - - - - Save the zip archive to the specified stream. - - - - - The ZipFile instance is written to storage - typically a zip file - in a filesystem, but using this overload, the storage can be anything - accessible via a writable stream - only when the caller calls Save. - - - - Use this method to save the zip content to a stream directly. A common - scenario is an ASP.NET application that dynamically generates a zip file - and allows the browser to download it. The application can call - Save(Response.OutputStream) to write a zipfile directly to the - output stream, without creating a zip file on the disk on the ASP.NET - server. - - - - Be careful when saving a file to a non-seekable stream, including - Response.OutputStream. When DotNetZip writes to a non-seekable - stream, the zip archive is formatted in such a way that may not be - compatible with all zip tools on all platforms. It's a perfectly legal - and compliant zip file, but some people have reported problems opening - files produced this way using the Mac OS archive utility. - - - - - - - This example saves the zipfile content into a MemoryStream, and - then gets the array of bytes from that MemoryStream. - - - using (var zip = new Ionic.Zip.ZipFile()) - { - zip.CompressionLevel= Ionic.Zlib.CompressionLevel.BestCompression; - zip.Password = "VerySecret."; - zip.Encryption = EncryptionAlgorithm.WinZipAes128; - zip.AddFile(sourceFileName); - MemoryStream output = new MemoryStream(); - zip.Save(output); - - byte[] zipbytes = output.ToArray(); - } - - - - - - This example shows a pitfall you should avoid. DO NOT read - from a stream, then try to save to the same stream. DO - NOT DO THIS: - - - - using (var fs = new FileStream(filename, FileMode.Open)) - { - using (var zip = Ionic.Zip.ZipFile.Read(inputStream)) - { - zip.AddEntry("Name1.txt", "this is the content"); - zip.Save(inputStream); // NO NO NO!! - } - } - - - - Better like this: - - - - using (var zip = Ionic.Zip.ZipFile.Read(filename)) - { - zip.AddEntry("Name1.txt", "this is the content"); - zip.Save(); // YES! - } - - - - - - The System.IO.Stream to write to. It must be - writable. If you created the ZipFile instance by calling - ZipFile.Read(), this stream must not be the same stream - you passed to ZipFile.Read(). - - - - - Adds to the ZipFile a set of files from the current working directory on - disk, that conform to the specified criteria. - - - - - This method selects files from the the current working directory matching - the specified criteria, and adds them to the ZipFile. - - - - Specify the criteria in statements of 3 elements: a noun, an operator, and - a value. Consider the string "name != *.doc" . The noun is "name". The - operator is "!=", implying "Not Equal". The value is "*.doc". That - criterion, in English, says "all files with a name that does not end in - the .doc extension." - - - - Supported nouns include "name" (or "filename") for the filename; "atime", - "mtime", and "ctime" for last access time, last modfied time, and created - time of the file, respectively; "attributes" (or "attrs") for the file - attributes; "size" (or "length") for the file length (uncompressed), and - "type" for the type of object, either a file or a directory. The - "attributes", "name" and "type" nouns both support = and != as operators. - The "size", "atime", "mtime", and "ctime" nouns support = and !=, and - >, >=, <, <= as well. The times are taken to be expressed in - local time. - - - - Specify values for the file attributes as a string with one or more of the - characters H,R,S,A,I,L in any order, implying file attributes of Hidden, - ReadOnly, System, Archive, NotContextIndexed, and ReparsePoint (symbolic - link) respectively. - - - - To specify a time, use YYYY-MM-DD-HH:mm:ss or YYYY/MM/DD-HH:mm:ss as the - format. If you omit the HH:mm:ss portion, it is assumed to be 00:00:00 - (midnight). - - - - The value for a size criterion is expressed in integer quantities of bytes, - kilobytes (use k or kb after the number), megabytes (m or mb), or gigabytes - (g or gb). - - - - The value for a name is a pattern to match against the filename, potentially - including wildcards. The pattern follows CMD.exe glob rules: * implies one - or more of any character, while ? implies one character. If the name - pattern contains any slashes, it is matched to the entire filename, - including the path; otherwise, it is matched against only the filename - without the path. This means a pattern of "*\*.*" matches all files one - directory level deep, while a pattern of "*.*" matches all files in all - directories. - - - - To specify a name pattern that includes spaces, use single quotes around the - pattern. A pattern of "'* *.*'" will match all files that have spaces in - the filename. The full criteria string for that would be "name = '* *.*'" . - - - - The value for a type criterion is either F (implying a file) or D (implying - a directory). - - - - Some examples: - - - - - criteria - Files retrieved - - - - name != *.xls - any file with an extension that is not .xls - - - - - name = *.mp3 - any file with a .mp3 extension. - - - - - *.mp3 - (same as above) any file with a .mp3 extension. - - - - - attributes = A - all files whose attributes include the Archive bit. - - - - - attributes != H - all files whose attributes do not include the Hidden bit. - - - - - mtime > 2009-01-01 - all files with a last modified time after January 1st, 2009. - - - - - size > 2gb - all files whose uncompressed size is greater than 2gb. - - - - - type = D - all directories in the filesystem. - - - - - - You can combine criteria with the conjunctions AND or OR. Using a string - like "name = *.txt AND size >= 100k" for the selectionCriteria retrieves - entries whose names end in .txt, and whose uncompressed size is greater than - or equal to 100 kilobytes. - - - - For more complex combinations of criteria, you can use parenthesis to group - clauses in the boolean logic. Without parenthesis, the precedence of the - criterion atoms is determined by order of appearance. Unlike the C# - language, the AND conjunction does not take precendence over the logical OR. - This is important only in strings that contain 3 or more criterion atoms. - In other words, "name = *.txt and size > 1000 or attributes = H" implies - "((name = *.txt AND size > 1000) OR attributes = H)" while "attributes = - H OR name = *.txt and size > 1000" evaluates to "((attributes = H OR name - = *.txt) AND size > 1000)". When in doubt, use parenthesis. - - - - Using time properties requires some extra care. If you want to retrieve all - entries that were last updated on 2009 February 14, specify a time range - like so:"mtime >= 2009-02-14 AND mtime < 2009-02-15". Read this to - say: all files updated after 12:00am on February 14th, until 12:00am on - February 15th. You can use the same bracketing approach to specify any time - period - a year, a month, a week, and so on. - - - - The syntax allows one special case: if you provide a string with no spaces, it is - treated as a pattern to match for the filename. Therefore a string like "*.xls" - will be equivalent to specifying "name = *.xls". - - - - There is no logic in this method that insures that the file inclusion - criteria are internally consistent. For example, it's possible to specify - criteria that says the file must have a size of less than 100 bytes, as well - as a size that is greater than 1000 bytes. Obviously no file will ever - satisfy such criteria, but this method does not detect such logical - inconsistencies. The caller is responsible for insuring the criteria are - sensible. - - - - Using this method, the file selection does not recurse into - subdirectories, and the full path of the selected files is included in the - entries added into the zip archive. If you don't like these behaviors, - see the other overloads of this method. - - - - - This example zips up all *.csv files in the current working directory. - - using (ZipFile zip = new ZipFile()) - { - // To just match on filename wildcards, - // use the shorthand form of the selectionCriteria string. - zip.AddSelectedFiles("*.csv"); - zip.Save(PathToZipArchive); - } - - - Using zip As ZipFile = New ZipFile() - zip.AddSelectedFiles("*.csv") - zip.Save(PathToZipArchive) - End Using - - - - The criteria for file selection - - - - Adds to the ZipFile a set of files from the disk that conform to the - specified criteria, optionally recursing into subdirectories. - - - - - This method selects files from the the current working directory matching - the specified criteria, and adds them to the ZipFile. If - recurseDirectories is true, files are also selected from - subdirectories, and the directory structure in the filesystem is - reproduced in the zip archive, rooted at the current working directory. - - - - Using this method, the full path of the selected files is included in the - entries added into the zip archive. If you don't want this behavior, use - one of the overloads of this method that allows the specification of a - directoryInArchive. - - - - For details on the syntax for the selectionCriteria parameter, see . - - - - - - - This example zips up all *.xml files in the current working directory, or any - subdirectory, that are larger than 1mb. - - - using (ZipFile zip = new ZipFile()) - { - // Use a compound expression in the selectionCriteria string. - zip.AddSelectedFiles("name = *.xml and size > 1024kb", true); - zip.Save(PathToZipArchive); - } - - - Using zip As ZipFile = New ZipFile() - ' Use a compound expression in the selectionCriteria string. - zip.AddSelectedFiles("name = *.xml and size > 1024kb", true) - zip.Save(PathToZipArchive) - End Using - - - - The criteria for file selection - - - If true, the file selection will recurse into subdirectories. - - - - - Adds to the ZipFile a set of files from a specified directory in the - filesystem, that conform to the specified criteria. - - - - - This method selects files that conform to the specified criteria, from the - the specified directory on disk, and adds them to the ZipFile. The search - does not recurse into subdirectores. - - - - Using this method, the full filesystem path of the files on disk is - reproduced on the entries added to the zip file. If you don't want this - behavior, use one of the other overloads of this method. - - - - For details on the syntax for the selectionCriteria parameter, see . - - - - - - - This example zips up all *.xml files larger than 1mb in the directory - given by "d:\rawdata". - - - using (ZipFile zip = new ZipFile()) - { - // Use a compound expression in the selectionCriteria string. - zip.AddSelectedFiles("name = *.xml and size > 1024kb", "d:\\rawdata"); - zip.Save(PathToZipArchive); - } - - - - Using zip As ZipFile = New ZipFile() - ' Use a compound expression in the selectionCriteria string. - zip.AddSelectedFiles("name = *.xml and size > 1024kb", "d:\rawdata) - zip.Save(PathToZipArchive) - End Using - - - - The criteria for file selection - - - The name of the directory on the disk from which to select files. - - - - - Adds to the ZipFile a set of files from the specified directory on disk, - that conform to the specified criteria. - - - - - - This method selects files from the the specified disk directory matching - the specified selection criteria, and adds them to the ZipFile. If - recurseDirectories is true, files are also selected from - subdirectories. - - - - The full directory structure in the filesystem is reproduced on the - entries added to the zip archive. If you don't want this behavior, use - one of the overloads of this method that allows the specification of a - directoryInArchive. - - - - For details on the syntax for the selectionCriteria parameter, see . - - - - - - This example zips up all *.csv files in the "files" directory, or any - subdirectory, that have been saved since 2009 February 14th. - - - using (ZipFile zip = new ZipFile()) - { - // Use a compound expression in the selectionCriteria string. - zip.AddSelectedFiles("name = *.csv and mtime > 2009-02-14", "files", true); - zip.Save(PathToZipArchive); - } - - - Using zip As ZipFile = New ZipFile() - ' Use a compound expression in the selectionCriteria string. - zip.AddSelectedFiles("name = *.csv and mtime > 2009-02-14", "files", true) - zip.Save(PathToZipArchive) - End Using - - - - - This example zips up all files in the current working - directory, and all its child directories, except those in - the excludethis subdirectory. - - Using Zip As ZipFile = New ZipFile(zipfile) - Zip.AddSelectedFfiles("name != 'excludethis\*.*'", datapath, True) - Zip.Save() - End Using - - - - The criteria for file selection - - - The filesystem path from which to select files. - - - - If true, the file selection will recurse into subdirectories. - - - - - Adds to the ZipFile a selection of files from the specified directory on - disk, that conform to the specified criteria, and using a specified root - path for entries added to the zip archive. - - - - - This method selects files from the specified disk directory matching the - specified selection criteria, and adds those files to the ZipFile, using - the specified directory path in the archive. The search does not recurse - into subdirectories. For details on the syntax for the selectionCriteria - parameter, see . - - - - - - - This example zips up all *.psd files in the "photos" directory that have - been saved since 2009 February 14th, and puts them all in a zip file, - using the directory name of "content" in the zip archive itself. When the - zip archive is unzipped, the folder containing the .psd files will be - named "content". - - - using (ZipFile zip = new ZipFile()) - { - // Use a compound expression in the selectionCriteria string. - zip.AddSelectedFiles("name = *.psd and mtime > 2009-02-14", "photos", "content"); - zip.Save(PathToZipArchive); - } - - - Using zip As ZipFile = New ZipFile - zip.AddSelectedFiles("name = *.psd and mtime > 2009-02-14", "photos", "content") - zip.Save(PathToZipArchive) - End Using - - - - - The criteria for selection of files to add to the ZipFile. - - - - The path to the directory in the filesystem from which to select files. - - - - Specifies a directory path to use to in place of the - directoryOnDisk. This path may, or may not, correspond to a real - directory in the current filesystem. If the files within the zip are - later extracted, this is the path used for the extracted file. Passing - null (nothing in VB) will use the path on the file name, if any; in other - words it would use directoryOnDisk, plus any subdirectory. Passing - the empty string ("") will insert the item at the root path within the - archive. - - - - - Adds to the ZipFile a selection of files from the specified directory on - disk, that conform to the specified criteria, optionally recursing through - subdirectories, and using a specified root path for entries added to the - zip archive. - - - - This method selects files from the specified disk directory that match the - specified selection criteria, and adds those files to the ZipFile, using - the specified directory path in the archive. If recurseDirectories - is true, files are also selected from subdirectories, and the directory - structure in the filesystem is reproduced in the zip archive, rooted at - the directory specified by directoryOnDisk. For details on the - syntax for the selectionCriteria parameter, see . - - - - - This example zips up all files that are NOT *.pst files, in the current - working directory and any subdirectories. - - - using (ZipFile zip = new ZipFile()) - { - zip.AddSelectedFiles("name != *.pst", SourceDirectory, "backup", true); - zip.Save(PathToZipArchive); - } - - - Using zip As ZipFile = New ZipFile - zip.AddSelectedFiles("name != *.pst", SourceDirectory, "backup", true) - zip.Save(PathToZipArchive) - End Using - - - - - The criteria for selection of files to add to the ZipFile. - - - - The path to the directory in the filesystem from which to select files. - - - - Specifies a directory path to use to in place of the - directoryOnDisk. This path may, or may not, correspond to a real - directory in the current filesystem. If the files within the zip are - later extracted, this is the path used for the extracted file. Passing - null (nothing in VB) will use the path on the file name, if any; in other - words it would use directoryOnDisk, plus any subdirectory. Passing - the empty string ("") will insert the item at the root path within the - archive. - - - - If true, the method also scans subdirectories for files matching the - criteria. - - - - - Updates the ZipFile with a selection of files from the disk that conform - to the specified criteria. - - - - This method selects files from the specified disk directory that match the - specified selection criteria, and Updates the ZipFile with those - files, using the specified directory path in the archive. If - recurseDirectories is true, files are also selected from - subdirectories, and the directory structure in the filesystem is - reproduced in the zip archive, rooted at the directory specified by - directoryOnDisk. For details on the syntax for the - selectionCriteria parameter, see . - - - - The criteria for selection of files to add to the ZipFile. - - - - The path to the directory in the filesystem from which to select files. - - - - Specifies a directory path to use to in place of the - directoryOnDisk. This path may, or may not, correspond to a - real directory in the current filesystem. If the files within the zip - are later extracted, this is the path used for the extracted file. - Passing null (nothing in VB) will use the path on the file name, if - any; in other words it would use directoryOnDisk, plus any - subdirectory. Passing the empty string ("") will insert the item at - the root path within the archive. - - - - If true, the method also scans subdirectories for files matching the criteria. - - - - - - - Retrieve entries from the zipfile by specified criteria. - - - - - This method allows callers to retrieve the collection of entries from the zipfile - that fit the specified criteria. The criteria are described in a string format, and - can include patterns for the filename; constraints on the size of the entry; - constraints on the last modified, created, or last accessed time for the file - described by the entry; or the attributes of the entry. - - - - For details on the syntax for the selectionCriteria parameter, see . - - - - This method is intended for use with a ZipFile that has been read from storage. - When creating a new ZipFile, this method will work only after the ZipArchive has - been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip - archive from storage.) Calling SelectEntries on a ZipFile that has not yet been - saved will deliver undefined results. - - - - - Thrown if selectionCriteria has an invalid syntax. - - - - This example selects all the PhotoShop files from within an archive, and extracts them - to the current working directory. - - using (ZipFile zip1 = ZipFile.Read(ZipFileName)) - { - var PhotoShopFiles = zip1.SelectEntries("*.psd"); - foreach (ZipEntry psd in PhotoShopFiles) - { - psd.Extract(); - } - } - - - Using zip1 As ZipFile = ZipFile.Read(ZipFileName) - Dim PhotoShopFiles as ICollection(Of ZipEntry) - PhotoShopFiles = zip1.SelectEntries("*.psd") - Dim psd As ZipEntry - For Each psd In PhotoShopFiles - psd.Extract - Next - End Using - - - the string that specifies which entries to select - a collection of ZipEntry objects that conform to the inclusion spec - - - - Retrieve entries from the zipfile by specified criteria. - - - - - This method allows callers to retrieve the collection of entries from the zipfile - that fit the specified criteria. The criteria are described in a string format, and - can include patterns for the filename; constraints on the size of the entry; - constraints on the last modified, created, or last accessed time for the file - described by the entry; or the attributes of the entry. - - - - For details on the syntax for the selectionCriteria parameter, see . - - - - This method is intended for use with a ZipFile that has been read from storage. - When creating a new ZipFile, this method will work only after the ZipArchive has - been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip - archive from storage.) Calling SelectEntries on a ZipFile that has not yet been - saved will deliver undefined results. - - - - - Thrown if selectionCriteria has an invalid syntax. - - - - - using (ZipFile zip1 = ZipFile.Read(ZipFileName)) - { - var UpdatedPhotoShopFiles = zip1.SelectEntries("*.psd", "UpdatedFiles"); - foreach (ZipEntry e in UpdatedPhotoShopFiles) - { - // prompt for extract here - if (WantExtract(e.FileName)) - e.Extract(); - } - } - - - Using zip1 As ZipFile = ZipFile.Read(ZipFileName) - Dim UpdatedPhotoShopFiles As ICollection(Of ZipEntry) = zip1.SelectEntries("*.psd", "UpdatedFiles") - Dim e As ZipEntry - For Each e In UpdatedPhotoShopFiles - ' prompt for extract here - If Me.WantExtract(e.FileName) Then - e.Extract - End If - Next - End Using - - - the string that specifies which entries to select - - - the directory in the archive from which to select entries. If null, then - all directories in the archive are used. - - - a collection of ZipEntry objects that conform to the inclusion spec - - - - Remove entries from the zipfile by specified criteria. - - - - - This method allows callers to remove the collection of entries from the zipfile - that fit the specified criteria. The criteria are described in a string format, and - can include patterns for the filename; constraints on the size of the entry; - constraints on the last modified, created, or last accessed time for the file - described by the entry; or the attributes of the entry. - - - - For details on the syntax for the selectionCriteria parameter, see . - - - - This method is intended for use with a ZipFile that has been read from storage. - When creating a new ZipFile, this method will work only after the ZipArchive has - been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip - archive from storage.) Calling SelectEntries on a ZipFile that has not yet been - saved will deliver undefined results. - - - - - Thrown if selectionCriteria has an invalid syntax. - - - - This example removes all entries in a zip file that were modified prior to January 1st, 2008. - - using (ZipFile zip1 = ZipFile.Read(ZipFileName)) - { - // remove all entries from prior to Jan 1, 2008 - zip1.RemoveEntries("mtime < 2008-01-01"); - // don't forget to save the archive! - zip1.Save(); - } - - - Using zip As ZipFile = ZipFile.Read(ZipFileName) - ' remove all entries from prior to Jan 1, 2008 - zip1.RemoveEntries("mtime < 2008-01-01") - ' do not forget to save the archive! - zip1.Save - End Using - - - the string that specifies which entries to select - the number of entries removed - - - - Remove entries from the zipfile by specified criteria, and within the specified - path in the archive. - - - - - This method allows callers to remove the collection of entries from the zipfile - that fit the specified criteria. The criteria are described in a string format, and - can include patterns for the filename; constraints on the size of the entry; - constraints on the last modified, created, or last accessed time for the file - described by the entry; or the attributes of the entry. - - - - For details on the syntax for the selectionCriteria parameter, see . - - - - This method is intended for use with a ZipFile that has been read from storage. - When creating a new ZipFile, this method will work only after the ZipArchive has - been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip - archive from storage.) Calling SelectEntries on a ZipFile that has not yet been - saved will deliver undefined results. - - - - - Thrown if selectionCriteria has an invalid syntax. - - - - - using (ZipFile zip1 = ZipFile.Read(ZipFileName)) - { - // remove all entries from prior to Jan 1, 2008 - zip1.RemoveEntries("mtime < 2008-01-01", "documents"); - // a call to ZipFile.Save will make the modifications permanent - zip1.Save(); - } - - - Using zip As ZipFile = ZipFile.Read(ZipFileName) - ' remove all entries from prior to Jan 1, 2008 - zip1.RemoveEntries("mtime < 2008-01-01", "documents") - ' a call to ZipFile.Save will make the modifications permanent - zip1.Save - End Using - - - - the string that specifies which entries to select - - the directory in the archive from which to select entries. If null, then - all directories in the archive are used. - - the number of entries removed - - - - Selects and Extracts a set of Entries from the ZipFile. - - - - - The entries are extracted into the current working directory. - - - - If any of the files to be extracted already exist, then the action taken is as - specified in the property on the - corresponding ZipEntry instance. By default, the action taken in this case is to - throw an exception. - - - - For information on the syntax of the selectionCriteria string, - see . - - - - - This example shows how extract all XML files modified after 15 January 2009. - - using (ZipFile zip = ZipFile.Read(zipArchiveName)) - { - zip.ExtractSelectedEntries("name = *.xml and mtime > 2009-01-15"); - } - - - the selection criteria for entries to extract. - - - - - - Selects and Extracts a set of Entries from the ZipFile. - - - - - The entries are extracted into the current working directory. When extraction would would - overwrite an existing filesystem file, the action taken is as specified in the - parameter. - - - - For information on the syntax of the string describing the entry selection criteria, - see . - - - - - This example shows how extract all XML files modified after 15 January 2009, - overwriting any existing files. - - using (ZipFile zip = ZipFile.Read(zipArchiveName)) - { - zip.ExtractSelectedEntries("name = *.xml and mtime > 2009-01-15", - ExtractExistingFileAction.OverwriteSilently); - } - - - - the selection criteria for entries to extract. - - - The action to take if extraction would overwrite an existing file. - - - - - Selects and Extracts a set of Entries from the ZipFile. - - - - - The entries are selected from the specified directory within the archive, and then - extracted into the current working directory. - - - - If any of the files to be extracted already exist, then the action taken is as - specified in the property on the - corresponding ZipEntry instance. By default, the action taken in this case is to - throw an exception. - - - - For information on the syntax of the string describing the entry selection criteria, - see . - - - - - This example shows how extract all XML files modified after 15 January 2009, - and writes them to the "unpack" directory. - - using (ZipFile zip = ZipFile.Read(zipArchiveName)) - { - zip.ExtractSelectedEntries("name = *.xml and mtime > 2009-01-15","unpack"); - } - - - - the selection criteria for entries to extract. - - - the directory in the archive from which to select entries. If null, then - all directories in the archive are used. - - - - - - - Selects and Extracts a set of Entries from the ZipFile. - - - - - The entries are extracted into the specified directory. If any of the files to be - extracted already exist, an exception will be thrown. - - - For information on the syntax of the string describing the entry selection criteria, - see . - - - - the selection criteria for entries to extract. - - - the directory in the archive from which to select entries. If null, then - all directories in the archive are used. - - - - the directory on the disk into which to extract. It will be created - if it does not exist. - - - - - Selects and Extracts a set of Entries from the ZipFile. - - - - - The entries are extracted into the specified directory. When extraction would would - overwrite an existing filesystem file, the action taken is as specified in the - parameter. - - - - For information on the syntax of the string describing the entry selection criteria, - see . - - - - - This example shows how extract all files with an XML extension or with a size larger than 100,000 bytes, - and puts them in the unpack directory. For any files that already exist in - that destination directory, they will not be overwritten. - - using (ZipFile zip = ZipFile.Read(zipArchiveName)) - { - zip.ExtractSelectedEntries("name = *.xml or size > 100000", - null, - "unpack", - ExtractExistingFileAction.DontOverwrite); - } - - - - the selection criteria for entries to extract. - - - The directory on the disk into which to extract. It will be created if it does not exist. - - - - The directory in the archive from which to select entries. If null, then - all directories in the archive are used. - - - - The action to take if extraction would overwrite an existing file. - - - - - - - - Static constructor for ZipFile - - - Code Pages 437 and 1252 for English are same - Code Page 1252 Windows Latin 1 (ANSI) - - Code Page 437 MS-DOS Latin US - - - - - - The default text encoding used in zip archives. It is numeric 437, also - known as IBM437. - - - - - - Generic IEnumerator support, for use of a ZipFile in an enumeration. - - - - You probably do not want to call GetEnumerator explicitly. Instead - it is implicitly called when you use a loop in C#, or a - For Each loop in VB.NET. - - - - This example reads a zipfile of a given name, then enumerates the - entries in that zip file, and displays the information about each - entry on the Console. - - using (ZipFile zip = ZipFile.Read(zipfile)) - { - bool header = true; - foreach (ZipEntry e in zip) - { - if (header) - { - System.Console.WriteLine("Zipfile: {0}", zip.Name); - System.Console.WriteLine("Version Needed: 0x{0:X2}", e.VersionNeeded); - System.Console.WriteLine("BitField: 0x{0:X2}", e.BitField); - System.Console.WriteLine("Compression Method: 0x{0:X2}", e.CompressionMethod); - System.Console.WriteLine("\n{1,-22} {2,-6} {3,4} {4,-8} {0}", - "Filename", "Modified", "Size", "Ratio", "Packed"); - System.Console.WriteLine(new System.String('-', 72)); - header = false; - } - - System.Console.WriteLine("{1,-22} {2,-6} {3,4:F0}% {4,-8} {0}", - e.FileName, - e.LastModified.ToString("yyyy-MM-dd HH:mm:ss"), - e.UncompressedSize, - e.CompressionRatio, - e.CompressedSize); - - e.Extract(); - } - } - - - - Dim ZipFileToExtract As String = "c:\foo.zip" - Using zip As ZipFile = ZipFile.Read(ZipFileToExtract) - Dim header As Boolean = True - Dim e As ZipEntry - For Each e In zip - If header Then - Console.WriteLine("Zipfile: {0}", zip.Name) - Console.WriteLine("Version Needed: 0x{0:X2}", e.VersionNeeded) - Console.WriteLine("BitField: 0x{0:X2}", e.BitField) - Console.WriteLine("Compression Method: 0x{0:X2}", e.CompressionMethod) - Console.WriteLine(ChrW(10) & "{1,-22} {2,-6} {3,4} {4,-8} {0}", _ - "Filename", "Modified", "Size", "Ratio", "Packed" ) - Console.WriteLine(New String("-"c, 72)) - header = False - End If - Console.WriteLine("{1,-22} {2,-6} {3,4:F0}% {4,-8} {0}", _ - e.FileName, _ - e.LastModified.ToString("yyyy-MM-dd HH:mm:ss"), _ - e.UncompressedSize, _ - e.CompressionRatio, _ - e.CompressedSize ) - e.Extract - Next - End Using - - - - A generic enumerator suitable for use within a foreach loop. - - - - An IEnumerator, for use of a ZipFile in a foreach construct. - - - - This method is included for COM support. An application generally does not call - this method directly. It is called implicitly by COM clients when enumerating - the entries in the ZipFile instance. In VBScript, this is done with a For Each - statement. In Javascript, this is done with new Enumerator(zipfile). - - - - The IEnumerator over the entries in the ZipFile. - - - - - This class exposes a set of COM-accessible wrappers for static - methods available on the ZipFile class. You don't need this - class unless you are using DotNetZip from a COM environment. - - - - - A wrapper for ZipFile.IsZipFile(string) - - The filename to of the zip file to check. - true if the file contains a valid zip file. - - - - A wrapper for ZipFile.IsZipFile(string, bool) - - - We cannot use "overloaded" Method names in COM interop. - So, here, we use a unique name. - - The filename to of the zip file to check. - true if the file contains a valid zip file. - - - - A wrapper for ZipFile.CheckZip(string) - - The filename to of the zip file to check. - - true if the named zip file checks OK. Otherwise, false. - - - - A COM-friendly wrapper for the static method . - - - The filename to of the zip file to check. - - The password to check. - - true if the named zip file checks OK. Otherwise, false. - - - - A wrapper for ZipFile.FixZipDirectory(string) - - The filename to of the zip file to fix. - - - - A wrapper for ZipFile.LibraryVersion - - - the version number on the DotNetZip assembly, formatted as a string. - - - - - An enum that provides the various encryption algorithms supported by this - library. - - - - - - PkzipWeak implies the use of Zip 2.0 encryption, which is known to be - weak and subvertible. - - - - A note on interoperability: Values of PkzipWeak and None are - specified in PKWARE's zip - specification, and are considered to be "standard". Zip archives - produced using these options will be interoperable with many other zip tools - and libraries, including Windows Explorer. - - - - Values of WinZipAes128 and WinZipAes256 are not part of the Zip - specification, but rather imply the use of a vendor-specific extension from - WinZip. If you want to produce interoperable Zip archives, do not use these - values. For example, if you produce a zip archive using WinZipAes256, you - will be able to open it in Windows Explorer on Windows XP and Vista, but you - will not be able to extract entries; trying this will lead to an "unspecified - error". For this reason, some people have said that a zip archive that uses - WinZip's AES encryption is not actually a zip archive at all. A zip archive - produced this way will be readable with the WinZip tool (Version 11 and - beyond). - - - - There are other third-party tools and libraries, both commercial and - otherwise, that support WinZip's AES encryption. These will be able to read - AES-encrypted zip archives produced by DotNetZip, and conversely applications - that use DotNetZip to read zip archives will be able to read AES-encrypted - archives produced by those tools or libraries. Consult the documentation for - those other tools and libraries to find out if WinZip's AES encryption is - supported. - - - - In case you care: According to the WinZip specification, the - actual AES key used is derived from the via an - algorithm that complies with RFC 2898, using an iteration - count of 1000. The algorithm is sometimes referred to as PBKDF2, which stands - for "Password Based Key Derivation Function #2". - - - - A word about password strength and length: The AES encryption technology is - very good, but any system is only as secure as the weakest link. If you want - to secure your data, be sure to use a password that is hard to guess. To make - it harder to guess (increase its "entropy"), you should make it longer. If - you use normal characters from an ASCII keyboard, a password of length 20 will - be strong enough that it will be impossible to guess. For more information on - that, I'd encourage you to read this - article. - - - - - - - No encryption at all. - - - - - Traditional or Classic pkzip encryption. - - - - - WinZip AES encryption (128 key bits). - - - - - WinZip AES encryption (256 key bits). - - - - - An encryption algorithm that is not supported by DotNetZip. - - - - - Delegate in which the application writes the ZipEntry content for the named entry. - - - The name of the entry that must be written. - The stream to which the entry data should be written. - - - When you add an entry and specify a WriteDelegate, via , the application - code provides the logic that writes the entry data directly into the zip file. - - - - - This example shows how to define a WriteDelegate that obtains a DataSet, and then - writes the XML for the DataSet into the zip archive. There's no need to - save the XML to a disk file first. - - - private void WriteEntry (String filename, Stream output) - { - DataSet ds1 = ObtainDataSet(); - ds1.WriteXml(output); - } - - private void Run() - { - using (var zip = new ZipFile()) - { - zip.AddEntry(zipEntryName, WriteEntry); - zip.Save(zipFileName); - } - } - - - - Private Sub WriteEntry (ByVal filename As String, ByVal output As Stream) - DataSet ds1 = ObtainDataSet() - ds1.WriteXml(stream) - End Sub - - Public Sub Run() - Using zip = New ZipFile - zip.AddEntry(zipEntryName, New WriteDelegate(AddressOf WriteEntry)) - zip.Save(zipFileName) - End Using - End Sub - - - - - - - Delegate in which the application opens the stream, just-in-time, for the named entry. - - - - The name of the ZipEntry that the application should open the stream for. - - - - When you add an entry via , the application code provides the logic that - opens and closes the stream for the given ZipEntry. - - - - - - - Delegate in which the application closes the stream, just-in-time, for the named entry. - - - - The name of the ZipEntry that the application should close the stream for. - - - The stream to be closed. - - - When you add an entry via , the application code provides the logic that - opens and closes the stream for the given ZipEntry. - - - - - - - Delegate for the callback by which the application tells the - library the CompressionLevel to use for a file. - - - - - Using this callback, the application can, for example, specify that - previously-compressed files (.mp3, .png, .docx, etc) should use a - CompressionLevel of None, or can set the compression level based - on any other factor. - - - - - - - In an EventArgs type, indicates which sort of progress event is being - reported. - - - There are events for reading, events for saving, and events for - extracting. This enumeration allows a single EventArgs type to be sued to - describe one of multiple subevents. For example, a SaveProgress event is - invoked before, after, and during the saving of a single entry. The value - of an enum with this type, specifies which event is being triggered. The - same applies to Extraction, Reading and Adding events. - - - - - Indicates that a Add() operation has started. - - - - - Indicates that an individual entry in the archive has been added. - - - - - Indicates that a Add() operation has completed. - - - - - Indicates that a Read() operation has started. - - - - - Indicates that an individual entry in the archive is about to be read. - - - - - Indicates that an individual entry in the archive has just been read. - - - - - Indicates that a Read() operation has completed. - - - - - The given event reports the number of bytes read so far - during a Read() operation. - - - - - Indicates that a Save() operation has started. - - - - - Indicates that an individual entry in the archive is about to be written. - - - - - Indicates that an individual entry in the archive has just been saved. - - - - - Indicates that a Save() operation has completed. - - - - - Indicates that the zip archive has been created in a - temporary location during a Save() operation. - - - - - Indicates that the temporary file is about to be renamed to the final archive - name during a Save() operation. - - - - - Indicates that the temporary file is has just been renamed to the final archive - name during a Save() operation. - - - - - Indicates that the self-extracting archive has been compiled - during a Save() operation. - - - - - The given event is reporting the number of source bytes that have run through the compressor so far - during a Save() operation. - - - - - Indicates that an entry is about to be extracted. - - - - - Indicates that an entry has just been extracted. - - - - - Indicates that extraction of an entry would overwrite an existing - filesystem file. You must use - - ExtractExistingFileAction.InvokeExtractProgressEvent in the call - to ZipEntry.Extract() in order to receive this event. - - - - - The given event is reporting the number of bytes written so far for - the current entry during an Extract() operation. - - - - - Indicates that an ExtractAll operation is about to begin. - - - - - Indicates that an ExtractAll operation has completed. - - - - - Indicates that an error has occurred while saving a zip file. - This generally means the file cannot be opened, because it has been - removed, or because it is locked by another process. It can also - mean that the file cannot be Read, because of a range lock conflict. - - - - - Provides information about the progress of a save, read, or extract operation. - This is a base class; you will probably use one of the classes derived from this one. - - - - - The total number of entries to be saved or extracted. - - - - - The name of the last entry saved or extracted. - - - - - In an event handler, set this to cancel the save or extract - operation that is in progress. - - - - - The type of event being reported. - - - - - Returns the archive name associated to this event. - - - - - The number of bytes read or written so far for this entry. - - - - - Total number of bytes that will be read or written for this entry. - This number will be -1 if the value cannot be determined. - - - - - Provides information about the progress of a Read operation. - - - - - Provides information about the progress of a Add operation. - - - - - Provides information about the progress of a save operation. - - - - - Constructor for the SaveProgressEventArgs. - - the name of the zip archive. - whether this is before saving the entry, or after - The total number of entries in the zip archive. - Number of entries that have been saved. - The entry involved in the event. - - - - Number of entries saved so far. - - - - - Provides information about the progress of the extract operation. - - - - - Constructor for the ExtractProgressEventArgs. - - the name of the zip archive. - whether this is before saving the entry, or after - The total number of entries in the zip archive. - Number of entries that have been extracted. - The entry involved in the event. - The location to which entries are extracted. - - - - Number of entries extracted so far. This is set only if the - EventType is Extracting_BeforeExtractEntry or Extracting_AfterExtractEntry, and - the Extract() is occurring witin the scope of a call to ExtractAll(). - - - - - Returns the extraction target location, a filesystem path. - - - - - Provides information about the an error that occurred while zipping. - - - - - Returns the exception that occurred, if any. - - - - - Returns the name of the file that caused the exception, if any. - - - - - Issued when an ZipEntry.ExtractWithPassword() method is invoked - with an incorrect password. - - - - - Default ctor. - - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - The innerException for this exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The serialization info for the exception. - The streaming context from which to deserialize. - - - - Indicates that a read was attempted on a stream, and bad or incomplete data was - received. - - - - - Default ctor. - - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - The innerException for this exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The serialization info for the exception. - The streaming context from which to deserialize. - - - - Issued when an CRC check fails upon extracting an entry from a zip archive. - - - - - Default ctor. - - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The serialization info for the exception. - The streaming context from which to deserialize. - - - - Issued when errors occur saving a self-extracting archive. - - - - - Default ctor. - - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The serialization info for the exception. - The streaming context from which to deserialize. - - - - Indicates that an operation was attempted on a ZipFile which was not possible - given the state of the instance. For example, if you call Save() on a ZipFile - which has no filename set, you can get this exception. - - - - - Default ctor. - - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - The innerException for this exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The serialization info for the exception. - The streaming context from which to deserialize. - - - - Base class for all exceptions defined by and throw by the Zip library. - - - - - Default ctor. - - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - The innerException for this exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The serialization info for the exception. - The streaming context from which to deserialize. - - - - An enum for the options when extracting an entry would overwrite an existing file. - - - - - This enum describes the actions that the library can take when an - Extract() or ExtractWithPassword() method is called to extract an - entry to a filesystem, and the extraction would overwrite an existing filesystem - file. - - - - - - - Throw an exception when extraction would overwrite an existing file. (For - COM clients, this is a 0 (zero).) - - - - - When extraction would overwrite an existing file, overwrite the file silently. - The overwrite will happen even if the target file is marked as read-only. - (For COM clients, this is a 1.) - - - - - When extraction would overwrite an existing file, don't overwrite the file, silently. - (For COM clients, this is a 2.) - - - - - When extraction would overwrite an existing file, invoke the ExtractProgress - event, using an event type of . In - this way, the application can decide, just-in-time, whether to overwrite the - file. For example, a GUI application may wish to pop up a dialog to allow - the user to choose. You may want to examine the property before making - the decision. If, after your processing in the Extract progress event, you - want to NOT extract the file, set - on the ZipProgressEventArgs.CurrentEntry to DoNotOverwrite. - If you do want to extract the file, set ZipEntry.ExtractExistingFile - to OverwriteSilently. If you want to cancel the Extraction, set - ZipProgressEventArgs.Cancel to true. Cancelling differs from using - DoNotOverwrite in that a cancel will not extract any further entries, if - there are any. (For COM clients, the value of this enum is a 3.) - - - - - Collects general purpose utility methods. - - - - private null constructor - - - - Utility routine for transforming path names from filesystem format (on Windows that means backslashes) to - a format suitable for use within zipfiles. This means trimming the volume letter and colon (if any) And - swapping backslashes for forward slashes. - - source path. - transformed path - - - - Sanitize paths in zip files. This means making sure that relative paths in a zip file don't go outside - the top directory. Entries like something/../../../../Temp/evil.txt get sanitized to Temp/evil.txt - when extracting - - A path with forward slashes as directory separator - sanitized path - - - - Finds a signature in the zip stream. This is useful for finding - the end of a zip entry, for example, or the beginning of the next ZipEntry. - - - - - Scans through 64k at a time. - - - - If the method fails to find the requested signature, the stream Position - after completion of this method is unchanged. If the method succeeds in - finding the requested signature, the stream position after completion is - direct AFTER the signature found in the stream. - - - - The stream to search - The 4-byte signature to find - The number of bytes read - - - - Create a pseudo-random filename, suitable for use as a temporary - file, and open it. - - - - This method produces a filename of the form - DotNetZip-xxxxxxxx.tmp, where xxxxxxxx is replaced by randomly - chosen characters, and creates that file. - - - - - - Workitem 7889: handle ERROR_LOCK_VIOLATION during read - - - This could be gracefully handled with an extension attribute, but - This assembly used to be built for .NET 2.0, so could not use - extension methods. - - - - - A decorator stream. It wraps another stream, and performs bookkeeping - to keep track of the stream Position. - - - - In some cases, it is not possible to get the Position of a stream, let's - say, on a write-only output stream like ASP.NET's - Response.OutputStream, or on a different write-only stream - provided as the destination for the zip by the application. In this - case, programmers can use this counting stream to count the bytes read - or written. - - - Consider the scenario of an application that saves a self-extracting - archive (SFX), that uses a custom SFX stub. - - - Saving to a filesystem file, the application would open the - filesystem file (getting a FileStream), save the custom sfx stub - into it, and then call ZipFile.Save(), specifying the same - FileStream. ZipFile.Save() does the right thing for the zipentry - offsets, by inquiring the Position of the FileStream before writing - any data, and then adding that initial offset into any ZipEntry - offsets in the zip directory. Everything works fine. - - - Now suppose the application is an ASPNET application and it saves - directly to Response.OutputStream. It's not possible for DotNetZip to - inquire the Position, so the offsets for the SFX will be wrong. - - - The workaround is for the application to use this class to wrap - HttpResponse.OutputStream, then write the SFX stub and the ZipFile - into that wrapper stream. Because ZipFile.Save() can inquire the - Position, it will then do the right thing with the offsets. - - - - - - The constructor. - - The underlying stream - - - - Gets the wrapped stream. - - - - - The count of bytes written out to the stream. - - - - - the count of bytes that have been read from the stream. - - - - - Adjust the byte count on the stream. - - - - the number of bytes to subtract from the count. - - - - - Subtract delta from the count of bytes written to the stream. - This is necessary when seeking back, and writing additional data, - as happens in some cases when saving Zip files. - - - - - - The read method. - - The buffer to hold the data read from the stream. - the offset within the buffer to copy the first byte read. - the number of bytes to read. - the number of bytes read, after decryption and decompression. - - - - Write data into the stream. - - The buffer holding data to write to the stream. - the offset within that data array to find the first byte to write. - the number of bytes to write. - - - - Whether the stream can be read. - - - - - Whether it is possible to call Seek() on the stream. - - - - - Whether it is possible to call Write() on the stream. - - - - - Flushes the underlying stream. - - - - - The length of the underlying stream. - - - - - Returns the sum of number of bytes written, plus the initial - offset before writing. - - - - - The Position of the stream. - - - - - Seek in the stream. - - the offset point to seek to - the reference point from which to seek - The new position - - - - Set the length of the underlying stream. Be careful with this! - - - the length to set on the underlying stream. - - - - This is a helper class supporting WinZip AES encryption. - This class is intended for use only by the DotNetZip library. - - - - Most uses of the DotNetZip library will not involve direct calls into - the WinZipAesCrypto class. Instead, the WinZipAesCrypto class is - instantiated and used by the ZipEntry() class when WinZip AES - encryption or decryption on an entry is employed. - - - - - A stream that encrypts as it writes, or decrypts as it reads. The - Crypto is AES in CTR (counter) mode, which is compatible with the AES - encryption employed by WinZip 12.0. - - - - The AES/CTR encryption protocol used by WinZip works like this: - - - start with a counter, initialized to zero. - - - to encrypt, take the data by 16-byte blocks. For each block: - - apply the transform to the counter - - increement the counter - - XOR the result of the transform with the plaintext to - get the ciphertext. - - compute the mac on the encrypted bytes - - when finished with all blocks, store the computed MAC. - - - to decrypt, take the data by 16-byte blocks. For each block: - - compute the mac on the encrypted bytes, - - apply the transform to the counter - - increement the counter - - XOR the result of the transform with the ciphertext to - get the plaintext. - - when finished with all blocks, compare the computed MAC against - the stored MAC - - - - - - - The constructor. - - The underlying stream - To either encrypt or decrypt. - The pre-initialized WinZipAesCrypto object. - The maximum number of bytes to read from the stream. - - - - Returns the final HMAC-SHA1-80 for the data that was encrypted. - - - - - Close the stream. - - - - - Returns true if the stream can be read. - - - - - Always returns false. - - - - - Returns true if the CryptoMode is Encrypt. - - - - - Flush the content in the stream. - - - - - Getting this property throws a NotImplementedException. - - - - - Getting or Setting this property throws a NotImplementedException. - - - - - This method throws a NotImplementedException. - - - - - This method throws a NotImplementedException. - - - - - This class implements the "traditional" or "classic" PKZip encryption, - which today is considered to be weak. On the other hand it is - ubiquitous. This class is intended for use only by the DotNetZip - library. - - - - Most uses of the DotNetZip library will not involve direct calls into - the ZipCrypto class. Instead, the ZipCrypto class is instantiated and - used by the ZipEntry() class when encryption or decryption on an entry - is employed. If for some reason you really wanted to use a weak - encryption algorithm in some other application, you might use this - library. But you would be much better off using one of the built-in - strong encryption libraries in the .NET Framework, like the AES - algorithm or SHA. - - - - - The default constructor for ZipCrypto. - - - - This class is intended for internal use by the library only. It's - probably not useful to you. Seriously. Stop reading this - documentation. It's a waste of your time. Go do something else. - Check the football scores. Go get an ice cream with a friend. - Seriously. - - - - - - From AppNote.txt: - unsigned char decrypt_byte() - local unsigned short temp - temp :=- Key(2) | 2 - decrypt_byte := (temp * (temp ^ 1)) bitshift-right 8 - end decrypt_byte - - - - - Call this method on a cipher text to render the plaintext. You must - first initialize the cipher with a call to InitCipher. - - - - - var cipher = new ZipCrypto(); - cipher.InitCipher(Password); - // Decrypt the header. This has a side effect of "further initializing the - // encryption keys" in the traditional zip encryption. - byte[] DecryptedMessage = cipher.DecryptMessage(EncryptedMessage); - - - - The encrypted buffer. - - The number of bytes to encrypt. - Should be less than or equal to CipherText.Length. - - - The plaintext. - - - - This is the converse of DecryptMessage. It encrypts the plaintext - and produces a ciphertext. - - - The plain text buffer. - - - The number of bytes to encrypt. - Should be less than or equal to plainText.Length. - - - The ciphertext. - - - - This initializes the cipher with the given password. - See AppNote.txt for details. - - - - The passphrase for encrypting or decrypting with this cipher. - - - - - Step 1 - Initializing the encryption keys - ----------------------------------------- - Start with these keys: - Key(0) := 305419896 (0x12345678) - Key(1) := 591751049 (0x23456789) - Key(2) := 878082192 (0x34567890) - - Then, initialize the keys with a password: - - loop for i from 0 to length(password)-1 - update_keys(password(i)) - end loop - - Where update_keys() is defined as: - - update_keys(char): - Key(0) := crc32(key(0),char) - Key(1) := Key(1) + (Key(0) bitwiseAND 000000ffH) - Key(1) := Key(1) * 134775813 + 1 - Key(2) := crc32(key(2),key(1) rightshift 24) - end update_keys - - Where crc32(old_crc,char) is a routine that given a CRC value and a - character, returns an updated CRC value after applying the CRC-32 - algorithm described elsewhere in this document. - - - - - After the keys are initialized, then you can use the cipher to - encrypt the plaintext. - - - - Essentially we encrypt the password with the keys, then discard the - ciphertext for the password. This initializes the keys for later use. - - - - - - - A Stream for reading and concurrently decrypting data from a zip file, - or for writing and concurrently encrypting data to a zip file. - - - - The constructor. - The underlying stream - To either encrypt or decrypt. - The pre-initialized ZipCrypto object. - - - - Represents a single entry in a ZipFile. Typically, applications get a ZipEntry - by enumerating the entries within a ZipFile, or by adding an entry to a ZipFile. - - - - - True if the referenced entry is a directory. - - - - - Provides a human-readable string with information about the ZipEntry. - - - - - Reads one entry from the zip directory structure in the zip file. - - - - The zipfile for which a directory entry will be read. From this param, the - method gets the ReadStream and the expected text encoding - (ProvisionalAlternateEncoding) which is used if the entry is not marked - UTF-8. - - - - a list of previously seen entry names; used to prevent duplicates. - - - the entry read from the archive. - - - - Returns true if the passed-in value is a valid signature for a ZipDirEntry. - - the candidate 4-byte signature value. - true, if the signature is valid according to the PKWare spec. - - - - Default constructor. - - - Applications should never need to call this directly. It is exposed to - support COM Automation environments. - - - - - The time and date at which the file indicated by the ZipEntry was - last modified. - - - - - The DotNetZip library sets the LastModified value for an entry, equal to - the Last Modified time of the file in the filesystem. If an entry is - added from a stream, the library uses System.DateTime.Now for this - value, for the given entry. - - - - This property allows the application to retrieve and possibly set the - LastModified value on an entry, to an arbitrary value. values with a - setting of DateTimeKind.Unspecified are taken to be expressed as - DateTimeKind.Local. - - - - Be aware that because of the way PKWare's - Zip specification describes how times are stored in the zip file, - the full precision of the System.DateTime datatype is not stored - for the last modified time when saving zip files. For more information on - how times are formatted, see the PKZip specification. - - - - The actual last modified time of a file can be stored in multiple ways in - the zip file, and they are not mutually exclusive: - - - - - In the so-called "DOS" format, which has a 2-second precision. Values - are rounded to the nearest even second. For example, if the time on the - file is 12:34:43, then it will be stored as 12:34:44. This first value - is accessible via the LastModified property. This value is always - present in the metadata for each zip entry. In some cases the value is - invalid, or zero. - - - - In the so-called "Windows" or "NTFS" format, as an 8-byte integer - quantity expressed as the number of 1/10 milliseconds (in other words - the number of 100 nanosecond units) since January 1, 1601 (UTC). This - format is how Windows represents file times. This time is accessible - via the ModifiedTime property. - - - - In the "Unix" format, a 4-byte quantity specifying the number of seconds since - January 1, 1970 UTC. - - - - In an older format, now deprecated but still used by some current - tools. This format is also a 4-byte quantity specifying the number of - seconds since January 1, 1970 UTC. - - - - - - Zip tools and libraries will always at least handle (read or write) the - DOS time, and may also handle the other time formats. Keep in mind that - while the names refer to particular operating systems, there is nothing in - the time formats themselves that prevents their use on other operating - systems. - - - - When reading ZIP files, the DotNetZip library reads the Windows-formatted - time, if it is stored in the entry, and sets both LastModified and - ModifiedTime to that value. When writing ZIP files, the DotNetZip - library by default will write both time quantities. It can also emit the - Unix-formatted time if desired (See .) - - - - The last modified time of the file created upon a call to - ZipEntry.Extract() may be adjusted during extraction to compensate - for differences in how the .NET Base Class Library deals with daylight - saving time (DST) versus how the Windows filesystem deals with daylight - saving time. Raymond Chen provides - some good context. - - - - In a nutshell: Daylight savings time rules change regularly. In 2007, for - example, the inception week of DST changed. In 1977, DST was in place all - year round. In 1945, likewise. And so on. Win32 does not attempt to - guess which time zone rules were in effect at the time in question. It - will render a time as "standard time" and allow the app to change to DST - as necessary. .NET makes a different choice. - - - - Compare the output of FileInfo.LastWriteTime.ToString("f") with what you - see in the Windows Explorer property sheet for a file that was last - written to on the other side of the DST transition. For example, suppose - the file was last modified on October 17, 2003, during DST but DST is not - currently in effect. Explorer's file properties reports Thursday, October - 17, 2003, 8:45:38 AM, but .NETs FileInfo reports Thursday, October 17, - 2003, 9:45 AM. - - - - Win32 says, "Thursday, October 17, 2002 8:45:38 AM PST". Note: Pacific - STANDARD Time. Even though October 17 of that year occurred during Pacific - Daylight Time, Win32 displays the time as standard time because that's - what time it is NOW. - - - - .NET BCL assumes that the current DST rules were in place at the time in - question. So, .NET says, "Well, if the rules in effect now were also in - effect on October 17, 2003, then that would be daylight time" so it - displays "Thursday, October 17, 2003, 9:45 AM PDT" - daylight time. - - - - So .NET gives a value which is more intuitively correct, but is also - potentially incorrect, and which is not invertible. Win32 gives a value - which is intuitively incorrect, but is strictly correct. - - - - Because of this funkiness, this library adds one hour to the LastModified - time on the extracted file, if necessary. That is to say, if the time in - question had occurred in what the .NET Base Class Library assumed to be - DST. This assumption may be wrong given the constantly changing DST rules, - but it is the best we can do. - - - - - - - - Ability to set Last Modified DOS time to zero - (for using with EmitTimesInWindowsFormatWhenSaving+EmitTimesInUnixFormatWhenSaving setted to false) - some flasher hardware use as marker of first binary - - - - - Last Modified time for the file represented by the entry. - - - - - - This value corresponds to the "last modified" time in the NTFS file times - as described in the Zip - specification. When getting this property, the value may be - different from . When setting the property, - the property also gets set, but with a lower - precision. - - - - Let me explain. It's going to take a while, so get - comfortable. Originally, waaaaay back in 1989 when the ZIP specification - was originally described by the esteemed Mr. Phil Katz, the dominant - operating system of the time was MS-DOS. MSDOS stored file times with a - 2-second precision, because, c'mon, who is ever going to need better - resolution than THAT? And so ZIP files, regardless of the platform on - which the zip file was created, store file times in exactly the same format that DOS used - in 1989. - - - - Since then, the ZIP spec has evolved, but the internal format for file - timestamps remains the same. Despite the fact that the way times are - stored in a zip file is rooted in DOS heritage, any program on any - operating system can format a time in this way, and most zip tools and - libraries DO - they round file times to the nearest even second and store - it just like DOS did 25+ years ago. - - - - PKWare extended the ZIP specification to allow a zip file to store what - are called "NTFS Times" and "Unix(tm) times" for a file. These are the - last write, last access, and file creation - times of a particular file. These metadata are not actually specific - to NTFS or Unix. They are tracked for each file by NTFS and by various - Unix filesystems, but they are also tracked by other filesystems, too. - The key point is that the times are formatted in the zip file - in the same way that NTFS formats the time (ticks since win32 epoch), - or in the same way that Unix formats the time (seconds since Unix - epoch). As with the DOS time, any tool or library running on any - operating system is capable of formatting a time in one of these ways - and embedding it into the zip file. - - - - These extended times are higher precision quantities than the DOS time. - As described above, the (DOS) LastModified has a precision of 2 seconds. - The Unix time is stored with a precision of 1 second. The NTFS time is - stored with a precision of 0.0000001 seconds. The quantities are easily - convertible, except for the loss of precision you may incur. - - - - A zip archive can store the {C,A,M} times in NTFS format, in Unix format, - or not at all. Often a tool running on Unix or Mac will embed the times - in Unix format (1 second precision), while WinZip running on Windows might - embed the times in NTFS format (precision of of 0.0000001 seconds). When - reading a zip file with these "extended" times, in either format, - DotNetZip represents the values with the - ModifiedTime, AccessedTime and CreationTime - properties on the ZipEntry. - - - - While any zip application or library, regardless of the platform it - runs on, could use any of the time formats allowed by the ZIP - specification, not all zip tools or libraries do support all these - formats. Storing the higher-precision times for each entry is - optional for zip files, and many tools and libraries don't use the - higher precision quantities at all. The old DOS time, represented by - , is guaranteed to be present, though it - sometimes unset. - - - - Ok, getting back to the question about how the LastModified - property relates to this ModifiedTime - property... LastModified is always set, while - ModifiedTime is not. (The other times stored in the NTFS - times extension, CreationTime and AccessedTime also - may not be set on an entry that is read from an existing zip file.) - When reading a zip file, then LastModified takes the DOS time - that is stored with the file. If the DOS time has been stored as zero - in the zipfile, then this library will use DateTime.Now for the - LastModified value. If the ZIP file was created by an evolved - tool, then there will also be higher precision NTFS or Unix times in - the zip file. In that case, this library will read those times, and - set LastModified and ModifiedTime to the same value, the - one corresponding to the last write time of the file. If there are no - higher precision times stored for the entry, then ModifiedTime - remains unset (likewise AccessedTime and CreationTime), - and LastModified keeps its DOS time. - - - - When creating zip files with this library, by default the extended time - properties (ModifiedTime, AccessedTime, and - CreationTime) are set on the ZipEntry instance, and these data are - stored in the zip archive for each entry, in NTFS format. If you add an - entry from an actual filesystem file, then the entry gets the actual file - times for that file, to NTFS-level precision. If you add an entry from a - stream, or a string, then the times get the value DateTime.Now. In - this case LastModified and ModifiedTime will be identical, - to 2 seconds of precision. You can explicitly set the - CreationTime, AccessedTime, and ModifiedTime of an - entry using the property setters. If you want to set all of those - quantities, it's more efficient to use the method. Those - changes are not made permanent in the zip file until you call or one of its cousins. - - - - When creating a zip file, you can override the default behavior of - this library for formatting times in the zip file, disabling the - embedding of file times in NTFS format or enabling the storage of file - times in Unix format, or both. You may want to do this, for example, - when creating a zip file on Windows, that will be consumed on a Mac, - by an application that is not hip to the "NTFS times" format. To do - this, use the and - properties. A valid zip - file may store the file times in both formats. But, there are no - guarantees that a program running on Mac or Linux will gracefully - handle the NTFS-formatted times when Unix times are present, or that a - non-DotNetZip-powered application running on Windows will be able to - handle file times in Unix format. DotNetZip will always do something - reasonable; other libraries or tools may not. When in doubt, test. - - - - I'll bet you didn't think one person could type so much about time, eh? - And reading it was so enjoyable, too! Well, in appreciation, maybe you - should donate? - - - - - - - - - - - Last Access time for the file represented by the entry. - - - This value may or may not be meaningful. If the ZipEntry was read from an existing - Zip archive, this information may not be available. For an explanation of why, see - . - - - - - - - - The file creation time for the file represented by the entry. - - - - This value may or may not be meaningful. If the ZipEntry was read - from an existing zip archive, and the creation time was not set on the entry - when the zip file was created, then this property may be meaningless. For an - explanation of why, see . - - - - - - - - Sets the NTFS Creation, Access, and Modified times for the given entry. - - - - - When adding an entry from a file or directory, the Creation, Access, and - Modified times for the given entry are automatically set from the - filesystem values. When adding an entry from a stream or string, the - values are implicitly set to DateTime.Now. The application may wish to - set these values to some arbitrary value, before saving the archive, and - can do so using the various setters. If you want to set all of the times, - this method is more efficient. - - - - The values you set here will be retrievable with the , and properties. - - - - When this method is called, if both and are false, then the - EmitTimesInWindowsFormatWhenSaving flag is automatically set. - - - - DateTime values provided here without a DateTimeKind are assumed to be Local Time. - - - - the creation time of the entry. - the last access time of the entry. - the last modified time of the entry. - - - - - - - - - - Specifies whether the Creation, Access, and Modified times for the given - entry will be emitted in "Windows format" when the zip archive is saved. - - - - - An application creating a zip archive can use this flag to explicitly - specify that the file times for the entry should or should not be stored - in the zip archive in the format used by Windows. The default value of - this property is true. - - - - When adding an entry from a file or directory, the Creation (), Access (), and Modified - () times for the given entry are automatically - set from the filesystem values. When adding an entry from a stream or - string, all three values are implicitly set to DateTime.Now. Applications - can also explicitly set those times by calling . - - - - PKWARE's - zip specification describes multiple ways to format these times in a - zip file. One is the format Windows applications normally use: 100ns ticks - since Jan 1, 1601 UTC. The other is a format Unix applications typically - use: seconds since January 1, 1970 UTC. Each format can be stored in an - "extra field" in the zip entry when saving the zip archive. The former - uses an extra field with a Header Id of 0x000A, while the latter uses a - header ID of 0x5455. - - - - Not all zip tools and libraries can interpret these fields. Windows - compressed folders is one that can read the Windows Format timestamps, - while I believe the Infozip - tools can read the Unix format timestamps. Although the time values are - easily convertible, subject to a loss of precision, some tools and - libraries may be able to read only one or the other. DotNetZip can read or - write times in either or both formats. - - - - The times stored are taken from , , and . - - - - This property is not mutually exclusive from the property. It is - possible that a zip entry can embed the timestamps in both forms, one - form, or neither. But, there are no guarantees that a program running on - Mac or Linux will gracefully handle NTFS Formatted times, or that a - non-DotNetZip-powered application running on Windows will be able to - handle file times in Unix format. When in doubt, test. - - - - Normally you will use the ZipFile.EmitTimesInWindowsFormatWhenSaving - property, to specify the behavior for all entries in a zip, rather than - the property on each individual entry. - - - - - - - - - - - - - Specifies whether the Creation, Access, and Modified times for the given - entry will be emitted in "Unix(tm) format" when the zip archive is saved. - - - - - An application creating a zip archive can use this flag to explicitly - specify that the file times for the entry should or should not be stored - in the zip archive in the format used by Unix. By default this flag is - false, meaning the Unix-format times are not stored in the zip - archive. - - - - When adding an entry from a file or directory, the Creation (), Access (), and Modified - () times for the given entry are automatically - set from the filesystem values. When adding an entry from a stream or - string, all three values are implicitly set to DateTime.Now. Applications - can also explicitly set those times by calling . - - - - PKWARE's - zip specification describes multiple ways to format these times in a - zip file. One is the format Windows applications normally use: 100ns ticks - since Jan 1, 1601 UTC. The other is a format Unix applications typically - use: seconds since Jan 1, 1970 UTC. Each format can be stored in an - "extra field" in the zip entry when saving the zip archive. The former - uses an extra field with a Header Id of 0x000A, while the latter uses a - header ID of 0x5455. - - - - Not all tools and libraries can interpret these fields. Windows - compressed folders is one that can read the Windows Format timestamps, - while I believe the Infozip - tools can read the Unix format timestamps. Although the time values are - easily convertible, subject to a loss of precision, some tools and - libraries may be able to read only one or the other. DotNetZip can read or - write times in either or both formats. - - - - The times stored are taken from , , and . - - - - This property is not mutually exclusive from the property. It is - possible that a zip entry can embed the timestamps in both forms, one - form, or neither. But, there are no guarantees that a program running on - Mac or Linux will gracefully handle NTFS Formatted times, or that a - non-DotNetZip-powered application running on Windows will be able to - handle file times in Unix format. When in doubt, test. - - - - Normally you will use the ZipFile.EmitTimesInUnixFormatWhenSaving - property, to specify the behavior for all entries, rather than the - property on each individual entry. - - - - - - - - - - - - - The type of timestamp attached to the ZipEntry. - - - - This property is valid only for a ZipEntry that was read from a zip archive. - It indicates the type of timestamp attached to the entry. - - - - - - - - The file attributes for the entry. - - - - - - The attributes in NTFS include - ReadOnly, Archive, Hidden, System, and Indexed. When adding a - ZipEntry to a ZipFile, these attributes are set implicitly when - adding an entry from the filesystem. When adding an entry from a stream - or string, the Attributes are not set implicitly. Regardless of the way - an entry was added to a ZipFile, you can set the attributes - explicitly if you like. - - - - When reading a ZipEntry from a ZipFile, the attributes are - set according to the data stored in the ZipFile. If you extract the - entry from the archive to a filesystem file, DotNetZip will set the - attributes on the resulting file accordingly. - - - - The attributes can be set explicitly by the application. For example the - application may wish to set the FileAttributes.ReadOnly bit for all - entries added to an archive, so that on unpack, this attribute will be set - on the extracted file. Any changes you make to this property are made - permanent only when you call a Save() method on the ZipFile - instance that contains the ZipEntry. - - - - For example, an application may wish to zip up a directory and set the - ReadOnly bit on every file in the archive, so that upon later extraction, - the resulting files will be marked as ReadOnly. Not every extraction tool - respects these attributes, but if you unpack with DotNetZip, as for - example in a self-extracting archive, then the attributes will be set as - they are stored in the ZipFile. - - - - These attributes may not be interesting or useful if the resulting archive - is extracted on a non-Windows platform. How these attributes get used - upon extraction depends on the platform and tool used. - - - - - - - The name of the filesystem file, referred to by the ZipEntry. - - - - - This property specifies the thing-to-be-zipped on disk, and is set only - when the ZipEntry is being created from a filesystem file. If the - ZipFile is instantiated by reading an existing .zip archive, then - the LocalFileName will be null (Nothing in VB). - - - - When it is set, the value of this property may be different than , which is the path used in the archive itself. If you - call Zip.AddFile("foop.txt", AlternativeDirectory), then the path - used for the ZipEntry within the zip archive will be different - than this path. - - - - If the entry is being added from a stream, then this is null (Nothing in VB). - - - - - - - - The name of the file contained in the ZipEntry. - - - - - - This is the name of the entry in the ZipFile itself. When creating - a zip archive, if the ZipEntry has been created from a filesystem - file, via a call to or , or a related overload, the value - of this property is derived from the name of that file. The - FileName property does not include drive letters, and may include a - different directory path, depending on the value of the - directoryPathInArchive parameter used when adding the entry into - the ZipFile. - - - - In some cases there is no related filesystem file - for example when a - ZipEntry is created using or one of the similar overloads. In this case, the value of - this property is derived from the fileName and the directory path passed - to that method. - - - - When reading a zip file, this property takes the value of the entry name - as stored in the zip file. If you extract such an entry, the extracted - file will take the name given by this property. - - - - Applications can set this property when creating new zip archives or when - reading existing archives. When setting this property, the actual value - that is set will replace backslashes with forward slashes, in accordance - with the Zip - specification, for compatibility with Unix(tm) and ... get - this.... Amiga! - - - - If an application reads a ZipFile via or a related overload, and then explicitly - sets the FileName on an entry contained within the ZipFile, and - then calls , the application will effectively - rename the entry within the zip archive. - - - - If an application sets the value of FileName, then calls - Extract() on the entry, the entry is extracted to a file using the - newly set value as the filename. The FileName value is made - permanent in the zip archive only after a call to one of the - ZipFile.Save() methods on the ZipFile that contains the - ZipEntry. - - - - If an application attempts to set the FileName to a value that - would result in a duplicate entry in the ZipFile, an exception is - thrown. - - - - When a ZipEntry is contained within a ZipFile, applications - cannot rename the entry within the context of a foreach (For - Each in VB) loop, because of the way the ZipFile stores - entries. If you need to enumerate through all the entries and rename one - or more of them, use ZipFile.EntriesSorted as the - collection. See also, ZipFile.GetEnumerator(). - - - - - - - The stream that provides content for the ZipEntry. - - - - - - The application can use this property to set the input stream for an - entry on a just-in-time basis. Imagine a scenario where the application - creates a ZipFile comprised of content obtained from hundreds of - files, via calls to AddFile(). The DotNetZip library opens streams - on these files on a just-in-time basis, only when writing the entry out to - an external store within the scope of a ZipFile.Save() call. Only - one input stream is opened at a time, as each entry is being written out. - - - - Now imagine a different application that creates a ZipFile - with content obtained from hundreds of streams, added through . Normally the - application would supply an open stream to that call. But when large - numbers of streams are being added, this can mean many open streams at one - time, unnecessarily. - - - - To avoid this, call and specify delegates that open and close the stream at - the time of Save. - - - - - Setting the value of this property when the entry was not added from a - stream (for example, when the ZipEntry was added with or , or when the entry was added by - reading an existing zip archive) will throw an exception. - - - - - - - - A flag indicating whether the InputStream was provided Just-in-time. - - - - - - When creating a zip archive, an application can obtain content for one or - more of the ZipEntry instances from streams, using the method. At the time - of calling that method, the application can supply null as the value of - the stream parameter. By doing so, the application indicates to the - library that it will provide a stream for the entry on a just-in-time - basis, at the time one of the ZipFile.Save() methods is called and - the data for the various entries are being compressed and written out. - - - - In this case, the application can set the - property, typically within the SaveProgress event (event type: ) for that entry. - - - - The application will later want to call Close() and Dispose() on that - stream. In the SaveProgress event, when the event type is , the application can - do so. This flag indicates that the stream has been provided by the - application on a just-in-time basis and that it is the application's - responsibility to call Close/Dispose on that stream. - - - - - - - - An enum indicating the source of the ZipEntry. - - - - - The version of the zip engine needed to read the ZipEntry. - - - - - This is a readonly property, indicating the version of
the Zip - specification that the extracting tool or library must support to - extract the given entry. Generally higher versions indicate newer - features. Older zip engines obviously won't know about new features, and - won't be able to extract entries that depend on those newer features. - - - - - value - Features - - - - 20 - a basic Zip Entry, potentially using PKZIP encryption. - - - - - 45 - The ZIP64 extension is used on the entry. - - - - - 46 - File is compressed using BZIP2 compression* - - - - 50 - File is encrypted using PkWare's DES, 3DES, (broken) RC2 or RC4 - - - - 51 - File is encrypted using PKWare's AES encryption or corrected RC2 encryption. - - - - 52 - File is encrypted using corrected RC2-64 encryption** - - - - 61 - File is encrypted using non-OAEP key wrapping*** - - - - 63 - File is compressed using LZMA, PPMd+, Blowfish, or Twofish - - - - - - There are other values possible, not listed here. DotNetZip supports - regular PKZip encryption, and ZIP64 extensions. DotNetZip cannot extract - entries that require a zip engine higher than 45. - - - - This value is set upon reading an existing zip file, or after saving a zip - archive. - - - - - - The comment attached to the ZipEntry. - - - - - Each entry in a zip file can optionally have a comment associated to - it. The comment might be displayed by a zip tool during extraction, for - example. - - - - By default, the Comment is encoded in IBM437 code page. You can - specify an alternative with and - . - - - - - - - - Indicates whether the entry requires ZIP64 extensions. - - - - - - This property is null (Nothing in VB) until a Save() method on the - containing instance has been called. The property is - non-null (HasValue is true) only after a Save() method has - been called. - - - - After the containing ZipFile has been saved, the Value of this - property is true if any of the following three conditions holds: the - uncompressed size of the entry is larger than 0xFFFFFFFF; the compressed - size of the entry is larger than 0xFFFFFFFF; the relative offset of the - entry within the zip archive is larger than 0xFFFFFFFF. These quantities - are not known until a Save() is attempted on the zip archive and - the compression is applied. - - - - If none of the three conditions holds, then the Value is false. - - - - A Value of false does not indicate that the entry, as saved in the - zip archive, does not use ZIP64. It merely indicates that ZIP64 is - not required. An entry may use ZIP64 even when not required if - the property on the containing - ZipFile instance is set to , or if - the property on the containing - ZipFile instance is set to - and the output stream was not seekable. - - - - - - - - Indicates whether the entry actually used ZIP64 extensions, as it was most - recently written to the output file or stream. - - - - - - This Nullable property is null (Nothing in VB) until a Save() - method on the containing instance has been - called. HasValue is true only after a Save() method has been - called. - - - - The value of this property for a particular ZipEntry may change - over successive calls to Save() methods on the containing ZipFile, - even if the file that corresponds to the ZipEntry does not. This - may happen if other entries contained in the ZipFile expand, - causing the offset for this particular entry to exceed 0xFFFFFFFF. - - - - - - - The bitfield for the entry as defined in the zip spec. You probably - never need to look at this. - - - - - You probably do not need to concern yourself with the contents of this - property, but in case you do: - - - - - bit - meaning - - - - 0 - set if encryption is used. - - - - 1-2 - - set to determine whether normal, max, fast deflation. DotNetZip library - always leaves these bits unset when writing (indicating "normal" - deflation"), but can read an entry with any value here. - - - - - 3 - - Indicates that the Crc32, Compressed and Uncompressed sizes are zero in the - local header. This bit gets set on an entry during writing a zip file, when - it is saved to a non-seekable output stream. - - - - - - 4 - reserved for "enhanced deflating". This library doesn't do enhanced deflating. - - - - 5 - set to indicate the zip is compressed patched data. This library doesn't do that. - - - - 6 - - set if PKWare's strong encryption is used (must also set bit 1 if bit 6 is - set). This bit is not set if WinZip's AES encryption is set. - - - - 7 - not used - - - - 8 - not used - - - - 9 - not used - - - - 10 - not used - - - - 11 - - Language encoding flag (EFS). If this bit is set, the filename and comment - fields for this file must be encoded using UTF-8. This library currently - does not support UTF-8. - - - - - 12 - Reserved by PKWARE for enhanced compression. - - - - 13 - - Used when encrypting the Central Directory to indicate selected data - values in the Local Header are masked to hide their actual values. See - the section in the Zip - specification describing the Strong Encryption Specification for - details. - - - - - 14 - Reserved by PKWARE. - - - - 15 - Reserved by PKWARE. - - - - - - - - - The compression method employed for this ZipEntry. - - - - - - The - Zip specification allows a variety of compression methods. This - library supports just two: 0x08 = Deflate. 0x00 = Store (no compression), - for reading or writing. - - - - When reading an entry from an existing zipfile, the value you retrieve - here indicates the compression method used on the entry by the original - creator of the zip. When writing a zipfile, you can specify either 0x08 - (Deflate) or 0x00 (None). If you try setting something else, you will get - an exception. - - - - You may wish to set CompressionMethod to CompressionMethod.None (0) - when zipping already-compressed data like a jpg, png, or mp3 file. - This can save time and cpu cycles. - - - - When setting this property on a ZipEntry that is read from an - existing zip file, calling ZipFile.Save() will cause the new - CompressionMethod to be used on the entry in the newly saved zip file. - - - - Setting this property may have the side effect of modifying the - CompressionLevel property. If you set the CompressionMethod to a - value other than None, and CompressionLevel is previously - set to None, then CompressionLevel will be set to - Default. - - - - - - - In this example, the first entry added to the zip archive uses the default - behavior - compression is used where it makes sense. The second entry, - the MP3 file, is added to the archive without being compressed. - - using (ZipFile zip = new ZipFile(ZipFileToCreate)) - { - ZipEntry e1= zip.AddFile(@"notes\Readme.txt"); - ZipEntry e2= zip.AddFile(@"music\StopThisTrain.mp3"); - e2.CompressionMethod = CompressionMethod.None; - zip.Save(); - } - - - - Using zip As New ZipFile(ZipFileToCreate) - zip.AddFile("notes\Readme.txt") - Dim e2 as ZipEntry = zip.AddFile("music\StopThisTrain.mp3") - e2.CompressionMethod = CompressionMethod.None - zip.Save - End Using - - - - - - Sets the compression level to be used for the entry when saving the zip - archive. This applies only for CompressionMethod = DEFLATE. - - - - - When using the DEFLATE compression method, Varying the compression - level used on entries can affect the size-vs-speed tradeoff when - compression and decompressing data streams or files. - - - - If you do not set this property, the default compression level is used, - which normally gives a good balance of compression efficiency and - compression speed. In some tests, using BestCompression can - double the time it takes to compress, while delivering just a small - increase in compression efficiency. This behavior will vary with the - type of data you compress. If you are in doubt, just leave this setting - alone, and accept the default. - - - - When setting this property on a ZipEntry that is read from an - existing zip file, calling ZipFile.Save() will cause the new - CompressionLevel to be used on the entry in the newly saved zip file. - - - - Setting this property may have the side effect of modifying the - CompressionMethod property. If you set the CompressionLevel - to a value other than None, CompressionMethod will be set - to Deflate, if it was previously None. - - - - Setting this property has no effect if the CompressionMethod is something - other than Deflate or None. - - - - - - - - The compressed size of the file, in bytes, within the zip archive. - - - - When reading a ZipFile, this value is read in from the existing - zip file. When creating or updating a ZipFile, the compressed - size is computed during compression. Therefore the value on a - ZipEntry is valid after a call to Save() (or one of its - overloads) in that case. - - - - - - - The size of the file, in bytes, before compression, or after extraction. - - - - When reading a ZipFile, this value is read in from the existing - zip file. When creating or updating a ZipFile, the uncompressed - size is computed during compression. Therefore the value on a - ZipEntry is valid after a call to Save() (or one of its - overloads) in that case. - - - - - - - The ratio of compressed size to uncompressed size of the ZipEntry. - - - - - This is a ratio of the compressed size to the uncompressed size of the - entry, expressed as a double in the range of 0 to 100+. A value of 100 - indicates no compression at all. It could be higher than 100 when the - compression algorithm actually inflates the data, as may occur for small - files, or uncompressible data that is encrypted. - - - - You could format it for presentation to a user via a format string of - "{3,5:F0}%" to see it as a percentage. - - - - If the size of the original uncompressed file is 0, implying a - denominator of 0, the return value will be zero. - - - - This property is valid after reading in an existing zip file, or after - saving the ZipFile that contains the ZipEntry. You cannot know the - effect of a compression transform until you try it. - - - - - - - The 32-bit CRC (Cyclic Redundancy Check) on the contents of the ZipEntry. - - - - - You probably don't need to concern yourself with this. It is used - internally by DotNetZip to verify files or streams upon extraction. - - The value is a 32-bit - CRC using 0xEDB88320 for the polynomial. This is the same CRC-32 used in - PNG, MPEG-2, and other protocols and formats. It is a read-only property; when - creating a Zip archive, the CRC for each entry is set only after a call to - Save() on the containing ZipFile. When reading an existing zip file, the value - of this property reflects the stored CRC for the entry. - - - - - - True if the entry is a directory (not a file). - This is a readonly property on the entry. - - - - - A derived property that is true if the entry uses encryption. - - - - - This is a readonly property on the entry. When reading a zip file, - the value for the ZipEntry is determined by the data read - from the zip file. After saving a ZipFile, the value of this - property for each ZipEntry indicates whether encryption was - actually used (which will have been true if the was set and the property - was something other than . - - - - - - Set this to specify which encryption algorithm to use for the entry when - saving it to a zip archive. - - - - - - Set this property in order to encrypt the entry when the ZipFile is - saved. When setting this property, you must also set a on the entry. If you set a value other than on this property and do not set a - Password then the entry will not be encrypted. The ZipEntry - data is encrypted as the ZipFile is saved, when you call or one of its cousins on the containing - ZipFile instance. You do not need to specify the Encryption - when extracting entries from an archive. - - - - The Zip specification from PKWare defines a set of encryption algorithms, - and the data formats for the zip archive that support them, and PKWare - supports those algorithms in the tools it produces. Other vendors of tools - and libraries, such as WinZip or Xceed, typically support a - subset of the algorithms specified by PKWare. These tools can - sometimes support additional different encryption algorithms and data - formats, not specified by PKWare. The AES Encryption specified and - supported by WinZip is the most popular example. This library supports a - subset of the complete set of algorithms specified by PKWare and other - vendors. - - - - There is no common, ubiquitous multi-vendor standard for strong encryption - within zip files. There is broad support for so-called "traditional" Zip - encryption, sometimes called Zip 2.0 encryption, as specified - by PKWare, but this encryption is considered weak and - breakable. This library currently supports the Zip 2.0 "weak" encryption, - and also a stronger WinZip-compatible AES encryption, using either 128-bit - or 256-bit key strength. If you want DotNetZip to support an algorithm - that is not currently supported, call the author of this library and maybe - we can talk business. - - - - The class also has a property. In most cases you will use - that property when setting encryption. This property takes - precedence over any Encryption set on the ZipFile itself. - Typically, you would use the per-entry Encryption when most entries in the - zip archive use one encryption algorithm, and a few entries use a - different one. If all entries in the zip file use the same Encryption, - then it is simpler to just set this property on the ZipFile itself, when - creating a zip archive. - - - - Some comments on updating archives: If you read a ZipFile, you can - modify the Encryption on an encrypted entry: you can remove encryption - from an entry that was encrypted; you can encrypt an entry that was not - encrypted previously; or, you can change the encryption algorithm. The - changes in encryption are not made permanent until you call Save() on the - ZipFile. To effect changes in encryption, the entry content is - streamed through several transformations, depending on the modification - the application has requested. For example if the entry is not encrypted - and the application sets Encryption to PkzipWeak, then at - the time of Save(), the original entry is read and decompressed, - then re-compressed and encrypted. Conversely, if the original entry is - encrypted with PkzipWeak encryption, and the application sets the - Encryption property to WinZipAes128, then at the time of - Save(), the original entry is decrypted via PKZIP encryption and - decompressed, then re-compressed and re-encrypted with AES. This all - happens automatically within the library, but it can be time-consuming for - large entries. - - - - Additionally, when updating archives, it is not possible to change the - password when changing the encryption algorithm. To change both the - algorithm and the password, you need to Save() the zipfile twice. First - set the Encryption to None, then call Save(). Then set the - Encryption to the new value (not "None"), then call Save() - once again. - - - - The WinZip AES encryption algorithms are not supported on the .NET Compact - Framework. - - - - - - This example creates a zip archive that uses encryption, and then extracts - entries from the archive. When creating the zip archive, the ReadMe.txt - file is zipped without using a password or encryption. The other file - uses encryption. - - - // Create a zip archive with AES Encryption. - using (ZipFile zip = new ZipFile()) - { - zip.AddFile("ReadMe.txt") - ZipEntry e1= zip.AddFile("2008-Regional-Sales-Report.pdf"); - e1.Encryption= EncryptionAlgorithm.WinZipAes256; - e1.Password= "Top.Secret.No.Peeking!"; - zip.Save("EncryptedArchive.zip"); - } - - // Extract a zip archive that uses AES Encryption. - // You do not need to specify the algorithm during extraction. - using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) - { - // Specify the password that is used during extraction, for - // all entries that require a password: - zip.Password= "Top.Secret.No.Peeking!"; - zip.ExtractAll("extractDirectory"); - } - - - - ' Create a zip that uses Encryption. - Using zip As New ZipFile() - zip.AddFile("ReadMe.txt") - Dim e1 as ZipEntry - e1= zip.AddFile("2008-Regional-Sales-Report.pdf") - e1.Encryption= EncryptionAlgorithm.WinZipAes256 - e1.Password= "Top.Secret.No.Peeking!" - zip.Save("EncryptedArchive.zip") - End Using - - ' Extract a zip archive that uses AES Encryption. - ' You do not need to specify the algorithm during extraction. - Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) - ' Specify the password that is used during extraction, for - ' all entries that require a password: - zip.Password= "Top.Secret.No.Peeking!" - zip.ExtractAll("extractDirectory") - End Using - - - - - - Thrown in the setter if EncryptionAlgorithm.Unsupported is specified. - - - ZipEntry.Password - ZipFile.Encryption - - - - The Password to be used when encrypting a ZipEntry upon - ZipFile.Save(), or when decrypting an entry upon Extract(). - - - - - This is a write-only property on the entry. Set this to request that the - entry be encrypted when writing the zip archive, or set it to specify the - password to be used when extracting an existing entry that is encrypted. - - - - The password set here is implicitly used to encrypt the entry during the - operation, or to decrypt during the or operation. If you set - the Password on a ZipEntry after calling Save(), there is no - effect. - - - - Consider setting the property when using a - password. Answering concerns that the standard password protection - supported by all zip tools is weak, WinZip has extended the ZIP - specification with a way to use AES Encryption to protect entries in the - Zip file. Unlike the "PKZIP 2.0" encryption specified in the PKZIP - specification, AES - Encryption uses a standard, strong, tested, encryption - algorithm. DotNetZip can create zip archives that use WinZip-compatible - AES encryption, if you set the property. But, - archives created that use AES encryption may not be readable by all other - tools and libraries. For example, Windows Explorer cannot read a - "compressed folder" (a zip file) that uses AES encryption, though it can - read a zip file that uses "PKZIP encryption." - - - - The class also has a - property. This property takes precedence over any password set on the - ZipFile itself. Typically, you would use the per-entry Password when most - entries in the zip archive use one password, and a few entries use a - different password. If all entries in the zip file use the same password, - then it is simpler to just set this property on the ZipFile itself, - whether creating a zip archive or extracting a zip archive. - - - - Some comments on updating archives: If you read a ZipFile, you - cannot modify the password on any encrypted entry, except by extracting - the entry with the original password (if any), removing the original entry - via , and then adding a new - entry with a new Password. - - - - For example, suppose you read a ZipFile, and there is an encrypted - entry. Setting the Password property on that ZipEntry and then - calling Save() on the ZipFile does not update the password - on that entry in the archive. Neither is an exception thrown. Instead, - what happens during the Save() is the existing entry is copied - through to the new zip archive, in its original encrypted form. Upon - re-reading that archive, the entry can be decrypted with its original - password. - - - - If you read a ZipFile, and there is an un-encrypted entry, you can set the - Password on the entry and then call Save() on the ZipFile, and get - encryption on that entry. - - - - - - - This example creates a zip file with two entries, and then extracts the - entries from the zip file. When creating the zip file, the two files are - added to the zip file using password protection. Each entry uses a - different password. During extraction, each file is extracted with the - appropriate password. - - - // create a file with encryption - using (ZipFile zip = new ZipFile()) - { - ZipEntry entry; - entry= zip.AddFile("Declaration.txt"); - entry.Password= "123456!"; - entry = zip.AddFile("Report.xls"); - entry.Password= "1Secret!"; - zip.Save("EncryptedArchive.zip"); - } - - // extract entries that use encryption - using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) - { - ZipEntry entry; - entry = zip["Declaration.txt"]; - entry.Password = "123456!"; - entry.Extract("extractDir"); - entry = zip["Report.xls"]; - entry.Password = "1Secret!"; - entry.Extract("extractDir"); - } - - - - - Using zip As New ZipFile - Dim entry as ZipEntry - entry= zip.AddFile("Declaration.txt") - entry.Password= "123456!" - entry = zip.AddFile("Report.xls") - entry.Password= "1Secret!" - zip.Save("EncryptedArchive.zip") - End Using - - - ' extract entries that use encryption - Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) - Dim entry as ZipEntry - entry = zip("Declaration.txt") - entry.Password = "123456!" - entry.Extract("extractDir") - entry = zip("Report.xls") - entry.Password = "1Secret!" - entry.Extract("extractDir") - End Using - - - - - - - ZipFile.Password - - - - The action the library should take when extracting a file that already exists. - - - - - This property affects the behavior of the Extract methods (one of the - Extract() or ExtractWithPassword() overloads), when - extraction would would overwrite an existing filesystem file. If you do - not set this property, the library throws an exception when extracting - an entry would overwrite an existing file. - - - - This property has no effect when extracting to a stream, or when the file to be - extracted does not already exist. - - - - - - - This example shows how to set the ExtractExistingFile property in - an ExtractProgress event, in response to user input. The - ExtractProgress event is invoked if and only if the - ExtractExistingFile property was previously set to - ExtractExistingFileAction.InvokeExtractProgressEvent. - - public static void ExtractProgress(object sender, ExtractProgressEventArgs e) - { - if (e.EventType == ZipProgressEventType.Extracting_BeforeExtractEntry) - Console.WriteLine("extract {0} ", e.CurrentEntry.FileName); - - else if (e.EventType == ZipProgressEventType.Extracting_ExtractEntryWouldOverwrite) - { - ZipEntry entry = e.CurrentEntry; - string response = null; - // Ask the user if he wants overwrite the file - do - { - Console.Write("Overwrite {0} in {1} ? (y/n/C) ", entry.FileName, e.ExtractLocation); - response = Console.ReadLine(); - Console.WriteLine(); - - } while (response != null && response[0]!='Y' && - response[0]!='N' && response[0]!='C'); - - if (response[0]=='C') - e.Cancel = true; - else if (response[0]=='Y') - entry.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently; - else - entry.ExtractExistingFile= ExtractExistingFileAction.DoNotOverwrite; - } - } - - - - - - The action to take when an error is encountered while - opening or reading files as they are saved into a zip archive. - - - - - Errors can occur within a call to ZipFile.Save, as the various files contained - in a ZipFile are being saved into the zip archive. During the - Save, DotNetZip will perform a File.Open on the file - associated to the ZipEntry, and then will read the entire contents of - the file as it is zipped. Either the open or the Read may fail, because - of lock conflicts or other reasons. Using this property, you can - specify the action to take when such errors occur. - - - - Typically you will NOT set this property on individual ZipEntry - instances. Instead, you will set the ZipFile.ZipErrorAction property on - the ZipFile instance, before adding any entries to the - ZipFile. If you do this, errors encountered on behalf of any of - the entries in the ZipFile will be handled the same way. - - - - But, if you use a handler, you will want - to set this property on the ZipEntry within the handler, to - communicate back to DotNetZip what you would like to do with the - particular error. - - - - - - - - - Indicates whether the entry was included in the most recent save. - - - An entry can be excluded or skipped from a save if there is an error - opening or reading the entry. - - - - - - A callback that allows the application to specify the compression to use - for a given entry that is about to be added to the zip archive. - - - - - See - - - - - - Set to indicate whether to use UTF-8 encoding for filenames and comments. - - - - - - If this flag is set, the comment and filename for the entry will be - encoded with UTF-8, as described in the Zip - specification, if necessary. "Necessary" means, the filename or - entry comment (if any) cannot be reflexively encoded and decoded using the - default code page, IBM437. - - - - Setting this flag to true is equivalent to setting to System.Text.Encoding.UTF8. - - - - This flag has no effect or relation to the text encoding used within the - file itself. - - - - - - - The text encoding to use for the FileName and Comment on this ZipEntry, - when the default encoding is insufficient. - - - - - - Don't use this property. See . - - - - - - - Specifies the alternate text encoding used by this ZipEntry - - - - The default text encoding used in Zip files for encoding filenames and - comments is IBM437, which is something like a superset of ASCII. In - cases where this is insufficient, applications can specify an - alternate encoding. - - - When creating a zip file, the usage of the alternate encoding is - governed by the property. - Typically you would set both properties to tell DotNetZip to employ an - encoding that is not IBM437 in the zipfile you are creating. - - - Keep in mind that because the ZIP specification states that the only - valid encodings to use are IBM437 and UTF-8, if you use something - other than that, then zip tools and libraries may not be able to - successfully read the zip archive you generate. - - - The zip specification states that applications should presume that - IBM437 is in use, except when a special bit is set, which indicates - UTF-8. There is no way to specify an arbitrary code page, within the - zip file itself. When you create a zip file encoded with gb2312 or - ibm861 or anything other than IBM437 or UTF-8, then the application - that reads the zip file needs to "know" which code page to use. In - some cases, the code page used when reading is chosen implicitly. For - example, WinRar uses the ambient code page for the host desktop - operating system. The pitfall here is that if you create a zip in - Copenhagen and send it to Tokyo, the reader of the zipfile may not be - able to decode successfully. - - - - This example shows how to create a zipfile encoded with a - language-specific encoding: - - using (var zip = new ZipFile()) - { - zip.AlternateEnoding = System.Text.Encoding.GetEncoding("ibm861"); - zip.AlternateEnodingUsage = ZipOption.Always; - zip.AddFileS(arrayOfFiles); - zip.Save("Myarchive-Encoded-in-IBM861.zip"); - } - - - - - - - Describes if and when this instance should apply - AlternateEncoding to encode the FileName and Comment, when - saving. - - - - - - Indicates whether an entry is marked as a text file. Be careful when - using on this property. Unless you have a good reason, you should - probably ignore this property. - - - - - The ZIP format includes a provision for specifying whether an entry in - the zip archive is a text or binary file. This property exposes that - metadata item. Be careful when using this property: It's not clear - that this property as a firm meaning, across tools and libraries. - - - - To be clear, when reading a zip file, the property value may or may - not be set, and its value may or may not be valid. Not all entries - that you may think of as "text" entries will be so marked, and entries - marked as "text" are not guaranteed in any way to be text entries. - Whether the value is set and set correctly depends entirely on the - application that produced the zip file. - - - - There are many zip tools available, and when creating zip files, some - of them "respect" the IsText metadata field, and some of them do not. - Unfortunately, even when an application tries to do "the right thing", - it's not always clear what "the right thing" is. - - - - There's no firm definition of just what it means to be "a text file", - and the zip specification does not help in this regard. Twenty years - ago, text was ASCII, each byte was less than 127. IsText meant, all - bytes in the file were less than 127. These days, it is not the case - that all text files have all bytes less than 127. Any unicode file - may have bytes that are above 0x7f. The zip specification has nothing - to say on this topic. Therefore, it's not clear what IsText really - means. - - - - This property merely tells a reading application what is stored in the - metadata for an entry, without guaranteeing its validity or its - meaning. - - - - When DotNetZip is used to create a zipfile, it attempts to set this - field "correctly." For example, if a file ends in ".txt", this field - will be set. Your application may override that default setting. When - writing a zip file, you must set the property before calling - Save() on the ZipFile. - - - - When reading a zip file, a more general way to decide just what kind - of file is contained in a particular entry is to use the file type - database stored in the operating system. The operating system stores - a table that says, a file with .jpg extension is a JPG image file, a - file with a .xml extension is an XML document, a file with a .txt is a - pure ASCII text document, and so on. To get this information on - Windows, you - need to read and parse the registry. - - - - - using (var zip = new ZipFile()) - { - var e = zip.UpdateFile("Descriptions.mme", ""); - e.IsText = true; - zip.Save(zipPath); - } - - - - Using zip As New ZipFile - Dim e2 as ZipEntry = zip.AddFile("Descriptions.mme", "") - e.IsText= True - zip.Save(zipPath) - End Using - - - - - Provides a string representation of the instance. - a string representation of the instance. - - - - Extract the entry to the filesystem, starting at the current - working directory. - - - - This method has a bunch of overloads! One of them is sure to - be the right one for you... If you don't like these, check - out the ExtractWithPassword() methods. - - - - - - - - - This method extracts an entry from a zip file into the current - working directory. The path of the entry as extracted is the full - path as specified in the zip archive, relative to the current - working directory. After the file is extracted successfully, the - file attributes and timestamps are set. - - - - The action taken when extraction an entry would overwrite an - existing file is determined by the property. - - - - Within the call to Extract(), the content for the entry is - written into a filesystem file, and then the last modified time of the - file is set according to the property on - the entry. See the remarks the property for - some details about the last modified time. - - - - - - - Extract the entry to a file in the filesystem, using the specified - behavior when extraction would overwrite an existing file. - - - - - See the remarks on the property, for some - details about how the last modified time of the file is set after - extraction. - - - - - The action to take if extraction would overwrite an existing file. - - - - - Extracts the entry to the specified stream. - - - - - The caller can specify any write-able stream, for example a , a , or ASP.NET's - Response.OutputStream. The content will be decrypted and - decompressed as necessary. If the entry is encrypted and no password - is provided, this method will throw. - - - The position on the stream is not reset by this method before it extracts. - You may want to call stream.Seek() before calling ZipEntry.Extract(). - - - - - the stream to which the entry should be extracted. - - - - - - Extract the entry to the filesystem, starting at the specified base - directory. - - - the pathname of the base directory - - - - - - This example extracts only the entries in a zip file that are .txt files, - into a directory called "textfiles". - - using (ZipFile zip = ZipFile.Read("PackedDocuments.zip")) - { - foreach (string s1 in zip.EntryFilenames) - { - if (s1.EndsWith(".txt")) - { - zip[s1].Extract("textfiles"); - } - } - } - - - Using zip As ZipFile = ZipFile.Read("PackedDocuments.zip") - Dim s1 As String - For Each s1 In zip.EntryFilenames - If s1.EndsWith(".txt") Then - zip(s1).Extract("textfiles") - End If - Next - End Using - - - - - - - Using this method, existing entries in the filesystem will not be - overwritten. If you would like to force the overwrite of existing - files, see the property, or call - . - - - - See the remarks on the property, for some - details about how the last modified time of the created file is set. - - - - - - Extract the entry to the filesystem, starting at the specified base - directory, and using the specified behavior when extraction would - overwrite an existing file. - - - - - See the remarks on the property, for some - details about how the last modified time of the created file is set. - - - - - - String sZipPath = "Airborne.zip"; - String sFilePath = "Readme.txt"; - String sRootFolder = "Digado"; - using (ZipFile zip = ZipFile.Read(sZipPath)) - { - if (zip.EntryFileNames.Contains(sFilePath)) - { - // use the string indexer on the zip file - zip[sFileName].Extract(sRootFolder, - ExtractExistingFileAction.OverwriteSilently); - } - } - - - - Dim sZipPath as String = "Airborne.zip" - Dim sFilePath As String = "Readme.txt" - Dim sRootFolder As String = "Digado" - Using zip As ZipFile = ZipFile.Read(sZipPath) - If zip.EntryFileNames.Contains(sFilePath) - ' use the string indexer on the zip file - zip(sFilePath).Extract(sRootFolder, _ - ExtractExistingFileAction.OverwriteSilently) - End If - End Using - - - - the pathname of the base directory - - The action to take if extraction would overwrite an existing file. - - - - - Extract the entry to the filesystem, using the current working directory - and the specified password. - - - - This method has a bunch of overloads! One of them is sure to be - the right one for you... - - - - - - - - - Existing entries in the filesystem will not be overwritten. If you - would like to force the overwrite of existing files, see the property, or call - . - - - - See the remarks on the property for some - details about how the "last modified" time of the created file is - set. - - - - - In this example, entries that use encryption are extracted using a - particular password. - - using (var zip = ZipFile.Read(FilePath)) - { - foreach (ZipEntry e in zip) - { - if (e.UsesEncryption) - e.ExtractWithPassword("Secret!"); - else - e.Extract(); - } - } - - - Using zip As ZipFile = ZipFile.Read(FilePath) - Dim e As ZipEntry - For Each e In zip - If (e.UsesEncryption) - e.ExtractWithPassword("Secret!") - Else - e.Extract - End If - Next - End Using - - - The Password to use for decrypting the entry. - - - - Extract the entry to the filesystem, starting at the specified base - directory, and using the specified password. - - - - - - - - Existing entries in the filesystem will not be overwritten. If you - would like to force the overwrite of existing files, see the property, or call - . - - - - See the remarks on the property, for some - details about how the last modified time of the created file is set. - - - - The pathname of the base directory. - The Password to use for decrypting the entry. - - - - Extract the entry to a file in the filesystem, relative to the - current directory, using the specified behavior when extraction - would overwrite an existing file. - - - - - See the remarks on the property, for some - details about how the last modified time of the created file is set. - - - - The Password to use for decrypting the entry. - - - The action to take if extraction would overwrite an existing file. - - - - - Extract the entry to the filesystem, starting at the specified base - directory, and using the specified behavior when extraction would - overwrite an existing file. - - - - See the remarks on the property, for some - details about how the last modified time of the created file is set. - - - the pathname of the base directory - - The action to take if extraction would - overwrite an existing file. - - The Password to use for decrypting the entry. - - - - Extracts the entry to the specified stream, using the specified - Password. For example, the caller could extract to Console.Out, or - to a MemoryStream. - - - - - The caller can specify any write-able stream, for example a , a , or ASP.NET's - Response.OutputStream. The content will be decrypted and - decompressed as necessary. If the entry is encrypted and no password - is provided, this method will throw. - - - The position on the stream is not reset by this method before it extracts. - You may want to call stream.Seek() before calling ZipEntry.Extract(). - - - - - - the stream to which the entry should be extracted. - - - The password to use for decrypting the entry. - - - - - Opens a readable stream corresponding to the zip entry in the - archive. The stream decompresses and decrypts as necessary, as it - is read. - - - - - - DotNetZip offers a variety of ways to extract entries from a zip - file. This method allows an application to extract an entry by - reading a . - - - - The return value is of type . Use it as you would any - stream for reading. When an application calls on that stream, it will - receive data from the zip entry that is decrypted and decompressed - as necessary. - - - - CrcCalculatorStream adds one additional feature: it keeps a - CRC32 checksum on the bytes of the stream as it is read. The CRC - value is available in the property on the - CrcCalculatorStream. When the read is complete, your - application - should check this CRC against the - property on the ZipEntry to validate the content of the - ZipEntry. You don't have to validate the entry using the CRC, but - you should, to verify integrity. Check the example for how to do - this. - - - - If the entry is protected with a password, then you need to provide - a password prior to calling , either by - setting the property on the entry, or the - property on the ZipFile - itself. Or, you can use , the - overload of OpenReader that accepts a password parameter. - - - - If you want to extract entry data into a write-able stream that is - already opened, like a , do not - use this method. Instead, use . - - - - Your application may use only one stream created by OpenReader() at - a time, and you should not call other Extract methods before - completing your reads on a stream obtained from OpenReader(). This - is because there is really only one source stream for the compressed - content. A call to OpenReader() seeks in the source stream, to the - beginning of the compressed content. A subsequent call to - OpenReader() on a different entry will seek to a different position - in the source stream, as will a call to Extract() or one of its - overloads. This will corrupt the state for the decompressing stream - from the original call to OpenReader(). - - - - The OpenReader() method works only when the ZipEntry is - obtained from an instance of ZipFile. This method will throw - an exception if the ZipEntry is obtained from a . - - - - - This example shows how to open a zip archive, then read in a named - entry via a stream. After the read loop is complete, the code - compares the calculated during the read loop with the expected CRC - on the ZipEntry, to verify the extraction. - - using (ZipFile zip = new ZipFile(ZipFileToRead)) - { - ZipEntry e1= zip["Elevation.mp3"]; - using (Ionic.Zlib.CrcCalculatorStream s = e1.OpenReader()) - { - byte[] buffer = new byte[4096]; - int n, totalBytesRead= 0; - do { - n = s.Read(buffer,0, buffer.Length); - totalBytesRead+=n; - } while (n>0); - if (s.Crc32 != e1.Crc32) - throw new Exception(string.Format("The Zip Entry failed the CRC Check. (0x{0:X8}!=0x{1:X8})", s.Crc32, e1.Crc32)); - if (totalBytesRead != e1.UncompressedSize) - throw new Exception(string.Format("We read an unexpected number of bytes. ({0}!={1})", totalBytesRead, e1.UncompressedSize)); - } - } - - - Using zip As New ZipFile(ZipFileToRead) - Dim e1 As ZipEntry = zip.Item("Elevation.mp3") - Using s As Ionic.Zlib.CrcCalculatorStream = e1.OpenReader - Dim n As Integer - Dim buffer As Byte() = New Byte(4096) {} - Dim totalBytesRead As Integer = 0 - Do - n = s.Read(buffer, 0, buffer.Length) - totalBytesRead = (totalBytesRead + n) - Loop While (n > 0) - If (s.Crc32 <> e1.Crc32) Then - Throw New Exception(String.Format("The Zip Entry failed the CRC Check. (0x{0:X8}!=0x{1:X8})", s.Crc32, e1.Crc32)) - End If - If (totalBytesRead <> e1.UncompressedSize) Then - Throw New Exception(String.Format("We read an unexpected number of bytes. ({0}!={1})", totalBytesRead, e1.UncompressedSize)) - End If - End Using - End Using - - - - The Stream for reading. - - - - Opens a readable stream for an encrypted zip entry in the archive. - The stream decompresses and decrypts as necessary, as it is read. - - - - - See the documentation on the method for - full details. This overload allows the application to specify a - password for the ZipEntry to be read. - - - - The password to use for decrypting the entry. - The Stream for reading. - - - - Pass in either basedir or s, but not both. - In other words, you can extract to a stream or to a directory (filesystem), but not both! - The Password param is required for encrypted entries. - - - - - Extract to a stream - In other words, you can extract to a stream or to a directory (filesystem), but not both! - The Password param is required for encrypted entries. - - - - - Validates that the args are consistent; returning whether the caller can return - because it's done, or not (caller should continue) - - - - - Validates that the args are consistent; returning whether the caller can return - because it's done, or not (caller should continue) - - - - - Reads one ZipEntry from the given stream. The content for - the entry does not get decompressed or decrypted. This method - basically reads metadata, and seeks. - - the ZipContainer this entry belongs to. - - true of this is the first entry being read from the stream. - - the ZipEntry read from the stream. - - - - Finds a particular segment in the given extra field. - This is used when modifying a previously-generated - extra field, in particular when removing the AES crypto - segment in the extra field. - - - - - At current cursor position in the stream, read the extra - field, and set the properties on the ZipEntry instance - appropriately. This can be called when processing the - Extra field in the Central Directory, or in the local - header. - - - - - generate and return a byte array that encodes the filename - for the entry. - - - - side effects: generate and store into _CommentBytes the - byte array for any comment attached to the entry. Also - sets _actualEncoding to indicate the actual encoding - used. The same encoding is used for both filename and - comment. - - - - - - Stores the position of the entry source stream, or, if the position is - already stored, seeks to that position. - - - - - This method is called in prep for reading the source stream. If PKZIP - encryption is used, then we need to calc the CRC32 before doing the - encryption, because the CRC is used in the 12th byte of the PKZIP - encryption header. So, we need to be able to seek backward in the source - when saving the ZipEntry. This method is called from the place that - calculates the CRC, and also from the method that does the encryption of - the file data. - - - - The first time through, this method sets the _sourceStreamOriginalPosition - field. Subsequent calls to this method seek to that position. - - - - - - Copy metadata that may have been changed by the app. We do this when - resetting the zipFile instance. If the app calls Save() on a ZipFile, then - tries to party on that file some more, we may need to Reset() it , which - means re-reading the entries and then copying the metadata. I think. - - - - - Set the input stream and get its length, if possible. The length is - used for progress updates, AND, to allow an optimization in case of - a stream/file of zero length. In that case we skip the Encrypt and - compression Stream. (like DeflateStream or BZip2OutputStream) - - - - - Prepare the given stream for output - wrap it in a CountingStream, and - then in a CRC stream, and an encryptor and deflator as appropriate. - - - - Previously this was used in ZipEntry.Write(), but in an effort to - introduce some efficiencies in that method I've refactored to put the - code inline. This method still gets called by ZipOutputStream. - - - - - - An enum that specifies the type of timestamp available on the ZipEntry. - - - - - - The last modified time of a file can be stored in multiple ways in - a zip file, and they are not mutually exclusive: - - - - - In the so-called "DOS" format, which has a 2-second precision. Values - are rounded to the nearest even second. For example, if the time on the - file is 12:34:43, then it will be stored as 12:34:44. This first value - is accessible via the LastModified property. This value is always - present in the metadata for each zip entry. In some cases the value is - invalid, or zero. - - - - In the so-called "Windows" or "NTFS" format, as an 8-byte integer - quantity expressed as the number of 1/10 milliseconds (in other words - the number of 100 nanosecond units) since January 1, 1601 (UTC). This - format is how Windows represents file times. This time is accessible - via the ModifiedTime property. - - - - In the "Unix" format, a 4-byte quantity specifying the number of seconds since - January 1, 1970 UTC. - - - - In an older format, now deprecated but still used by some current - tools. This format is also a 4-byte quantity specifying the number of - seconds since January 1, 1970 UTC. - - - - - - This bit field describes which of the formats were found in a ZipEntry that was read. - - - - - - - Default value. - - - - - A DOS timestamp with 2-second precision. - - - - - A Windows timestamp with 100-ns precision. - - - - - A Unix timestamp with 1-second precision. - - - - - A Unix timestamp with 1-second precision, stored in InfoZip v1 format. This - format is outdated and is supported for reading archives only. - - - - - The method of compression to use for a particular ZipEntry. - - - - PKWare's - ZIP Specification describes a number of distinct - cmopression methods that can be used within a zip - file. DotNetZip supports a subset of them. - - - - - No compression at all. For COM environments, the value is 0 (zero). - - - - - DEFLATE compression, as described in IETF RFC - 1951. This is the "normal" compression used in zip - files. For COM environments, the value is 8. - - - - - BZip2 compression, a compression algorithm developed by Julian Seward. - For COM environments, the value is 12. - - - - - An enum that specifies the source of the ZipEntry. - - - - - Default value. Invalid on a bonafide ZipEntry. - - - - - The entry was instantiated by calling AddFile() or another method that - added an entry from the filesystem. - - - - - The entry was instantiated via or - . - - - - - The ZipEntry was instantiated by reading a zipfile. - - - - - The content for the ZipEntry will be or was provided by the WriteDelegate. - - - - - The content for the ZipEntry will be obtained from the stream dispensed by the OpenDelegate. - The entry was instantiated via . - - - - - The content for the ZipEntry will be or was obtained from a ZipOutputStream. - - - - - An enum providing the options when an error occurs during opening or reading - of a file or directory that is being saved to a zip file. - - - - - This enum describes the actions that the library can take when an error occurs - opening or reading a file, as it is being saved into a Zip archive. - - - - In some cases an error will occur when DotNetZip tries to open a file to be - added to the zip archive. In other cases, an error might occur after the - file has been successfully opened, while DotNetZip is reading the file. - - - - The first problem might occur when calling AddDirectory() on a directory - that contains a Clipper .dbf file; the file is locked by Clipper and - cannot be opened by another process. An example of the second problem is - the ERROR_LOCK_VIOLATION that results when a file is opened by another - process, but not locked, and a range lock has been taken on the file. - Microsoft Outlook takes range locks on .PST files. - - - - - - Throw an exception when an error occurs while zipping. This is the default - behavior. (For COM clients, this is a 0 (zero).) - - - - - When an error occurs during zipping, for example a file cannot be opened, - skip the file causing the error, and continue zipping. (For COM clients, - this is a 1.) - - - - - When an error occurs during zipping, for example a file cannot be opened, - retry the operation that caused the error. Be careful with this option. If - the error is not temporary, the library will retry forever. (For COM - clients, this is a 2.) - - - - - When an error occurs, invoke the zipError event. The event type used is - . A typical use of this option: - a GUI application may wish to pop up a dialog to allow the user to view the - error that occurred, and choose an appropriate action. After your - processing in the error event, if you want to skip the file, set on the - ZipProgressEventArgs.CurrentEntry to Skip. If you want the - exception to be thrown, set ZipErrorAction on the CurrentEntry - to Throw. If you want to cancel the zip, set - ZipProgressEventArgs.Cancel to true. Cancelling differs from using - Skip in that a cancel will not save any further entries, if there are any. - (For COM clients, the value of this enum is a 3.) - - - - - Options for using ZIP64 extensions when saving zip archives. - - - - - - Designed many years ago, the original zip - specification from PKWARE allowed for 32-bit quantities for the - compressed and uncompressed sizes of zip entries, as well as a 32-bit quantity - for specifying the length of the zip archive itself, and a maximum of 65535 - entries. These limits are now regularly exceeded in many backup and archival - scenarios. Recently, PKWare added extensions to the original zip spec, called - "ZIP64 extensions", to raise those limitations. This property governs whether - DotNetZip will use those extensions when writing zip archives. The use of - these extensions is optional and explicit in DotNetZip because, despite the - status of ZIP64 as a bona fide standard, many other zip tools and libraries do - not support ZIP64, and therefore a zip file with ZIP64 extensions may be - unreadable by some of those other tools. - - - - Set this property to to always use ZIP64 - extensions when saving, regardless of whether your zip archive needs it. - Suppose you add 5 files, each under 100k, to a ZipFile. If you specify Always - for this flag, you will get a ZIP64 archive, though the archive does not need - to use ZIP64 because none of the original zip limits had been exceeded. - - - - Set this property to to tell the DotNetZip - library to never use ZIP64 extensions. This is useful for maximum - compatibility and interoperability, at the expense of the capability of - handling large files or large archives. NB: Windows Explorer in Windows XP - and Windows Vista cannot currently extract files from a zip64 archive, so if - you want to guarantee that a zip archive produced by this library will work in - Windows Explorer, use Never. If you set this property to , and your application creates a zip that would - exceed one of the Zip limits, the library will throw an exception while saving - the zip file. - - - - Set this property to to tell the - DotNetZip library to use the ZIP64 extensions when required by the - entry. After the file is compressed, the original and compressed sizes are - checked, and if they exceed the limits described above, then zip64 can be - used. That is the general idea, but there is an additional wrinkle when saving - to a non-seekable device, like the ASP.NET Response.OutputStream, or - Console.Out. When using non-seekable streams for output, the entry - header - which indicates whether zip64 is in use - is emitted before it is - known if zip64 is necessary. It is only after all entries have been saved - that it can be known if ZIP64 will be required. On seekable output streams, - after saving all entries, the library can seek backward and re-emit the zip - file header to be consistent with the actual ZIP64 requirement. But using a - non-seekable output stream, the library cannot seek backward, so the header - can never be changed. In other words, the archive's use of ZIP64 extensions is - not alterable after the header is emitted. Therefore, when saving to - non-seekable streams, using is the same - as using : it will always produce a zip - archive that uses ZIP64 extensions. - - - - - - - The default behavior, which is "Never". - (For COM clients, this is a 0 (zero).) - - - - - Do not use ZIP64 extensions when writing zip archives. - (For COM clients, this is a 0 (zero).) - - - - - Use ZIP64 extensions when writing zip archives, as necessary. - For example, when a single entry exceeds 0xFFFFFFFF in size, or when the archive as a whole - exceeds 0xFFFFFFFF in size, or when there are more than 65535 entries in an archive. - (For COM clients, this is a 1.) - - - - - Always use ZIP64 extensions when writing zip archives, even when unnecessary. - (For COM clients, this is a 2.) - - - - - An enum representing the values on a three-way toggle switch - for various options in the library. This might be used to - specify whether to employ a particular text encoding, or to use - ZIP64 extensions, or some other option. - - - - - The default behavior. This is the same as "Never". - (For COM clients, this is a 0 (zero).) - - - - - Never use the associated option. - (For COM clients, this is a 0 (zero).) - - - - - Use the associated behavior "as necessary." - (For COM clients, this is a 1.) - - - - - Use the associated behavior Always, whether necessary or not. - (For COM clients, this is a 2.) - - - - - A class for collecting the various options that can be used when - Reading zip files for extraction or update. - - - - - When reading a zip file, there are several options an - application can set, to modify how the file is read, or what - the library does while reading. This class collects those - options into one container. - - - - Pass an instance of the ReadOptions class into the - ZipFile.Read() method. - - - . - . - - - - - An event handler for Read operations. When opening large zip - archives, you may want to display a progress bar or other - indicator of status progress while reading. This parameter - allows you to specify a ReadProgress Event Handler directly. - When you call Read(), the progress event is invoked as - necessary. - - - - - The System.IO.TextWriter to use for writing verbose status messages - during operations on the zip archive. A console application may wish to - pass System.Console.Out to get messages on the Console. A graphical - or headless application may wish to capture the messages in a different - TextWriter, such as a System.IO.StringWriter. - - - - - The System.Text.Encoding to use when reading in the zip archive. Be - careful specifying the encoding. If the value you use here is not the same - as the Encoding used when the zip archive was created (possibly by a - different archiver) you will get unexpected results and possibly exceptions. - - - - - - - - Provides a stream metaphor for reading zip files. - - - - - This class provides an alternative programming model for reading zip files to - the one enabled by the class. Use this when reading zip - files, as an alternative to the class, when you would - like to use a Stream class to read the file. - - - - Some application designs require a readable stream for input. This stream can - be used to read a zip file, and extract entries. - - - - Both the ZipInputStream class and the ZipFile class can be used - to read and extract zip files. Both of them support many of the common zip - features, including Unicode, different compression levels, and ZIP64. The - programming models differ. For example, when extracting entries via calls to - the GetNextEntry() and Read() methods on the - ZipInputStream class, the caller is responsible for creating the file, - writing the bytes into the file, setting the attributes on the file, and - setting the created, last modified, and last accessed timestamps on the - file. All of these things are done automatically by a call to ZipEntry.Extract(). For this reason, the - ZipInputStream is generally recommended for when your application wants - to extract the data, without storing that data into a file. - - - - Aside from the obvious differences in programming model, there are some - differences in capability between the ZipFile class and the - ZipInputStream class. - - - - - ZipFile can be used to create or update zip files, or read and - extract zip files. ZipInputStream can be used only to read and - extract zip files. If you want to use a stream to create zip files, check - out the . - - - - ZipInputStream cannot read segmented or spanned - zip files. - - - - ZipInputStream will not read Zip file comments. - - - - When reading larger files, ZipInputStream will always underperform - ZipFile. This is because the ZipInputStream does a full scan on the - zip file, while the ZipFile class reads the central directory of the - zip file. - - - - - - - - - Create a ZipInputStream, wrapping it around an existing stream. - - - - - - While the class is generally easier - to use, this class provides an alternative to those - applications that want to read from a zipfile directly, - using a . - - - - Both the ZipInputStream class and the ZipFile class can be used - to read and extract zip files. Both of them support many of the common zip - features, including Unicode, different compression levels, and ZIP64. The - programming models differ. For example, when extracting entries via calls to - the GetNextEntry() and Read() methods on the - ZipInputStream class, the caller is responsible for creating the file, - writing the bytes into the file, setting the attributes on the file, and - setting the created, last modified, and last accessed timestamps on the - file. All of these things are done automatically by a call to ZipEntry.Extract(). For this reason, the - ZipInputStream is generally recommended for when your application wants - to extract the data, without storing that data into a file. - - - - Aside from the obvious differences in programming model, there are some - differences in capability between the ZipFile class and the - ZipInputStream class. - - - - - ZipFile can be used to create or update zip files, or read and extract - zip files. ZipInputStream can be used only to read and extract zip - files. If you want to use a stream to create zip files, check out the . - - - - ZipInputStream cannot read segmented or spanned - zip files. - - - - ZipInputStream will not read Zip file comments. - - - - When reading larger files, ZipInputStream will always underperform - ZipFile. This is because the ZipInputStream does a full scan on the - zip file, while the ZipFile class reads the central directory of the - zip file. - - - - - - - - The stream to read. It must be readable. This stream will be closed at - the time the ZipInputStream is closed. - - - - - This example shows how to read a zip file, and extract entries, using the - ZipInputStream class. - - - private void Unzip() - { - byte[] buffer= new byte[2048]; - int n; - using (var raw = File.Open(inputFileName, FileMode.Open, FileAccess.Read)) - { - using (var input= new ZipInputStream(raw)) - { - ZipEntry e; - while (( e = input.GetNextEntry()) != null) - { - if (e.IsDirectory) continue; - string outputPath = Path.Combine(extractDir, e.FileName); - using (var output = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite)) - { - while ((n= input.Read(buffer, 0, buffer.Length)) > 0) - { - output.Write(buffer,0,n); - } - } - } - } - } - } - - - - Private Sub UnZip() - Dim inputFileName As String = "MyArchive.zip" - Dim extractDir As String = "extract" - Dim buffer As Byte() = New Byte(2048) {} - Using raw As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read) - Using input As ZipInputStream = New ZipInputStream(raw) - Dim e As ZipEntry - Do While (Not e = input.GetNextEntry Is Nothing) - If Not e.IsDirectory Then - Using output As FileStream = File.Open(Path.Combine(extractDir, e.FileName), _ - FileMode.Create, FileAccess.ReadWrite) - Dim n As Integer - Do While (n = input.Read(buffer, 0, buffer.Length) > 0) - output.Write(buffer, 0, n) - Loop - End Using - End If - Loop - End Using - End Using - End Sub - - - - - - Create a ZipInputStream, given the name of an existing zip file. - - - - - - This constructor opens a FileStream for the given zipfile, and - wraps a ZipInputStream around that. See the documentation for the - constructor for full details. - - - - While the class is generally easier - to use, this class provides an alternative to those - applications that want to read from a zipfile directly, - using a . - - - - - - The name of the filesystem file to read. - - - - - This example shows how to read a zip file, and extract entries, using the - ZipInputStream class. - - - private void Unzip() - { - byte[] buffer= new byte[2048]; - int n; - using (var input= new ZipInputStream(inputFileName)) - { - ZipEntry e; - while (( e = input.GetNextEntry()) != null) - { - if (e.IsDirectory) continue; - string outputPath = Path.Combine(extractDir, e.FileName); - using (var output = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite)) - { - while ((n= input.Read(buffer, 0, buffer.Length)) > 0) - { - output.Write(buffer,0,n); - } - } - } - } - } - - - - Private Sub UnZip() - Dim inputFileName As String = "MyArchive.zip" - Dim extractDir As String = "extract" - Dim buffer As Byte() = New Byte(2048) {} - Using input As ZipInputStream = New ZipInputStream(inputFileName) - Dim e As ZipEntry - Do While (Not e = input.GetNextEntry Is Nothing) - If Not e.IsDirectory Then - Using output As FileStream = File.Open(Path.Combine(extractDir, e.FileName), _ - FileMode.Create, FileAccess.ReadWrite) - Dim n As Integer - Do While (n = input.Read(buffer, 0, buffer.Length) > 0) - output.Write(buffer, 0, n) - Loop - End Using - End If - Loop - End Using - End Sub - - - - - - Create a ZipInputStream, explicitly specifying whether to - keep the underlying stream open. - - - - See the documentation for the ZipInputStream(Stream) - constructor for a discussion of the class, and an example of how to use the class. - - - - The stream to read from. It must be readable. - - - - true if the application would like the stream - to remain open after the ZipInputStream has been closed. - - - - Provides a string representation of the instance. - - - This can be useful for debugging purposes. - - - a string representation of the instance. - - - - The text encoding to use when reading entries into the zip archive, for - those entries whose filenames or comments cannot be encoded with the - default (IBM437) encoding. - - - - - In its - zip specification, PKWare describes two options for encoding - filenames and comments: using IBM437 or UTF-8. But, some archiving tools - or libraries do not follow the specification, and instead encode - characters using the system default code page. For example, WinRAR when - run on a machine in Shanghai may encode filenames with the Big-5 Chinese - (950) code page. This behavior is contrary to the Zip specification, but - it occurs anyway. - - - - When using DotNetZip to read zip archives that use something other than - UTF-8 or IBM437, set this property to specify the code page to use when - reading encoded filenames and comments for each ZipEntry in the zip - file. - - - - This property is "provisional". When the entry in the zip archive is not - explicitly marked as using UTF-8, then IBM437 is used to decode filenames - and comments. If a loss of data would result from using IBM436 - - specifically when encoding and decoding is not reflexive - the codepage - specified here is used. It is possible, therefore, to have a given entry - with a Comment encoded in IBM437 and a FileName encoded with - the specified "provisional" codepage. - - - - When a zip file uses an arbitrary, non-UTF8 code page for encoding, there - is no standard way for the reader application - whether DotNetZip, WinZip, - WinRar, or something else - to know which codepage has been used for the - entries. Readers of zip files are not able to inspect the zip file and - determine the codepage that was used for the entries contained within it. - It is left to the application or user to determine the necessary codepage - when reading zip files encoded this way. If you use an incorrect codepage - when reading a zipfile, you will get entries with filenames that are - incorrect, and the incorrect filenames may even contain characters that - are not legal for use within filenames in Windows. Extracting entries with - illegal characters in the filenames will lead to exceptions. It's too bad, - but this is just the way things are with code pages in zip files. Caveat - Emptor. - - - - - - - Size of the work buffer to use for the ZLIB codec during decompression. - - - - Setting this affects the performance and memory efficiency of compression - and decompression. For larger files, setting this to a larger size may - improve performance, but the exact numbers vary depending on available - memory, and a bunch of other variables. I don't have good firm - recommendations on how to set it. You'll have to test it yourself. Or - just leave it alone and accept the default. - - - - - Sets the password to be used on the ZipInputStream instance. - - - - - - When reading a zip archive, this password is used to read and decrypt the - entries that are encrypted within the zip file. When entries within a zip - file use different passwords, set the appropriate password for the entry - before the first call to Read() for each entry. - - - - When reading an entry that is not encrypted, the value of this property is - ignored. - - - - - - - This example uses the ZipInputStream to read and extract entries from a - zip file, using a potentially different password for each entry. - - - byte[] buffer= new byte[2048]; - int n; - using (var raw = File.Open(_inputFileName, FileMode.Open, FileAccess.Read )) - { - using (var input= new ZipInputStream(raw)) - { - ZipEntry e; - while (( e = input.GetNextEntry()) != null) - { - input.Password = PasswordForEntry(e.FileName); - if (e.IsDirectory) continue; - string outputPath = Path.Combine(_extractDir, e.FileName); - using (var output = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite)) - { - while ((n= input.Read(buffer,0,buffer.Length)) > 0) - { - output.Write(buffer,0,n); - } - } - } - } - } - - - - - - - Read the data from the stream into the buffer. - - - - - The data for the zipentry will be decrypted and uncompressed, as - necessary, before being copied into the buffer. - - - - You must set the property before calling - Read() the first time for an encrypted entry. To determine if an - entry is encrypted and requires a password, check the ZipEntry.Encryption property. - - - - The buffer to hold the data read from the stream. - the offset within the buffer to copy the first byte read. - the number of bytes to read. - the number of bytes read, after decryption and decompression. - - - - Read the next entry from the zip file. - - - - - Call this method just before calling , - to position the pointer in the zip file to the next entry that can be - read. Subsequent calls to Read(), will decrypt and decompress the - data in the zip file, until Read() returns 0. - - - - Each time you call GetNextEntry(), the pointer in the wrapped - stream is moved to the next entry in the zip file. If you call , and thus re-position the pointer within - the file, you will need to call GetNextEntry() again, to insure - that the file pointer is positioned at the beginning of a zip entry. - - - - This method returns the ZipEntry. Using a stream approach, you will - read the raw bytes for an entry in a zip file via calls to Read(). - Alternatively, you can extract an entry into a file, or a stream, by - calling , or one of its siblings. - - - - - - The ZipEntry read. Returns null (or Nothing in VB) if there are no more - entries in the zip file. - - - - - - Dispose the stream. - - - - - This method disposes the ZipInputStream. It may also close the - underlying stream, depending on which constructor was used. - - - - Typically the application will call Dispose() implicitly, via - a using statement in C#, or a Using statement in VB. - - - - Application code won't call this code directly. This method may - be invoked in two distinct scenarios. If disposing == true, the - method has been called directly or indirectly by a user's code, - for example via the public Dispose() method. In this case, both - managed and unmanaged resources can be referenced and disposed. - If disposing == false, the method has been called by the runtime - from inside the object finalizer and this method should not - reference other objects; in that case only unmanaged resources - must be referenced or disposed. - - - - - true if the Dispose method was invoked by user code. - - - - - Always returns true. - - - - - Returns the value of CanSeek for the underlying (wrapped) stream. - - - - - Always returns false. - - - - - Returns the length of the underlying stream. - - - - - Gets or sets the position of the underlying stream. - - - Setting the position is equivalent to calling Seek(value, SeekOrigin.Begin). - - - - - This is a no-op. - - - - - This method always throws a NotSupportedException. - - ignored - ignored - ignored - - - - This method seeks in the underlying stream. - - - - - Call this method if you want to seek around within the zip file for random access. - - - - Applications can intermix calls to Seek() with calls to . After a call to Seek(), - GetNextEntry() will get the next ZipEntry that falls after - the current position in the input stream. You're on your own for finding - out just where to seek in the stream, to get to the various entries. - - - - - the offset point to seek to - the reference point from which to seek - The new position - - - - This method always throws a NotSupportedException. - - ignored - - - - Provides a stream metaphor for generating zip files. - - - - - This class writes zip files, as defined in the specification - for zip files described by PKWare. The compression for this - implementation is provided by a managed-code version of Zlib, included with - DotNetZip in the classes in the Ionic.Zlib namespace. - - - - This class provides an alternative programming model to the one enabled by the - class. Use this when creating zip files, as an - alternative to the class, when you would like to use a - Stream type to write the zip file. - - - - Both the ZipOutputStream class and the ZipFile class can be used - to create zip files. Both of them support many of the common zip features, - including Unicode, different compression levels, and ZIP64. They provide - very similar performance when creating zip files. - - - - The ZipFile class is generally easier to use than - ZipOutputStream and should be considered a higher-level interface. For - example, when creating a zip file via calls to the PutNextEntry() and - Write() methods on the ZipOutputStream class, the caller is - responsible for opening the file, reading the bytes from the file, writing - those bytes into the ZipOutputStream, setting the attributes on the - ZipEntry, and setting the created, last modified, and last accessed - timestamps on the zip entry. All of these things are done automatically by a - call to ZipFile.AddFile(). - For this reason, the ZipOutputStream is generally recommended for use - only when your application emits arbitrary data, not necessarily data from a - filesystem file, directly into a zip file, and does so using a Stream - metaphor. - - - - Aside from the differences in programming model, there are other - differences in capability between the two classes. - - - - - ZipFile can be used to read and extract zip files, in addition to - creating zip files. ZipOutputStream cannot read zip files. If you want - to use a stream to read zip files, check out the class. - - - - ZipOutputStream does not support the creation of segmented or spanned - zip files. - - - - ZipOutputStream cannot produce a self-extracting archive. - - - - - Be aware that the ZipOutputStream class implements the interface. In order for - ZipOutputStream to produce a valid zip file, you use use it within - a using clause (Using in VB), or call the Dispose() method - explicitly. See the examples for how to employ a using clause. - - - - Also, a note regarding compression performance: On the desktop .NET - Framework, DotNetZip can use a multi-threaded compression implementation - that provides significant speed increases on large files, over 300k or so, - at the cost of increased memory use at runtime. (The output of the - compression is almost exactly the same size). But, the multi-threaded - approach incurs a performance hit on smaller files. There's no way for the - ZipOutputStream to know whether parallel compression will be beneficial, - because the ZipOutputStream does not know how much data you will write - through the stream. You may wish to set the property to zero, if you are compressing - large files through ZipOutputStream. This will cause parallel - compression to be used, always. - - - - - - Create a ZipOutputStream, wrapping an existing stream. - - - - - The class is generally easier to use when creating - zip files. The ZipOutputStream offers a different metaphor for creating a - zip file, based on the class. - - - - - - The stream to wrap. It must be writable. This stream will be closed at - the time the ZipOutputStream is closed. - - - - - This example shows how to create a zip file, using the - ZipOutputStream class. - - - private void Zipup() - { - if (filesToZip.Count == 0) - { - System.Console.WriteLine("Nothing to do."); - return; - } - - using (var raw = File.Open(_outputFileName, FileMode.Create, FileAccess.ReadWrite )) - { - using (var output= new ZipOutputStream(raw)) - { - output.Password = "VerySecret!"; - output.Encryption = EncryptionAlgorithm.WinZipAes256; - - foreach (string inputFileName in filesToZip) - { - System.Console.WriteLine("file: {0}", inputFileName); - - output.PutNextEntry(inputFileName); - using (var input = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Write )) - { - byte[] buffer= new byte[2048]; - int n; - while ((n= input.Read(buffer,0,buffer.Length)) > 0) - { - output.Write(buffer,0,n); - } - } - } - } - } - } - - - - Private Sub Zipup() - Dim outputFileName As String = "XmlData.zip" - Dim filesToZip As String() = Directory.GetFiles(".", "*.xml") - If (filesToZip.Length = 0) Then - Console.WriteLine("Nothing to do.") - Else - Using raw As FileStream = File.Open(outputFileName, FileMode.Create, FileAccess.ReadWrite) - Using output As ZipOutputStream = New ZipOutputStream(raw) - output.Password = "VerySecret!" - output.Encryption = EncryptionAlgorithm.WinZipAes256 - Dim inputFileName As String - For Each inputFileName In filesToZip - Console.WriteLine("file: {0}", inputFileName) - output.PutNextEntry(inputFileName) - Using input As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) - Dim n As Integer - Dim buffer As Byte() = New Byte(2048) {} - Do While (n = input.Read(buffer, 0, buffer.Length) > 0) - output.Write(buffer, 0, n) - Loop - End Using - Next - End Using - End Using - End If - End Sub - - - - - - Create a ZipOutputStream that writes to a filesystem file. - - - - The class is generally easier to use when creating - zip files. The ZipOutputStream offers a different metaphor for creating a - zip file, based on the class. - - - - The name of the zip file to create. - - - - - This example shows how to create a zip file, using the - ZipOutputStream class. - - - private void Zipup() - { - if (filesToZip.Count == 0) - { - System.Console.WriteLine("Nothing to do."); - return; - } - - using (var output= new ZipOutputStream(outputFileName)) - { - output.Password = "VerySecret!"; - output.Encryption = EncryptionAlgorithm.WinZipAes256; - - foreach (string inputFileName in filesToZip) - { - System.Console.WriteLine("file: {0}", inputFileName); - - output.PutNextEntry(inputFileName); - using (var input = File.Open(inputFileName, FileMode.Open, FileAccess.Read, - FileShare.Read | FileShare.Write )) - { - byte[] buffer= new byte[2048]; - int n; - while ((n= input.Read(buffer,0,buffer.Length)) > 0) - { - output.Write(buffer,0,n); - } - } - } - } - } - - - - Private Sub Zipup() - Dim outputFileName As String = "XmlData.zip" - Dim filesToZip As String() = Directory.GetFiles(".", "*.xml") - If (filesToZip.Length = 0) Then - Console.WriteLine("Nothing to do.") - Else - Using output As ZipOutputStream = New ZipOutputStream(outputFileName) - output.Password = "VerySecret!" - output.Encryption = EncryptionAlgorithm.WinZipAes256 - Dim inputFileName As String - For Each inputFileName In filesToZip - Console.WriteLine("file: {0}", inputFileName) - output.PutNextEntry(inputFileName) - Using input As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) - Dim n As Integer - Dim buffer As Byte() = New Byte(2048) {} - Do While (n = input.Read(buffer, 0, buffer.Length) > 0) - output.Write(buffer, 0, n) - Loop - End Using - Next - End Using - End If - End Sub - - - - - - Create a ZipOutputStream. - - - - See the documentation for the ZipOutputStream(Stream) - constructor for an example. - - - - The stream to wrap. It must be writable. - - - - true if the application would like the stream - to remain open after the ZipOutputStream has been closed. - - - - Provides a string representation of the instance. - - - This can be useful for debugging purposes. - - - a string representation of the instance. - - - - Sets the password to be used on the ZipOutputStream instance. - - - - - - When writing a zip archive, this password is applied to the entries, not - to the zip archive itself. It applies to any ZipEntry subsequently - written to the ZipOutputStream. - - - - Using a password does not encrypt or protect the "directory" of the - archive - the list of entries contained in the archive. If you set the - Password property, the password actually applies to individual - entries that are added to the archive, subsequent to the setting of this - property. The list of filenames in the archive that is eventually created - will appear in clear text, but the contents of the individual files are - encrypted. This is how Zip encryption works. - - - - If you set this property, and then add a set of entries to the archive via - calls to PutNextEntry, then each entry is encrypted with that - password. You may also want to change the password between adding - different entries. If you set the password, add an entry, then set the - password to null (Nothing in VB), and add another entry, the - first entry is encrypted and the second is not. - - - - When setting the Password, you may also want to explicitly set the property, to specify how to encrypt the entries added - to the ZipFile. If you set the Password to a non-null value and do not - set , then PKZip 2.0 ("Weak") encryption is used. - This encryption is relatively weak but is very interoperable. If - you set the password to a null value (Nothing in VB), - Encryption is reset to None. - - - - Special case: if you wrap a ZipOutputStream around a non-seekable stream, - and use encryption, and emit an entry of zero bytes, the Close() or - PutNextEntry() following the entry will throw an exception. - - - - - - - The Encryption to use for entries added to the ZipOutputStream. - - - - - The specified Encryption is applied to the entries subsequently - written to the ZipOutputStream instance. - - - - If you set this to something other than - EncryptionAlgorithm.None, you will also need to set the - to a non-null, non-empty value in - order to actually get encryption on the entry. - - - - - ZipOutputStream.Password - ZipEntry.Encryption - - - - Size of the work buffer to use for the ZLIB codec during compression. - - - - Setting this may affect performance. For larger files, setting this to a - larger size may improve performance, but I'm not sure. Sorry, I don't - currently have good recommendations on how to set it. You can test it if - you like. - - - - - The compression strategy to use for all entries. - - - - Set the Strategy used by the ZLIB-compatible compressor, when compressing - data for the entries in the zip archive. Different compression strategies - work better on different sorts of data. The strategy parameter can affect - the compression ratio and the speed of compression but not the correctness - of the compresssion. For more information see . - - - - - The type of timestamp attached to the ZipEntry. - - - - Set this in order to specify the kind of timestamp that should be emitted - into the zip file for each entry. - - - - - Sets the compression level to be used for entries subsequently added to - the zip archive. - - - - - Varying the compression level used on entries can affect the - size-vs-speed tradeoff when compression and decompressing data streams - or files. - - - - As with some other properties on the ZipOutputStream class, like , and , - setting this property on a ZipOutputStream - instance will cause the specified CompressionLevel to be used on all - items that are subsequently added to the - ZipOutputStream instance. - - - - If you do not set this property, the default compression level is used, - which normally gives a good balance of compression efficiency and - compression speed. In some tests, using BestCompression can - double the time it takes to compress, while delivering just a small - increase in compression efficiency. This behavior will vary with the - type of data you compress. If you are in doubt, just leave this setting - alone, and accept the default. - - - - - - The compression method used on each entry added to the ZipOutputStream. - - - - - A comment attached to the zip archive. - - - - - - The application sets this property to specify a comment to be embedded - into the generated zip archive. - - - - According to PKWARE's - zip specification, the comment is not encrypted, even if there is a - password set on the zip file. - - - - The specification does not describe how to indicate the encoding used - on a comment string. Many "compliant" zip tools and libraries use - IBM437 as the code page for comments; DotNetZip, too, follows that - practice. On the other hand, there are situations where you want a - Comment to be encoded with something else, for example using code page - 950 "Big-5 Chinese". To fill that need, DotNetZip will encode the - comment following the same procedure it follows for encoding - filenames: (a) if is - Never, it uses the default encoding (IBM437). (b) if is Always, it always uses the - alternate encoding (). (c) if is AsNecessary, it uses the - alternate encoding only if the default encoding is not sufficient for - encoding the comment - in other words if decoding the result does not - produce the original string. This decision is taken at the time of - the call to ZipFile.Save(). - - - - - - - Specify whether to use ZIP64 extensions when saving a zip archive. - - - - - The default value for the property is . is - safest, in the sense that you will not get an Exception if a - pre-ZIP64 limit is exceeded. - - - - You must set this property before calling Write(). - - - - - - - Indicates whether ZIP64 extensions were used when saving the zip archive. - - - - The value is defined only after the ZipOutputStream has been closed. - - - - - Whether the ZipOutputStream should use case-insensitive comparisons when - checking for uniqueness of zip entries. - - - - - Though the zip specification doesn't prohibit zipfiles with duplicate - entries, Sane zip files have no duplicates, and the DotNetZip library - cannot create zip files with duplicate entries. If an application attempts - to call with a name that duplicates one - already used within the archive, the library will throw an Exception. - - - This property allows the application to specify whether the - ZipOutputStream instance considers ordinal case when checking for - uniqueness of zip entries. - - - - - - Indicates whether to encode entry filenames and entry comments using - Unicode (UTF-8). - - - - - The - PKWare zip specification provides for encoding file names and file - comments in either the IBM437 code page, or in UTF-8. This flag selects - the encoding according to that specification. By default, this flag is - false, and filenames and comments are encoded into the zip file in the - IBM437 codepage. Setting this flag to true will specify that filenames - and comments that cannot be encoded with IBM437 will be encoded with - UTF-8. - - - - Zip files created with strict adherence to the PKWare specification with - respect to UTF-8 encoding can contain entries with filenames containing - any combination of Unicode characters, including the full range of - characters from Chinese, Latin, Hebrew, Greek, Cyrillic, and many other - alphabets. However, because at this time, the UTF-8 portion of the PKWare - specification is not broadly supported by other zip libraries and - utilities, such zip files may not be readable by your favorite zip tool or - archiver. In other words, interoperability will decrease if you set this - flag to true. - - - - In particular, Zip files created with strict adherence to the PKWare - specification with respect to UTF-8 encoding will not work well with - Explorer in Windows XP or Windows Vista, because Windows compressed - folders, as far as I know, do not support UTF-8 in zip files. Vista can - read the zip files, but shows the filenames incorrectly. Unpacking from - Windows Vista Explorer will result in filenames that have rubbish - characters in place of the high-order UTF-8 bytes. - - - - Also, zip files that use UTF-8 encoding will not work well with Java - applications that use the java.util.zip classes, as of v5.0 of the Java - runtime. The Java runtime does not correctly implement the PKWare - specification in this regard. - - - - As a result, we have the unfortunate situation that "correct" behavior by - the DotNetZip library with regard to Unicode encoding of filenames during - zip creation will result in zip files that are readable by strictly - compliant and current tools (for example the most recent release of the - commercial WinZip tool); but these zip files will not be readable by - various other tools or libraries, including Windows Explorer. - - - - The DotNetZip library can read and write zip files with UTF8-encoded - entries, according to the PKware spec. If you use DotNetZip for both - creating and reading the zip file, and you use UTF-8, there will be no - loss of information in the filenames. For example, using a self-extractor - created by this library will allow you to unpack files correctly with no - loss of information in the filenames. - - - - If you do not set this flag, it will remain false. If this flag is false, - the ZipOutputStream will encode all filenames and comments using - the IBM437 codepage. This can cause "loss of information" on some - filenames, but the resulting zipfile will be more interoperable with other - utilities. As an example of the loss of information, diacritics can be - lost. The o-tilde character will be down-coded to plain o. The c with a - cedilla (Unicode 0xE7) used in Portugese will be downcoded to a c. - Likewise, the O-stroke character (Unicode 248), used in Danish and - Norwegian, will be down-coded to plain o. Chinese characters cannot be - represented in codepage IBM437; when using the default encoding, Chinese - characters in filenames will be represented as ?. These are all examples - of "information loss". - - - - The loss of information associated to the use of the IBM437 encoding is - inconvenient, and can also lead to runtime errors. For example, using - IBM437, any sequence of 4 Chinese characters will be encoded as ????. If - your application creates a ZipOutputStream, does not set the - encoding, then adds two files, each with names of four Chinese characters - each, this will result in a duplicate filename exception. In the case - where you add a single file with a name containing four Chinese - characters, the zipfile will save properly, but extracting that file - later, with any zip tool, will result in an error, because the question - mark is not legal for use within filenames on Windows. These are just a - few examples of the problems associated to loss of information. - - - - This flag is independent of the encoding of the content within the entries - in the zip file. Think of the zip file as a container - it supports an - encoding. Within the container are other "containers" - the file entries - themselves. The encoding within those entries is independent of the - encoding of the zip archive container for those entries. - - - - Rather than specify the encoding in a binary fashion using this flag, an - application can specify an arbitrary encoding via the property. Setting the encoding - explicitly when creating zip archives will result in non-compliant zip - files that, curiously, are fairly interoperable. The challenge is, the - PKWare specification does not provide for a way to specify that an entry - in a zip archive uses a code page that is neither IBM437 nor UTF-8. - Therefore if you set the encoding explicitly when creating a zip archive, - you must take care upon reading the zip archive to use the same code page. - If you get it wrong, the behavior is undefined and may result in incorrect - filenames, exceptions, stomach upset, hair loss, and acne. - - - - - - - The text encoding to use when emitting entries into the zip archive, for - those entries whose filenames or comments cannot be encoded with the - default (IBM437) encoding. - - - - - In its - zip specification, PKWare describes two options for encoding - filenames and comments: using IBM437 or UTF-8. But, some archiving tools - or libraries do not follow the specification, and instead encode - characters using the system default code page. For example, WinRAR when - run on a machine in Shanghai may encode filenames with the Big-5 Chinese - (950) code page. This behavior is contrary to the Zip specification, but - it occurs anyway. - - - - When using DotNetZip to write zip archives that will be read by one of - these other archivers, set this property to specify the code page to use - when encoding the and for each ZipEntry in the zip file, for - values that cannot be encoded with the default codepage for zip files, - IBM437. This is why this property is "provisional". In all cases, IBM437 - is used where possible, in other words, where no loss of data would - result. It is possible, therefore, to have a given entry with a - Comment encoded in IBM437 and a FileName encoded with the - specified "provisional" codepage. - - - - Be aware that a zip file created after you've explicitly set the - ProvisionalAlternateEncoding property to a value other than - IBM437 may not be compliant to the PKWare specification, and may not be - readable by compliant archivers. On the other hand, many (most?) - archivers are non-compliant and can read zip files created in arbitrary - code pages. The trick is to use or specify the proper codepage when - reading the zip. - - - - When creating a zip archive using this library, it is possible to change - the value of ProvisionalAlternateEncoding between each entry you - add, and between adding entries and the call to Close(). Don't do - this. It will likely result in a zipfile that is not readable. For best - interoperability, either leave ProvisionalAlternateEncoding - alone, or specify it only once, before adding any entries to the - ZipOutputStream instance. There is one exception to this - recommendation, described later. - - - - When using an arbitrary, non-UTF8 code page for encoding, there is no - standard way for the creator application - whether DotNetZip, WinZip, - WinRar, or something else - to formally specify in the zip file which - codepage has been used for the entries. As a result, readers of zip files - are not able to inspect the zip file and determine the codepage that was - used for the entries contained within it. It is left to the application - or user to determine the necessary codepage when reading zip files encoded - this way. If you use an incorrect codepage when reading a zipfile, you - will get entries with filenames that are incorrect, and the incorrect - filenames may even contain characters that are not legal for use within - filenames in Windows. Extracting entries with illegal characters in the - filenames will lead to exceptions. It's too bad, but this is just the way - things are with code pages in zip files. Caveat Emptor. - - - - One possible approach for specifying the code page for a given zip file is - to describe the code page in a human-readable form in the Zip comment. For - example, the comment may read "Entries in this archive are encoded in the - Big5 code page". For maximum interoperability, the zip comment in this - case should be encoded in the default, IBM437 code page. In this case, - the zip comment is encoded using a different page than the filenames. To - do this, Specify ProvisionalAlternateEncoding to your desired - region-specific code page, once before adding any entries, and then set - the property and reset - ProvisionalAlternateEncoding to IBM437 before calling Close(). - - - - - - A Text Encoding to use when encoding the filenames and comments for - all the ZipEntry items, during a ZipFile.Save() operation. - - - - Whether the encoding specified here is used during the save depends - on . - - - - - - A flag that tells if and when this instance should apply - AlternateEncoding to encode the filenames and comments associated to - of ZipEntry objects contained within this instance. - - - - - The default text encoding used in zip archives. It is numeric 437, also - known as IBM437. - - - - - - The size threshold for an entry, above which a parallel deflate is used. - - - - - - DotNetZip will use multiple threads to compress any ZipEntry, when - the CompressionMethod is Deflate, and if the entry is - larger than the given size. Zero means "always use parallel - deflate", while -1 means "never use parallel deflate". - - - - If the entry size cannot be known before compression, as with any entry - added via a ZipOutputStream, then Parallel deflate will never be - performed, unless the value of this property is zero. - - - - A parallel deflate operations will speed up the compression of - large files, on computers with multiple CPUs or multiple CPU - cores. For files above 1mb, on a dual core or dual-cpu (2p) - machine, the time required to compress the file can be 70% of the - single-threaded deflate. For very large files on 4p machines the - compression can be done in 30% of the normal time. The downside - is that parallel deflate consumes extra memory during the deflate, - and the deflation is slightly less effective. - - - - Parallel deflate tends to not be as effective as single-threaded deflate - because the original data stream is split into multiple independent - buffers, each of which is compressed in parallel. But because they are - treated independently, there is no opportunity to share compression - dictionaries, and additional framing bytes must be added to the output - stream. For that reason, a deflated stream may be slightly larger when - compressed using parallel deflate, as compared to a traditional - single-threaded deflate. For files of about 512k, the increase over the - normal deflate is as much as 5% of the total compressed size. For larger - files, the difference can be as small as 0.1%. - - - - Multi-threaded compression does not give as much an advantage when using - Encryption. This is primarily because encryption tends to slow down - the entire pipeline. Also, multi-threaded compression gives less of an - advantage when using lower compression levels, for example . You may have to perform - some tests to determine the best approach for your situation. - - - - The default value for this property is -1, which means parallel - compression will not be performed unless you set it to zero. - - - - - - - The maximum number of buffer pairs to use when performing - parallel compression. - - - - - This property sets an upper limit on the number of memory - buffer pairs to create when performing parallel - compression. The implementation of the parallel - compression stream allocates multiple buffers to - facilitate parallel compression. As each buffer fills up, - the stream uses - ThreadPool.QueueUserWorkItem() to compress those - buffers in a background threadpool thread. After a buffer - is compressed, it is re-ordered and written to the output - stream. - - - - A higher number of buffer pairs enables a higher degree of - parallelism, which tends to increase the speed of compression on - multi-cpu computers. On the other hand, a higher number of buffer - pairs also implies a larger memory consumption, more active worker - threads, and a higher cpu utilization for any compression. This - property enables the application to limit its memory consumption and - CPU utilization behavior depending on requirements. - - - - For each compression "task" that occurs in parallel, there are 2 - buffers allocated: one for input and one for output. This property - sets a limit for the number of pairs. The total amount of storage - space allocated for buffering will then be (N*S*2), where N is the - number of buffer pairs, S is the size of each buffer (). By default, DotNetZip allocates 4 buffer - pairs per CPU core, so if your machine has 4 cores, and you retain - the default buffer size of 128k, then the - ParallelDeflateOutputStream will use 4 * 4 * 2 * 128kb of buffer - memory in total, or 4mb, in blocks of 128kb. If you then set this - property to 8, then the number will be 8 * 2 * 128kb of buffer - memory, or 2mb. - - - - CPU utilization will also go up with additional buffers, because a - larger number of buffer pairs allows a larger number of background - threads to compress in parallel. If you find that parallel - compression is consuming too much memory or CPU, you can adjust this - value downward. - - - - The default value is 16. Different values may deliver better or - worse results, depending on your priorities and the dynamic - performance characteristics of your storage and compute resources. - - - - This property is not the number of buffer pairs to use; it is an - upper limit. An illustration: Suppose you have an application that - uses the default value of this property (which is 16), and it runs - on a machine with 2 CPU cores. In that case, DotNetZip will allocate - 4 buffer pairs per CPU core, for a total of 8 pairs. The upper - limit specified by this property has no effect. - - - - The application can set this value at any time, but it is - effective only if set before calling - ZipOutputStream.Write() for the first time. - - - - - - - - - Returns true if an entry by the given name has already been written - to the ZipOutputStream. - - - - The name of the entry to scan for. - - - - true if an entry by the given name has already been written. - - - - - Write the data from the buffer to the stream. - - - - As the application writes data into this stream, the data may be - compressed and encrypted before being written out to the underlying - stream, depending on the settings of the - and the properties. - - - The buffer holding data to write to the stream. - the offset within that data array to find the first byte to write. - the number of bytes to write. - - - - Specify the name of the next entry that will be written to the zip file. - - - - - Call this method just before calling , to - specify the name of the entry that the next set of bytes written to - the ZipOutputStream belongs to. All subsequent calls to Write, - until the next call to PutNextEntry, - will be inserted into the named entry in the zip file. - - - - If the used in PutNextEntry() ends in - a slash, then the entry added is marked as a directory. Because directory - entries do not contain data, a call to Write(), before an - intervening additional call to PutNextEntry(), will throw an - exception. - - - - If you don't call Write() between two calls to - PutNextEntry(), the first entry is inserted into the zip file as a - file of zero size. This may be what you want. - - - - Because PutNextEntry() closes out the prior entry, if any, this - method may throw if there is a problem with the prior entry. - - - - This method returns the ZipEntry. You can modify public properties - on the ZipEntry, such as , , and so on, until the first call to - ZipOutputStream.Write(), or until the next call to - PutNextEntry(). If you modify the ZipEntry after - having called Write(), you may get a runtime exception, or you may - silently get an invalid zip archive. - - - - - - - This example shows how to create a zip file, using the - ZipOutputStream class. - - - private void Zipup() - { - using (FileStream fs raw = File.Open(_outputFileName, FileMode.Create, FileAccess.ReadWrite )) - { - using (var output= new ZipOutputStream(fs)) - { - output.Password = "VerySecret!"; - output.Encryption = EncryptionAlgorithm.WinZipAes256; - output.PutNextEntry("entry1.txt"); - byte[] buffer= System.Text.Encoding.ASCII.GetBytes("This is the content for entry #1."); - output.Write(buffer,0,buffer.Length); - output.PutNextEntry("entry2.txt"); // this will be zero length - output.PutNextEntry("entry3.txt"); - buffer= System.Text.Encoding.ASCII.GetBytes("This is the content for entry #3."); - output.Write(buffer,0,buffer.Length); - } - } - } - - - - - The name of the entry to be added, including any path to be used - within the zip file. - - - - The ZipEntry created. - - - - - - Dispose the stream - - - - - This method writes the Zip Central directory, then closes the stream. The - application must call Dispose() (or Close) in order to produce a valid zip file. - - - - Typically the application will call Dispose() implicitly, via a using - statement in C#, or a Using statement in VB. - - - - - set this to true, always. - - - - Always returns false. - - - - - Always returns false. - - - - - Always returns true. - - - - - Always returns a NotSupportedException. - - - - - Setting this property always returns a NotSupportedException. Getting it - returns the value of the Position on the underlying stream. - - - - - This is a no-op. - - - - - This method always throws a NotSupportedException. - - ignored - ignored - ignored - nothing - - - - This method always throws a NotSupportedException. - - ignored - ignored - nothing - - - - This method always throws a NotSupportedException. - - ignored - - - - Sort-of like a factory method, ForUpdate is used only when - the application needs to update the zip entry metadata for - a segmented zip file, when the starting segment is earlier - than the ending segment, for a particular entry. - - - - The update is always contiguous, never rolls over. As a - result, this method doesn't need to return a ZSS; it can - simply return a FileStream. That's why it's "sort of" - like a Factory method. - - - Caller must Close/Dispose the stream object returned by - this method. - - - - - - Name of the filesystem file corresponding to the current segment. - - - - The name is not always the name currently being used in the - filesystem. When rwMode is RwMode.Write, the filesystem file has a - temporary name until the stream is closed or until the next segment is - started. - - - - - - Read from the stream - - the buffer to read - the offset at which to start - the number of bytes to read - the number of bytes actually read - - - - Write to the stream. - - the buffer from which to write - the offset at which to start writing - the number of bytes to write - - - - Enumerates the options for a logical conjunction. This enum is intended for use - internally by the FileSelector class. - - - - - FileSelector encapsulates logic that selects files from a source - a zip file - or the filesystem - based on a set of criteria. This class is used internally - by the DotNetZip library, in particular for the AddSelectedFiles() methods. - This class can also be used independently of the zip capability in DotNetZip. - - - - - - The FileSelector class is used internally by the ZipFile class for selecting - files for inclusion into the ZipFile, when the method, or one of - its overloads, is called. It's also used for the methods. Typically, an - application that creates or manipulates Zip archives will not directly - interact with the FileSelector class. - - - - Some applications may wish to use the FileSelector class directly, to - select files from disk volumes based on a set of criteria, without creating or - querying Zip archives. The file selection criteria include: a pattern to - match the filename; the last modified, created, or last accessed time of the - file; the size of the file; and the attributes of the file. - - - - Consult the documentation for - for more information on specifying the selection criteria. - - - - - - - Constructor that allows the caller to specify file selection criteria. - - - - - This constructor allows the caller to specify a set of criteria for - selection of files. - - - - See for a description of - the syntax of the selectionCriteria string. - - - - By default the FileSelector will traverse NTFS Reparse Points. To - change this, use FileSelector(String, bool). - - - - The criteria for file selection. - - - - Constructor that allows the caller to specify file selection criteria. - - - - - This constructor allows the caller to specify a set of criteria for - selection of files. - - - - See for a description of - the syntax of the selectionCriteria string. - - - - The criteria for file selection. - - whether to traverse NTFS reparse points (junctions). - - - - - The string specifying which files to include when retrieving. - - - - - Specify the criteria in statements of 3 elements: a noun, an operator, - and a value. Consider the string "name != *.doc" . The noun is - "name". The operator is "!=", implying "Not Equal". The value is - "*.doc". That criterion, in English, says "all files with a name that - does not end in the .doc extension." - - - - Supported nouns include "name" (or "filename") for the filename; - "atime", "mtime", and "ctime" for last access time, last modfied time, - and created time of the file, respectively; "attributes" (or "attrs") - for the file attributes; "size" (or "length") for the file length - (uncompressed); and "type" for the type of object, either a file or a - directory. The "attributes", "type", and "name" nouns all support = - and != as operators. The "size", "atime", "mtime", and "ctime" nouns - support = and !=, and >, >=, <, <= as well. The times are - taken to be expressed in local time. - - - - Specify values for the file attributes as a string with one or more of - the characters H,R,S,A,I,L in any order, implying file attributes of - Hidden, ReadOnly, System, Archive, NotContextIndexed, and ReparsePoint - (symbolic link) respectively. - - - - To specify a time, use YYYY-MM-DD-HH:mm:ss or YYYY/MM/DD-HH:mm:ss as - the format. If you omit the HH:mm:ss portion, it is assumed to be - 00:00:00 (midnight). - - - - The value for a size criterion is expressed in integer quantities of - bytes, kilobytes (use k or kb after the number), megabytes (m or mb), - or gigabytes (g or gb). - - - - The value for a name is a pattern to match against the filename, - potentially including wildcards. The pattern follows CMD.exe glob - rules: * implies one or more of any character, while ? implies one - character. If the name pattern contains any slashes, it is matched to - the entire filename, including the path; otherwise, it is matched - against only the filename without the path. This means a pattern of - "*\*.*" matches all files one directory level deep, while a pattern of - "*.*" matches all files in all directories. - - - - To specify a name pattern that includes spaces, use single quotes - around the pattern. A pattern of "'* *.*'" will match all files that - have spaces in the filename. The full criteria string for that would - be "name = '* *.*'" . - - - - The value for a type criterion is either F (implying a file) or D - (implying a directory). - - - - Some examples: - - - - - criteria - Files retrieved - - - - name != *.xls - any file with an extension that is not .xls - - - - - name = *.mp3 - any file with a .mp3 extension. - - - - - *.mp3 - (same as above) any file with a .mp3 extension. - - - - - attributes = A - all files whose attributes include the Archive bit. - - - - - attributes != H - all files whose attributes do not include the Hidden bit. - - - - - mtime > 2009-01-01 - all files with a last modified time after January 1st, 2009. - - - - - ctime > 2009/01/01-03:00:00 - all files with a created time after 3am (local time), - on January 1st, 2009. - - - - - size > 2gb - all files whose uncompressed size is greater than 2gb. - - - - - type = D - all directories in the filesystem. - - - - - - You can combine criteria with the conjunctions AND, OR, and XOR. Using - a string like "name = *.txt AND size >= 100k" for the - selectionCriteria retrieves entries whose names end in .txt, and whose - uncompressed size is greater than or equal to 100 kilobytes. - - - - For more complex combinations of criteria, you can use parenthesis to - group clauses in the boolean logic. Absent parenthesis, the - precedence of the criterion atoms is determined by order of - appearance. Unlike the C# language, the AND conjunction does not take - precendence over the logical OR. This is important only in strings - that contain 3 or more criterion atoms. In other words, "name = *.txt - and size > 1000 or attributes = H" implies "((name = *.txt AND size - > 1000) OR attributes = H)" while "attributes = H OR name = *.txt - and size > 1000" evaluates to "((attributes = H OR name = *.txt) - AND size > 1000)". When in doubt, use parenthesis. - - - - Using time properties requires some extra care. If you want to - retrieve all entries that were last updated on 2009 February 14, - specify "mtime >= 2009-02-14 AND mtime < 2009-02-15". Read this - to say: all files updated after 12:00am on February 14th, until - 12:00am on February 15th. You can use the same bracketing approach to - specify any time period - a year, a month, a week, and so on. - - - - The syntax allows one special case: if you provide a string with no - spaces, it is treated as a pattern to match for the filename. - Therefore a string like "*.xls" will be equivalent to specifying "name - = *.xls". This "shorthand" notation does not work with compound - criteria. - - - - There is no logic in this class that insures that the inclusion - criteria are internally consistent. For example, it's possible to - specify criteria that says the file must have a size of less than 100 - bytes, as well as a size that is greater than 1000 bytes. Obviously - no file will ever satisfy such criteria, but this class does not check - for or detect such inconsistencies. - - - - - - Thrown in the setter if the value has an invalid syntax. - - - - - Indicates whether searches will traverse NTFS reparse points, like Junctions. - - - - - Returns a string representation of the FileSelector object. - - The string representation of the boolean logic statement of the file - selection criteria for this instance. - - - - Returns the names of the files in the specified directory - that fit the selection criteria specified in the FileSelector. - - - - This is equivalent to calling - with recurseDirectories = false. - - - - The name of the directory over which to apply the FileSelector - criteria. - - - - A collection of strings containing fully-qualified pathnames of files - that match the criteria specified in the FileSelector instance. - - - - - Returns the names of the files in the specified directory that fit the - selection criteria specified in the FileSelector, optionally recursing - through subdirectories. - - - - This method applies the file selection criteria contained in the - FileSelector to the files contained in the given directory, and - returns the names of files that conform to the criteria. - - - - The name of the directory over which to apply the FileSelector - criteria. - - - - Whether to recurse through subdirectories when applying the file - selection criteria. - - - - A collection of strings containing fully-qualified pathnames of files - that match the criteria specified in the FileSelector instance. - - - - - Retrieve the ZipEntry items in the ZipFile that conform to the specified criteria. - - - - - This method applies the criteria set in the FileSelector instance (as described in - the ) to the specified ZipFile. Using this - method, for example, you can retrieve all entries from the given ZipFile that - have filenames ending in .txt. - - - - Normally, applications would not call this method directly. This method is used - by the ZipFile class. - - - - Using the appropriate SelectionCriteria, you can retrieve entries based on size, - time, and attributes. See for a - description of the syntax of the SelectionCriteria string. - - - - - The ZipFile from which to retrieve entries. - - a collection of ZipEntry objects that conform to the criteria. - - - - Retrieve the ZipEntry items in the ZipFile that conform to the specified criteria. - - - - - This method applies the criteria set in the FileSelector instance (as described in - the ) to the specified ZipFile. Using this - method, for example, you can retrieve all entries from the given ZipFile that - have filenames ending in .txt. - - - - Normally, applications would not call this method directly. This method is used - by the ZipFile class. - - - - This overload allows the selection of ZipEntry instances from the ZipFile to be restricted - to entries contained within a particular directory in the ZipFile. - - - - Using the appropriate SelectionCriteria, you can retrieve entries based on size, - time, and attributes. See for a - description of the syntax of the SelectionCriteria string. - - - - - The ZipFile from which to retrieve entries. - - - the directory in the archive from which to select entries. If null, then - all directories in the archive are used. - - - a collection of ZipEntry objects that conform to the criteria. - - - - Summary description for EnumUtil. - - - - - Returns the value of the DescriptionAttribute if the specified Enum - value has one. If not, returns the ToString() representation of the - Enum value. - - The Enum to get the description for - - - - - Converts the string representation of the name or numeric value of one - or more enumerated constants to an equivalent enumerated object. - Note: use the DescriptionAttribute on enum values to enable this. - - The System.Type of the enumeration. - - A string containing the name or value to convert. - - - - - - Converts the string representation of the name or numeric value of one - or more enumerated constants to an equivalent enumerated object. A - parameter specified whether the operation is case-sensitive. Note: - use the DescriptionAttribute on enum values to enable this. - - The System.Type of the enumeration. - - A string containing the name or value to convert. - - - Whether the operation is case-sensitive or not. - - - - - Computes a CRC-32. The CRC-32 algorithm is parameterized - you - can set the polynomial and enable or disable bit - reversal. This can be used for GZIP, BZip2, or ZIP. - - - This type is used internally by DotNetZip; it is generally not used - directly by applications wishing to create, read, or manipulate zip - archive files. - - - - - Indicates the total number of bytes applied to the CRC. - - - - - Indicates the current CRC for all blocks slurped in. - - - - - Returns the CRC32 for the specified stream. - - The stream over which to calculate the CRC32 - the CRC32 calculation - - - - Returns the CRC32 for the specified stream, and writes the input into the - output stream. - - The stream over which to calculate the CRC32 - The stream into which to deflate the input - the CRC32 calculation - - - - Get the CRC32 for the given (word,byte) combo. This is a - computation defined by PKzip for PKZIP 2.0 (weak) encryption. - - The word to start with. - The byte to combine it with. - The CRC-ized result. - - - - Update the value for the running CRC32 using the given block of bytes. - This is useful when using the CRC32() class in a Stream. - - block of bytes to slurp - starting point in the block - how many bytes within the block to slurp - - - - Process one byte in the CRC. - - the byte to include into the CRC . - - - - Process a run of N identical bytes into the CRC. - - - - This method serves as an optimization for updating the CRC when a - run of identical bytes is found. Rather than passing in a buffer of - length n, containing all identical bytes b, this method accepts the - byte value and the length of the (virtual) buffer - the length of - the run. - - - the byte to include into the CRC. - the number of times that byte should be repeated. - - - - Combines the given CRC32 value with the current running total. - - - This is useful when using a divide-and-conquer approach to - calculating a CRC. Multiple threads can each calculate a - CRC32 on a segment of the data, and then combine the - individual CRC32 values at the end. - - the crc value to be combined with this one - the length of data the CRC value was calculated on - - - - Create an instance of the CRC32 class using the default settings: no - bit reversal, and a polynomial of 0xEDB88320. - - - - - Create an instance of the CRC32 class, specifying whether to reverse - data bits or not. - - - specify true if the instance should reverse data bits. - - - - In the CRC-32 used by BZip2, the bits are reversed. Therefore if you - want a CRC32 with compatibility with BZip2, you should pass true - here. In the CRC-32 used by GZIP and PKZIP, the bits are not - reversed; Therefore if you want a CRC32 with compatibility with - those, you should pass false. - - - - - - Create an instance of the CRC32 class, specifying the polynomial and - whether to reverse data bits or not. - - - The polynomial to use for the CRC, expressed in the reversed (LSB) - format: the highest ordered bit in the polynomial value is the - coefficient of the 0th power; the second-highest order bit is the - coefficient of the 1 power, and so on. Expressed this way, the - polynomial for the CRC-32C used in IEEE 802.3, is 0xEDB88320. - - - specify true if the instance should reverse data bits. - - - - - In the CRC-32 used by BZip2, the bits are reversed. Therefore if you - want a CRC32 with compatibility with BZip2, you should pass true - here for the reverseBits parameter. In the CRC-32 used by - GZIP and PKZIP, the bits are not reversed; Therefore if you want a - CRC32 with compatibility with those, you should pass false for the - reverseBits parameter. - - - - - - Reset the CRC-32 class - clear the CRC "remainder register." - - - - Use this when employing a single instance of this class to compute - multiple, distinct CRCs on multiple, distinct data blocks. - - - - - - A Stream that calculates a CRC32 (a checksum) on all bytes read, - or on all bytes written. - - - - - This class can be used to verify the CRC of a ZipEntry when - reading from a stream, or to calculate a CRC when writing to a - stream. The stream should be used to either read, or write, but - not both. If you intermix reads and writes, the results are not - defined. - - - - This class is intended primarily for use internally by the - DotNetZip library. - - - - - - The default constructor. - - - - Instances returned from this constructor will leave the underlying - stream open upon Close(). The stream uses the default CRC32 - algorithm, which implies a polynomial of 0xEDB88320. - - - The underlying stream - - - - The constructor allows the caller to specify how to handle the - underlying stream at close. - - - - The stream uses the default CRC32 algorithm, which implies a - polynomial of 0xEDB88320. - - - The underlying stream - true to leave the underlying stream - open upon close of the CrcCalculatorStream; false otherwise. - - - - A constructor allowing the specification of the length of the stream - to read. - - - - The stream uses the default CRC32 algorithm, which implies a - polynomial of 0xEDB88320. - - - Instances returned from this constructor will leave the underlying - stream open upon Close(). - - - The underlying stream - The length of the stream to slurp - - - - A constructor allowing the specification of the length of the stream - to read, as well as whether to keep the underlying stream open upon - Close(). - - - - The stream uses the default CRC32 algorithm, which implies a - polynomial of 0xEDB88320. - - - The underlying stream - The length of the stream to slurp - true to leave the underlying stream - open upon close of the CrcCalculatorStream; false otherwise. - - - - A constructor allowing the specification of the length of the stream - to read, as well as whether to keep the underlying stream open upon - Close(), and the CRC32 instance to use. - - - - The stream uses the specified CRC32 instance, which allows the - application to specify how the CRC gets calculated. - - - The underlying stream - The length of the stream to slurp - true to leave the underlying stream - open upon close of the CrcCalculatorStream; false otherwise. - the CRC32 instance to use to calculate the CRC32 - - - - Gets the total number of bytes run through the CRC32 calculator. - - - - This is either the total number of bytes read, or the total number of - bytes written, depending on the direction of this stream. - - - - - Provides the current CRC for all blocks slurped in. - - - - The running total of the CRC is kept as data is written or read - through the stream. read this property after all reads or writes to - get an accurate CRC for the entire stream. - - - - - - Indicates whether the underlying stream will be left open when the - CrcCalculatorStream is Closed. - - - - Set this at any point before calling . - - - - - - Read from the stream - - the buffer to read - the offset at which to start - the number of bytes to read - the number of bytes actually read - - - - Write to the stream. - - the buffer from which to write - the offset at which to start writing - the number of bytes to write - - - - Indicates whether the stream supports reading. - - - - - Indicates whether the stream supports seeking. - - - - Always returns false. - - - - - - Indicates whether the stream supports writing. - - - - - Flush the stream. - - - - - Returns the length of the underlying stream. - - - - - The getter for this property returns the total bytes read. - If you use the setter, it will throw - . - - - - - Seeking is not supported on this stream. This method always throws - - - N/A - N/A - N/A - - - - This method always throws - - - N/A - - - - Closes the stream. - - - - - A class for compressing and decompressing streams using the Deflate algorithm. - - - - - - The DeflateStream is a Decorator on a . It adds DEFLATE compression or decompression to any - stream. - - - - Using this stream, applications can compress or decompress data via stream - Read and Write operations. Either compresssion or decompression - can occur through either reading or writing. The compression format used is - DEFLATE, which is documented in IETF RFC 1951, "DEFLATE - Compressed Data Format Specification version 1.3.". - - - - This class is similar to , except that - ZlibStream adds the RFC - 1950 - ZLIB framing bytes to a compressed stream when compressing, or - expects the RFC1950 framing bytes when decompressing. The DeflateStream - does not. - - - - - - - - - - Create a DeflateStream using the specified CompressionMode. - - - - When mode is CompressionMode.Compress, the DeflateStream will use - the default compression level. The "captive" stream will be closed when - the DeflateStream is closed. - - - - This example uses a DeflateStream to compress data from a file, and writes - the compressed data to another file. - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(fileToCompress + ".deflated")) - { - using (Stream compressor = new DeflateStream(raw, CompressionMode.Compress)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(fileToCompress & ".deflated") - Using compressor As Stream = New DeflateStream(raw, CompressionMode.Compress) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - The stream which will be read or written. - Indicates whether the DeflateStream will compress or decompress. - - - - Create a DeflateStream using the specified CompressionMode and the specified CompressionLevel. - - - - - - When mode is CompressionMode.Decompress, the level parameter is - ignored. The "captive" stream will be closed when the DeflateStream is - closed. - - - - - - - This example uses a DeflateStream to compress data from a file, and writes - the compressed data to another file. - - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(fileToCompress + ".deflated")) - { - using (Stream compressor = new DeflateStream(raw, - CompressionMode.Compress, - CompressionLevel.BestCompression)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n= -1; - while (n != 0) - { - if (n > 0) - compressor.Write(buffer, 0, n); - n= input.Read(buffer, 0, buffer.Length); - } - } - } - } - - - - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(fileToCompress & ".deflated") - Using compressor As Stream = New DeflateStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - The stream to be read or written while deflating or inflating. - Indicates whether the DeflateStream will compress or decompress. - A tuning knob to trade speed for effectiveness. - - - - Create a DeflateStream using the specified - CompressionMode, and explicitly specify whether the - stream should be left open after Deflation or Inflation. - - - - - - This constructor allows the application to request that the captive stream - remain open after the deflation or inflation occurs. By default, after - Close() is called on the stream, the captive stream is also - closed. In some cases this is not desired, for example if the stream is a - memory stream that will be re-read after compression. Specify true for - the parameter to leave the stream open. - - - - The DeflateStream will use the default compression level. - - - - See the other overloads of this constructor for example code. - - - - - The stream which will be read or written. This is called the - "captive" stream in other places in this documentation. - - - - Indicates whether the DeflateStream will compress or decompress. - - - true if the application would like the stream to - remain open after inflation/deflation. - - - - Create a DeflateStream using the specified CompressionMode - and the specified CompressionLevel, and explicitly specify whether - the stream should be left open after Deflation or Inflation. - - - - - - When mode is CompressionMode.Decompress, the level parameter is ignored. - - - - This constructor allows the application to request that the captive stream - remain open after the deflation or inflation occurs. By default, after - Close() is called on the stream, the captive stream is also - closed. In some cases this is not desired, for example if the stream is a - that will be re-read after - compression. Specify true for the parameter - to leave the stream open. - - - - - - - This example shows how to use a DeflateStream to compress data from - a file, and store the compressed data into another file. - - - using (var output = System.IO.File.Create(fileToCompress + ".deflated")) - { - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (Stream compressor = new DeflateStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n= -1; - while (n != 0) - { - if (n > 0) - compressor.Write(buffer, 0, n); - n= input.Read(buffer, 0, buffer.Length); - } - } - } - // can write additional data to the output stream here - } - - - - Using output As FileStream = File.Create(fileToCompress & ".deflated") - Using input As Stream = File.OpenRead(fileToCompress) - Using compressor As Stream = New DeflateStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - ' can write additional data to the output stream here. - End Using - - - The stream which will be read or written. - Indicates whether the DeflateStream will compress or decompress. - true if the application would like the stream to remain open after inflation/deflation. - A tuning knob to trade speed for effectiveness. - - - - This property sets the flush behavior on the stream. - - See the ZLIB documentation for the meaning of the flush behavior. - - - - - The size of the working buffer for the compression codec. - - - - - The working buffer is used for all stream operations. The default size is - 1024 bytes. The minimum size is 128 bytes. You may get better performance - with a larger buffer. Then again, you might not. You would have to test - it. - - - - Set this before the first call to Read() or Write() on the - stream. If you try to set it afterwards, it will throw. - - - - - - The ZLIB strategy to be used during compression. - - - - By tweaking this parameter, you may be able to optimize the compression for - data with particular characteristics. - - - - Returns the total number of bytes input so far. - - - Returns the total number of bytes output so far. - - - - Dispose the stream. - - - - This may or may not result in a Close() call on the captive - stream. See the constructors that have a leaveOpen parameter - for more information. - - - Application code won't call this code directly. This method may be - invoked in two distinct scenarios. If disposing == true, the method - has been called directly or indirectly by a user's code, for example - via the public Dispose() method. In this case, both managed and - unmanaged resources can be referenced and disposed. If disposing == - false, the method has been called by the runtime from inside the - object finalizer and this method should not reference other objects; - in that case only unmanaged resources must be referenced or - disposed. - - - - true if the Dispose method was invoked by user code. - - - - - Indicates whether the stream can be read. - - - The return value depends on whether the captive stream supports reading. - - - - - Indicates whether the stream supports Seek operations. - - - Always returns false. - - - - - Indicates whether the stream can be written. - - - The return value depends on whether the captive stream supports writing. - - - - - Flush the stream. - - - - - Reading this property always throws a . - - - - - The position of the stream pointer. - - - - Setting this property always throws a . Reading will return the total bytes - written out, if used in writing, or the total bytes read in, if used in - reading. The count may refer to compressed bytes or uncompressed bytes, - depending on how you've used the stream. - - - - - Read data from the stream. - - - - - If you wish to use the DeflateStream to compress data while - reading, you can create a DeflateStream with - CompressionMode.Compress, providing an uncompressed data stream. - Then call Read() on that DeflateStream, and the data read will be - compressed as you read. If you wish to use the DeflateStream to - decompress data while reading, you can create a DeflateStream with - CompressionMode.Decompress, providing a readable compressed data - stream. Then call Read() on that DeflateStream, and the data read - will be decompressed as you read. - - - - A DeflateStream can be used for Read() or Write(), but not both. - - - - The buffer into which the read data should be placed. - the offset within that data array to put the first byte read. - the number of bytes to read. - the number of bytes actually read - - - - Calling this method always throws a . - - this is irrelevant, since it will always throw! - this is irrelevant, since it will always throw! - irrelevant! - - - - Calling this method always throws a . - - this is irrelevant, since it will always throw! - - - - Write data to the stream. - - - - - If you wish to use the DeflateStream to compress data while - writing, you can create a DeflateStream with - CompressionMode.Compress, and a writable output stream. Then call - Write() on that DeflateStream, providing uncompressed data - as input. The data sent to the output stream will be the compressed form - of the data written. If you wish to use the DeflateStream to - decompress data while writing, you can create a DeflateStream with - CompressionMode.Decompress, and a writable output stream. Then - call Write() on that stream, providing previously compressed - data. The data sent to the output stream will be the decompressed form of - the data written. - - - - A DeflateStream can be used for Read() or Write(), - but not both. - - - - - The buffer holding data to write to the stream. - the offset within that data array to find the first byte to write. - the number of bytes to write. - - - - Compress a string into a byte array using DEFLATE (RFC 1951). - - - - Uncompress it with . - - - DeflateStream.UncompressString(byte[]) - DeflateStream.CompressBuffer(byte[]) - GZipStream.CompressString(string) - ZlibStream.CompressString(string) - - - A string to compress. The string will first be encoded - using UTF8, then compressed. - - - The string in compressed form - - - - Compress a byte array into a new byte array using DEFLATE. - - - - Uncompress it with . - - - DeflateStream.CompressString(string) - DeflateStream.UncompressBuffer(byte[]) - GZipStream.CompressBuffer(byte[]) - ZlibStream.CompressBuffer(byte[]) - - - A buffer to compress. - - - The data in compressed form - - - - Uncompress a DEFLATE'd byte array into a single string. - - - DeflateStream.CompressString(String) - DeflateStream.UncompressBuffer(byte[]) - GZipStream.UncompressString(byte[]) - ZlibStream.UncompressString(byte[]) - - - A buffer containing DEFLATE-compressed data. - - - The uncompressed string - - - - Uncompress a DEFLATE'd byte array into a byte array. - - - DeflateStream.CompressBuffer(byte[]) - DeflateStream.UncompressString(byte[]) - GZipStream.UncompressBuffer(byte[]) - ZlibStream.UncompressBuffer(byte[]) - - - A buffer containing data that has been compressed with DEFLATE. - - - The data in uncompressed form - - - - A class for compressing and decompressing GZIP streams. - - - - - The GZipStream is a Decorator on a - . It adds GZIP compression or decompression to any - stream. - - - - Like the System.IO.Compression.GZipStream in the .NET Base Class Library, the - Ionic.Zlib.GZipStream can compress while writing, or decompress while - reading, but not vice versa. The compression method used is GZIP, which is - documented in IETF RFC - 1952, "GZIP file format specification version 4.3". - - - A GZipStream can be used to decompress data (through Read()) or - to compress data (through Write()), but not both. - - - - If you wish to use the GZipStream to compress data, you must wrap it - around a write-able stream. As you call Write() on the GZipStream, the - data will be compressed into the GZIP format. If you want to decompress data, - you must wrap the GZipStream around a readable stream that contains an - IETF RFC 1952-compliant stream. The data will be decompressed as you call - Read() on the GZipStream. - - - - Though the GZIP format allows data from multiple files to be concatenated - together, this stream handles only a single segment of GZIP format, typically - representing a single file. - - - - This class is similar to and . - ZlibStream handles RFC1950-compliant streams. - handles RFC1951-compliant streams. This class handles RFC1952-compliant streams. - - - - - - - - - - The comment on the GZIP stream. - - - - - The GZIP format allows for each file to optionally have an associated - comment stored with the file. The comment is encoded with the ISO-8859-1 - code page. To include a comment in a GZIP stream you create, set this - property before calling Write() for the first time on the - GZipStream. - - - - When using GZipStream to decompress, you can retrieve this property - after the first call to Read(). If no comment has been set in the - GZIP bytestream, the Comment property will return null - (Nothing in VB). - - - - - - The FileName for the GZIP stream. - - - - - - The GZIP format optionally allows each file to have an associated - filename. When compressing data (through Write()), set this - FileName before calling Write() the first time on the GZipStream. - The actual filename is encoded into the GZIP bytestream with the - ISO-8859-1 code page, according to RFC 1952. It is the application's - responsibility to insure that the FileName can be encoded and decoded - correctly with this code page. - - - - When decompressing (through Read()), you can retrieve this value - any time after the first Read(). In the case where there was no filename - encoded into the GZIP bytestream, the property will return null (Nothing - in VB). - - - - - - The last modified time for the GZIP stream. - - - - GZIP allows the storage of a last modified time with each GZIP entry. - When compressing data, you can set this before the first call to - Write(). When decompressing, you can retrieve this value any time - after the first call to Read(). - - - - - The CRC on the GZIP stream. - - - This is used for internal error checking. You probably don't need to look at this property. - - - - - Create a GZipStream using the specified CompressionMode. - - - - - When mode is CompressionMode.Compress, the GZipStream will use the - default compression level. - - - - As noted in the class documentation, the CompressionMode (Compress - or Decompress) also establishes the "direction" of the stream. A - GZipStream with CompressionMode.Compress works only through - Write(). A GZipStream with - CompressionMode.Decompress works only through Read(). - - - - - - This example shows how to use a GZipStream to compress data. - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(outputFile)) - { - using (Stream compressor = new GZipStream(raw, CompressionMode.Compress)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - Dim outputFile As String = (fileToCompress & ".compressed") - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(outputFile) - Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - - - This example shows how to use a GZipStream to uncompress a file. - - private void GunZipFile(string filename) - { - if (!filename.EndsWith(".gz)) - throw new ArgumentException("filename"); - var DecompressedFile = filename.Substring(0,filename.Length-3); - byte[] working = new byte[WORKING_BUFFER_SIZE]; - int n= 1; - using (System.IO.Stream input = System.IO.File.OpenRead(filename)) - { - using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) - { - using (var output = System.IO.File.Create(DecompressedFile)) - { - while (n !=0) - { - n= decompressor.Read(working, 0, working.Length); - if (n > 0) - { - output.Write(working, 0, n); - } - } - } - } - } - } - - - - Private Sub GunZipFile(ByVal filename as String) - If Not (filename.EndsWith(".gz)) Then - Throw New ArgumentException("filename") - End If - Dim DecompressedFile as String = filename.Substring(0,filename.Length-3) - Dim working(WORKING_BUFFER_SIZE) as Byte - Dim n As Integer = 1 - Using input As Stream = File.OpenRead(filename) - Using decompressor As Stream = new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, True) - Using output As Stream = File.Create(UncompressedFile) - Do - n= decompressor.Read(working, 0, working.Length) - If n > 0 Then - output.Write(working, 0, n) - End IF - Loop While (n > 0) - End Using - End Using - End Using - End Sub - - - - The stream which will be read or written. - Indicates whether the GZipStream will compress or decompress. - - - - Create a GZipStream using the specified CompressionMode and - the specified CompressionLevel. - - - - - The CompressionMode (Compress or Decompress) also establishes the - "direction" of the stream. A GZipStream with - CompressionMode.Compress works only through Write(). A - GZipStream with CompressionMode.Decompress works only - through Read(). - - - - - - - This example shows how to use a GZipStream to compress a file into a .gz file. - - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(fileToCompress + ".gz")) - { - using (Stream compressor = new GZipStream(raw, - CompressionMode.Compress, - CompressionLevel.BestCompression)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(fileToCompress & ".gz") - Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - The stream to be read or written while deflating or inflating. - Indicates whether the GZipStream will compress or decompress. - A tuning knob to trade speed for effectiveness. - - - - Create a GZipStream using the specified CompressionMode, and - explicitly specify whether the stream should be left open after Deflation - or Inflation. - - - - - This constructor allows the application to request that the captive stream - remain open after the deflation or inflation occurs. By default, after - Close() is called on the stream, the captive stream is also - closed. In some cases this is not desired, for example if the stream is a - memory stream that will be re-read after compressed data has been written - to it. Specify true for the parameter to leave - the stream open. - - - - The (Compress or Decompress) also - establishes the "direction" of the stream. A GZipStream with - CompressionMode.Compress works only through Write(). A GZipStream - with CompressionMode.Decompress works only through Read(). - - - - The GZipStream will use the default compression level. If you want - to specify the compression level, see . - - - - See the other overloads of this constructor for example code. - - - - - - The stream which will be read or written. This is called the "captive" - stream in other places in this documentation. - - - Indicates whether the GZipStream will compress or decompress. - - - - true if the application would like the base stream to remain open after - inflation/deflation. - - - - - Create a GZipStream using the specified CompressionMode and the - specified CompressionLevel, and explicitly specify whether the - stream should be left open after Deflation or Inflation. - - - - - - This constructor allows the application to request that the captive stream - remain open after the deflation or inflation occurs. By default, after - Close() is called on the stream, the captive stream is also - closed. In some cases this is not desired, for example if the stream is a - memory stream that will be re-read after compressed data has been written - to it. Specify true for the parameter to - leave the stream open. - - - - As noted in the class documentation, the CompressionMode (Compress - or Decompress) also establishes the "direction" of the stream. A - GZipStream with CompressionMode.Compress works only through - Write(). A GZipStream with CompressionMode.Decompress works only - through Read(). - - - - - - This example shows how to use a GZipStream to compress data. - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(outputFile)) - { - using (Stream compressor = new GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, true)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - Dim outputFile As String = (fileToCompress & ".compressed") - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(outputFile) - Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, True) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - The stream which will be read or written. - Indicates whether the GZipStream will compress or decompress. - true if the application would like the stream to remain open after inflation/deflation. - A tuning knob to trade speed for effectiveness. - - - - This property sets the flush behavior on the stream. - - - - - The size of the working buffer for the compression codec. - - - - - The working buffer is used for all stream operations. The default size is - 1024 bytes. The minimum size is 128 bytes. You may get better performance - with a larger buffer. Then again, you might not. You would have to test - it. - - - - Set this before the first call to Read() or Write() on the - stream. If you try to set it afterwards, it will throw. - - - - - Returns the total number of bytes input so far. - - - Returns the total number of bytes output so far. - - - - Dispose the stream. - - - - This may or may not result in a Close() call on the captive - stream. See the constructors that have a leaveOpen parameter - for more information. - - - This method may be invoked in two distinct scenarios. If disposing - == true, the method has been called directly or indirectly by a - user's code, for example via the public Dispose() method. In this - case, both managed and unmanaged resources can be referenced and - disposed. If disposing == false, the method has been called by the - runtime from inside the object finalizer and this method should not - reference other objects; in that case only unmanaged resources must - be referenced or disposed. - - - - indicates whether the Dispose method was invoked by user code. - - - - - Indicates whether the stream can be read. - - - The return value depends on whether the captive stream supports reading. - - - - - Indicates whether the stream supports Seek operations. - - - Always returns false. - - - - - Indicates whether the stream can be written. - - - The return value depends on whether the captive stream supports writing. - - - - - Flush the stream. - - - - - Reading this property always throws a . - - - - - The position of the stream pointer. - - - - Setting this property always throws a . Reading will return the total bytes - written out, if used in writing, or the total bytes read in, if used in - reading. The count may refer to compressed bytes or uncompressed bytes, - depending on how you've used the stream. - - - - - Read and decompress data from the source stream. - - - - With a GZipStream, decompression is done through reading. - - - - - byte[] working = new byte[WORKING_BUFFER_SIZE]; - using (System.IO.Stream input = System.IO.File.OpenRead(_CompressedFile)) - { - using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) - { - using (var output = System.IO.File.Create(_DecompressedFile)) - { - int n; - while ((n= decompressor.Read(working, 0, working.Length)) !=0) - { - output.Write(working, 0, n); - } - } - } - } - - - The buffer into which the decompressed data should be placed. - the offset within that data array to put the first byte read. - the number of bytes to read. - the number of bytes actually read - - - - Calling this method always throws a . - - irrelevant; it will always throw! - irrelevant; it will always throw! - irrelevant! - - - - Calling this method always throws a . - - irrelevant; this method will always throw! - - - - Write data to the stream. - - - - - If you wish to use the GZipStream to compress data while writing, - you can create a GZipStream with CompressionMode.Compress, and a - writable output stream. Then call Write() on that GZipStream, - providing uncompressed data as input. The data sent to the output stream - will be the compressed form of the data written. - - - - A GZipStream can be used for Read() or Write(), but not - both. Writing implies compression. Reading implies decompression. - - - - The buffer holding data to write to the stream. - the offset within that data array to find the first byte to write. - the number of bytes to write. - - - - Compress a string into a byte array using GZip. - - - - Uncompress it with . - - - - - - - A string to compress. The string will first be encoded - using UTF8, then compressed. - - - The string in compressed form - - - - Compress a byte array into a new byte array using GZip. - - - - Uncompress it with . - - - - - - - A buffer to compress. - - - The data in compressed form - - - - Uncompress a GZip'ed byte array into a single string. - - - - - - - A buffer containing GZIP-compressed data. - - - The uncompressed string - - - - Uncompress a GZip'ed byte array into a byte array. - - - - - - - A buffer containing data that has been compressed with GZip. - - - The data in uncompressed form - - - - A class for compressing streams using the - Deflate algorithm with multiple threads. - - - - - This class performs DEFLATE compression through writing. For - more information on the Deflate algorithm, see IETF RFC 1951, - "DEFLATE Compressed Data Format Specification version 1.3." - - - - This class is similar to , except - that this class is for compression only, and this implementation uses an - approach that employs multiple worker threads to perform the DEFLATE. On - a multi-cpu or multi-core computer, the performance of this class can be - significantly higher than the single-threaded DeflateStream, particularly - for larger streams. How large? Anything over 10mb is a good candidate - for parallel compression. - - - - The tradeoff is that this class uses more memory and more CPU than the - vanilla DeflateStream, and also is less efficient as a compressor. For - large files the size of the compressed data stream can be less than 1% - larger than the size of a compressed data stream from the vanialla - DeflateStream. For smaller files the difference can be larger. The - difference will also be larger if you set the BufferSize to be lower than - the default value. Your mileage may vary. Finally, for small files, the - ParallelDeflateOutputStream can be much slower than the vanilla - DeflateStream, because of the overhead associated to using the thread - pool. - - - - - - - - Create a ParallelDeflateOutputStream. - - - - - This stream compresses data written into it via the DEFLATE - algorithm (see RFC 1951), and writes out the compressed byte stream. - - - - The instance will use the default compression level, the default - buffer sizes and the default number of threads and buffers per - thread. - - - - This class is similar to , - except that this implementation uses an approach that employs - multiple worker threads to perform the DEFLATE. On a multi-cpu or - multi-core computer, the performance of this class can be - significantly higher than the single-threaded DeflateStream, - particularly for larger streams. How large? Anything over 10mb is - a good candidate for parallel compression. - - - - - - - This example shows how to use a ParallelDeflateOutputStream to compress - data. It reads a file, compresses it, and writes the compressed data to - a second, output file. - - - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n= -1; - String outputFile = fileToCompress + ".compressed"; - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(outputFile)) - { - using (Stream compressor = new ParallelDeflateOutputStream(raw)) - { - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Dim outputFile As String = (fileToCompress & ".compressed") - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(outputFile) - Using compressor As Stream = New ParallelDeflateOutputStream(raw) - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - The stream to which compressed data will be written. - - - - Create a ParallelDeflateOutputStream using the specified CompressionLevel. - - - See the - constructor for example code. - - The stream to which compressed data will be written. - A tuning knob to trade speed for effectiveness. - - - - Create a ParallelDeflateOutputStream and specify whether to leave the captive stream open - when the ParallelDeflateOutputStream is closed. - - - See the - constructor for example code. - - The stream to which compressed data will be written. - - true if the application would like the stream to remain open after inflation/deflation. - - - - - Create a ParallelDeflateOutputStream and specify whether to leave the captive stream open - when the ParallelDeflateOutputStream is closed. - - - See the - constructor for example code. - - The stream to which compressed data will be written. - A tuning knob to trade speed for effectiveness. - - true if the application would like the stream to remain open after inflation/deflation. - - - - - Create a ParallelDeflateOutputStream using the specified - CompressionLevel and CompressionStrategy, and specifying whether to - leave the captive stream open when the ParallelDeflateOutputStream is - closed. - - - See the - constructor for example code. - - The stream to which compressed data will be written. - A tuning knob to trade speed for effectiveness. - - By tweaking this parameter, you may be able to optimize the compression for - data with particular characteristics. - - - true if the application would like the stream to remain open after inflation/deflation. - - - - - The ZLIB strategy to be used during compression. - - - - - - The maximum number of buffer pairs to use. - - - - - This property sets an upper limit on the number of memory buffer - pairs to create. The implementation of this stream allocates - multiple buffers to facilitate parallel compression. As each buffer - fills up, this stream uses - ThreadPool.QueueUserWorkItem() - to compress those buffers in a background threadpool thread. After a - buffer is compressed, it is re-ordered and written to the output - stream. - - - - A higher number of buffer pairs enables a higher degree of - parallelism, which tends to increase the speed of compression on - multi-cpu computers. On the other hand, a higher number of buffer - pairs also implies a larger memory consumption, more active worker - threads, and a higher cpu utilization for any compression. This - property enables the application to limit its memory consumption and - CPU utilization behavior depending on requirements. - - - - For each compression "task" that occurs in parallel, there are 2 - buffers allocated: one for input and one for output. This property - sets a limit for the number of pairs. The total amount of storage - space allocated for buffering will then be (N*S*2), where N is the - number of buffer pairs, S is the size of each buffer (). By default, DotNetZip allocates 4 buffer - pairs per CPU core, so if your machine has 4 cores, and you retain - the default buffer size of 128k, then the - ParallelDeflateOutputStream will use 4 * 4 * 2 * 128kb of buffer - memory in total, or 4mb, in blocks of 128kb. If you then set this - property to 8, then the number will be 8 * 2 * 128kb of buffer - memory, or 2mb. - - - - CPU utilization will also go up with additional buffers, because a - larger number of buffer pairs allows a larger number of background - threads to compress in parallel. If you find that parallel - compression is consuming too much memory or CPU, you can adjust this - value downward. - - - - The default value is 16. Different values may deliver better or - worse results, depending on your priorities and the dynamic - performance characteristics of your storage and compute resources. - - - - This property is not the number of buffer pairs to use; it is an - upper limit. An illustration: Suppose you have an application that - uses the default value of this property (which is 16), and it runs - on a machine with 2 CPU cores. In that case, DotNetZip will allocate - 4 buffer pairs per CPU core, for a total of 8 pairs. The upper - limit specified by this property has no effect. - - - - The application can set this value at any time, but it is effective - only before the first call to Write(), which is when the buffers are - allocated. - - - - - - The size of the buffers used by the compressor threads. - - - - - The default buffer size is 128k. The application can set this value - at any time, but it is effective only before the first Write(). - - - - Larger buffer sizes implies larger memory consumption but allows - more efficient compression. Using smaller buffer sizes consumes less - memory but may result in less effective compression. For example, - using the default buffer size of 128k, the compression delivered is - within 1% of the compression delivered by the single-threaded . On the other hand, using a - BufferSize of 8k can result in a compressed data stream that is 5% - larger than that delivered by the single-threaded - DeflateStream. Excessively small buffer sizes can also cause - the speed of the ParallelDeflateOutputStream to drop, because of - larger thread scheduling overhead dealing with many many small - buffers. - - - - The total amount of storage space allocated for buffering will be - (N*S*2), where N is the number of buffer pairs, and S is the size of - each buffer (this property). There are 2 buffers used by the - compressor, one for input and one for output. By default, DotNetZip - allocates 4 buffer pairs per CPU core, so if your machine has 4 - cores, then the number of buffer pairs used will be 16. If you - accept the default value of this property, 128k, then the - ParallelDeflateOutputStream will use 16 * 2 * 128kb of buffer memory - in total, or 4mb, in blocks of 128kb. If you set this property to - 64kb, then the number will be 16 * 2 * 64kb of buffer memory, or - 2mb. - - - - - - - The CRC32 for the data that was written out, prior to compression. - - - This value is meaningful only after a call to Close(). - - - - - The total number of uncompressed bytes processed by the ParallelDeflateOutputStream. - - - This value is meaningful only after a call to Close(). - - - - - Write data to the stream. - - - - - - To use the ParallelDeflateOutputStream to compress data, create a - ParallelDeflateOutputStream with CompressionMode.Compress, passing a - writable output stream. Then call Write() on that - ParallelDeflateOutputStream, providing uncompressed data as input. The - data sent to the output stream will be the compressed form of the data - written. - - - - To decompress data, use the class. - - - - The buffer holding data to write to the stream. - the offset within that data array to find the first byte to write. - the number of bytes to write. - - - - Flush the stream. - - - - - Close the stream. - - - You must call Close on the stream to guarantee that all of the data written in has - been compressed, and the compressed data has been written out. - - - - Dispose the object - - - Because ParallelDeflateOutputStream is IDisposable, the - application must call this method when finished using the instance. - - - This method is generally called implicitly upon exit from - a using scope in C# (Using in VB). - - - - - The Dispose method - - indicates whether the Dispose method was invoked by user code. - - - - - Resets the stream for use with another stream. - - - Because the ParallelDeflateOutputStream is expensive to create, it - has been designed so that it can be recycled and re-used. You have - to call Close() on the stream first, then you can call Reset() on - it, to use it again on another stream. - - - - The new output stream for this era. - - - - - ParallelDeflateOutputStream deflater = null; - foreach (var inputFile in listOfFiles) - { - string outputFile = inputFile + ".compressed"; - using (System.IO.Stream input = System.IO.File.OpenRead(inputFile)) - { - using (var outStream = System.IO.File.Create(outputFile)) - { - if (deflater == null) - deflater = new ParallelDeflateOutputStream(outStream, - CompressionLevel.Best, - CompressionStrategy.Default, - true); - deflater.Reset(outStream); - - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - deflater.Write(buffer, 0, n); - } - } - } - } - - - - - - Indicates whether the stream supports Seek operations. - - - Always returns false. - - - - - Indicates whether the stream supports Read operations. - - - Always returns false. - - - - - Indicates whether the stream supports Write operations. - - - Returns true if the provided stream is writable. - - - - - Reading this property always throws a NotSupportedException. - - - - - Returns the current position of the output stream. - - - - Because the output gets written by a background thread, - the value may change asynchronously. Setting this - property always throws a NotSupportedException. - - - - - - This method always throws a NotSupportedException. - - - The buffer into which data would be read, IF THIS METHOD - ACTUALLY DID ANYTHING. - - - The offset within that data array at which to insert the - data that is read, IF THIS METHOD ACTUALLY DID - ANYTHING. - - - The number of bytes to write, IF THIS METHOD ACTUALLY DID - ANYTHING. - - nothing. - - - - This method always throws a NotSupportedException. - - - The offset to seek to.... - IF THIS METHOD ACTUALLY DID ANYTHING. - - - The reference specifying how to apply the offset.... IF - THIS METHOD ACTUALLY DID ANYTHING. - - nothing. It always throws. - - - - This method always throws a NotSupportedException. - - - The new value for the stream length.... IF - THIS METHOD ACTUALLY DID ANYTHING. - - - - - Map from a distance to a distance code. - - - No side effects. _dist_code[256] and _dist_code[257] are never used. - - - - - Describes how to flush the current deflate operation. - - - The different FlushType values are useful when using a Deflate in a streaming application. - - - - No flush at all. - - - Closes the current block, but doesn't flush it to - the output. Used internally only in hypothetical - scenarios. This was supposed to be removed by Zlib, but it is - still in use in some edge cases. - - - - - Use this during compression to specify that all pending output should be - flushed to the output buffer and the output should be aligned on a byte - boundary. You might use this in a streaming communication scenario, so that - the decompressor can get all input data available so far. When using this - with a ZlibCodec, AvailableBytesIn will be zero after the call if - enough output space has been provided before the call. Flushing will - degrade compression and so it should be used only when necessary. - - - - - Use this during compression to specify that all output should be flushed, as - with FlushType.Sync, but also, the compression state should be reset - so that decompression can restart from this point if previous compressed - data has been damaged or if random access is desired. Using - FlushType.Full too often can significantly degrade the compression. - - - - Signals the end of the compression/decompression stream. - - - - The compression level to be used when using a DeflateStream or ZlibStream with CompressionMode.Compress. - - - - - None means that the data will be simply stored, with no change at all. - If you are producing ZIPs for use on Mac OSX, be aware that archives produced with CompressionLevel.None - cannot be opened with the default zip reader. Use a different CompressionLevel. - - - - - Same as None. - - - - - The fastest but least effective compression. - - - - - A synonym for BestSpeed. - - - - - A little slower, but better, than level 1. - - - - - A little slower, but better, than level 2. - - - - - A little slower, but better, than level 3. - - - - - A little slower than level 4, but with better compression. - - - - - The default compression level, with a good balance of speed and compression efficiency. - - - - - A synonym for Default. - - - - - Pretty good compression! - - - - - Better compression than Level7! - - - - - The "best" compression, where best means greatest reduction in size of the input data stream. - This is also the slowest compression. - - - - - A synonym for BestCompression. - - - - - Describes options for how the compression algorithm is executed. Different strategies - work better on different sorts of data. The strategy parameter can affect the compression - ratio and the speed of compression but not the correctness of the compresssion. - - - - - The default strategy is probably the best for normal data. - - - - - The Filtered strategy is intended to be used most effectively with data produced by a - filter or predictor. By this definition, filtered data consists mostly of small - values with a somewhat random distribution. In this case, the compression algorithm - is tuned to compress them better. The effect of Filtered is to force more Huffman - coding and less string matching; it is a half-step between Default and HuffmanOnly. - - - - - Using HuffmanOnly will force the compressor to do Huffman encoding only, with no - string matching. - - - - - An enum to specify the direction of transcoding - whether to compress or decompress. - - - - - Used to specify that the stream should compress the data. - - - - - Used to specify that the stream should decompress the data. - - - - - A general purpose exception class for exceptions in the Zlib library. - - - - - The ZlibException class captures exception information generated - by the Zlib library. - - - - - This ctor collects a message attached to the exception. - - the message for the exception. - - - - Performs an unsigned bitwise right shift with the specified number - - Number to operate on - Ammount of bits to shift - The resulting number from the shift operation - - - - Reads a number of characters from the current source TextReader and writes - the data to the target array at the specified index. - - - The source TextReader to read from - Contains the array of characteres read from the source TextReader. - The starting index of the target array. - The maximum number of characters to read from the source TextReader. - - - The number of characters read. The number will be less than or equal to - count depending on the data available in the source TextReader. Returns -1 - if the end of the stream is reached. - - - - - Computes an Adler-32 checksum. - - - The Adler checksum is similar to a CRC checksum, but faster to compute, though less - reliable. It is used in producing RFC1950 compressed streams. The Adler checksum - is a required part of the "ZLIB" standard. Applications will almost never need to - use this class directly. - - - - - - - Calculates the Adler32 checksum. - - - - This is used within ZLIB. You probably don't need to use this directly. - - - - To compute an Adler32 checksum on a byte array: - - var adler = Adler.Adler32(0, null, 0, 0); - adler = Adler.Adler32(adler, buffer, index, length); - - - - - - Encoder and Decoder for ZLIB and DEFLATE (IETF RFC1950 and RFC1951). - - - - This class compresses and decompresses data according to the Deflate algorithm - and optionally, the ZLIB format, as documented in RFC 1950 - ZLIB and RFC 1951 - DEFLATE. - - - - - The buffer from which data is taken. - - - - - An index into the InputBuffer array, indicating where to start reading. - - - - - The number of bytes available in the InputBuffer, starting at NextIn. - - - Generally you should set this to InputBuffer.Length before the first Inflate() or Deflate() call. - The class will update this number as calls to Inflate/Deflate are made. - - - - - Total number of bytes read so far, through all calls to Inflate()/Deflate(). - - - - - Buffer to store output data. - - - - - An index into the OutputBuffer array, indicating where to start writing. - - - - - The number of bytes available in the OutputBuffer, starting at NextOut. - - - Generally you should set this to OutputBuffer.Length before the first Inflate() or Deflate() call. - The class will update this number as calls to Inflate/Deflate are made. - - - - - Total number of bytes written to the output so far, through all calls to Inflate()/Deflate(). - - - - - used for diagnostics, when something goes wrong! - - - - - The compression level to use in this codec. Useful only in compression mode. - - - - - The number of Window Bits to use. - - - This gauges the size of the sliding window, and hence the - compression effectiveness as well as memory consumption. It's best to just leave this - setting alone if you don't know what it is. The maximum value is 15 bits, which implies - a 32k window. - - - - - The compression strategy to use. - - - This is only effective in compression. The theory offered by ZLIB is that different - strategies could potentially produce significant differences in compression behavior - for different data sets. Unfortunately I don't have any good recommendations for how - to set it differently. When I tested changing the strategy I got minimally different - compression performance. It's best to leave this property alone if you don't have a - good feel for it. Or, you may want to produce a test harness that runs through the - different strategy options and evaluates them on different file types. If you do that, - let me know your results. - - - - - The Adler32 checksum on the data transferred through the codec so far. You probably don't need to look at this. - - - - - Create a ZlibCodec. - - - If you use this default constructor, you will later have to explicitly call - InitializeInflate() or InitializeDeflate() before using the ZlibCodec to compress - or decompress. - - - - - Create a ZlibCodec that either compresses or decompresses. - - - Indicates whether the codec should compress (deflate) or decompress (inflate). - - - - - Initialize the inflation state. - - - It is not necessary to call this before using the ZlibCodec to inflate data; - It is implicitly called when you call the constructor. - - Z_OK if everything goes well. - - - - Initialize the inflation state with an explicit flag to - govern the handling of RFC1950 header bytes. - - - - By default, the ZLIB header defined in RFC 1950 is expected. If - you want to read a zlib stream you should specify true for - expectRfc1950Header. If you have a deflate stream, you will want to specify - false. It is only necessary to invoke this initializer explicitly if you - want to specify false. - - - whether to expect an RFC1950 header byte - pair when reading the stream of data to be inflated. - - Z_OK if everything goes well. - - - - Initialize the ZlibCodec for inflation, with the specified number of window bits. - - The number of window bits to use. If you need to ask what that is, - then you shouldn't be calling this initializer. - Z_OK if all goes well. - - - - Initialize the inflation state with an explicit flag to govern the handling of - RFC1950 header bytes. - - - - If you want to read a zlib stream you should specify true for - expectRfc1950Header. In this case, the library will expect to find a ZLIB - header, as defined in RFC - 1950, in the compressed stream. If you will be reading a DEFLATE or - GZIP stream, which does not have such a header, you will want to specify - false. - - - whether to expect an RFC1950 header byte pair when reading - the stream of data to be inflated. - The number of window bits to use. If you need to ask what that is, - then you shouldn't be calling this initializer. - Z_OK if everything goes well. - - - - Inflate the data in the InputBuffer, placing the result in the OutputBuffer. - - - You must have set InputBuffer and OutputBuffer, NextIn and NextOut, and AvailableBytesIn and - AvailableBytesOut before calling this method. - - - - private void InflateBuffer() - { - int bufferSize = 1024; - byte[] buffer = new byte[bufferSize]; - ZlibCodec decompressor = new ZlibCodec(); - - Console.WriteLine("\n============================================"); - Console.WriteLine("Size of Buffer to Inflate: {0} bytes.", CompressedBytes.Length); - MemoryStream ms = new MemoryStream(DecompressedBytes); - - int rc = decompressor.InitializeInflate(); - - decompressor.InputBuffer = CompressedBytes; - decompressor.NextIn = 0; - decompressor.AvailableBytesIn = CompressedBytes.Length; - - decompressor.OutputBuffer = buffer; - - // pass 1: inflate - do - { - decompressor.NextOut = 0; - decompressor.AvailableBytesOut = buffer.Length; - rc = decompressor.Inflate(FlushType.None); - - if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) - throw new Exception("inflating: " + decompressor.Message); - - ms.Write(decompressor.OutputBuffer, 0, buffer.Length - decompressor.AvailableBytesOut); - } - while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); - - // pass 2: finish and flush - do - { - decompressor.NextOut = 0; - decompressor.AvailableBytesOut = buffer.Length; - rc = decompressor.Inflate(FlushType.Finish); - - if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) - throw new Exception("inflating: " + decompressor.Message); - - if (buffer.Length - decompressor.AvailableBytesOut > 0) - ms.Write(buffer, 0, buffer.Length - decompressor.AvailableBytesOut); - } - while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); - - decompressor.EndInflate(); - } - - - - The flush to use when inflating. - Z_OK if everything goes well. - - - - Ends an inflation session. - - - Call this after successively calling Inflate(). This will cause all buffers to be flushed. - After calling this you cannot call Inflate() without a intervening call to one of the - InitializeInflate() overloads. - - Z_OK if everything goes well. - - - - I don't know what this does! - - Z_OK if everything goes well. - - - - Initialize the ZlibCodec for deflation operation. - - - The codec will use the MAX window bits and the default level of compression. - - - - int bufferSize = 40000; - byte[] CompressedBytes = new byte[bufferSize]; - byte[] DecompressedBytes = new byte[bufferSize]; - - ZlibCodec compressor = new ZlibCodec(); - - compressor.InitializeDeflate(CompressionLevel.Default); - - compressor.InputBuffer = System.Text.ASCIIEncoding.ASCII.GetBytes(TextToCompress); - compressor.NextIn = 0; - compressor.AvailableBytesIn = compressor.InputBuffer.Length; - - compressor.OutputBuffer = CompressedBytes; - compressor.NextOut = 0; - compressor.AvailableBytesOut = CompressedBytes.Length; - - while (compressor.TotalBytesIn != TextToCompress.Length && compressor.TotalBytesOut < bufferSize) - { - compressor.Deflate(FlushType.None); - } - - while (true) - { - int rc= compressor.Deflate(FlushType.Finish); - if (rc == ZlibConstants.Z_STREAM_END) break; - } - - compressor.EndDeflate(); - - - - Z_OK if all goes well. You generally don't need to check the return code. - - - - Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel. - - - The codec will use the maximum window bits (15) and the specified - CompressionLevel. It will emit a ZLIB stream as it compresses. - - The compression level for the codec. - Z_OK if all goes well. - - - - Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, - and the explicit flag governing whether to emit an RFC1950 header byte pair. - - - The codec will use the maximum window bits (15) and the specified CompressionLevel. - If you want to generate a zlib stream, you should specify true for - wantRfc1950Header. In this case, the library will emit a ZLIB - header, as defined in RFC - 1950, in the compressed stream. - - The compression level for the codec. - whether to emit an initial RFC1950 byte pair in the compressed stream. - Z_OK if all goes well. - - - - Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, - and the specified number of window bits. - - - The codec will use the specified number of window bits and the specified CompressionLevel. - - The compression level for the codec. - the number of window bits to use. If you don't know what this means, don't use this method. - Z_OK if all goes well. - - - - Initialize the ZlibCodec for deflation operation, using the specified - CompressionLevel, the specified number of window bits, and the explicit flag - governing whether to emit an RFC1950 header byte pair. - - - The compression level for the codec. - whether to emit an initial RFC1950 byte pair in the compressed stream. - the number of window bits to use. If you don't know what this means, don't use this method. - Z_OK if all goes well. - - - - Deflate one batch of data. - - - You must have set InputBuffer and OutputBuffer before calling this method. - - - - private void DeflateBuffer(CompressionLevel level) - { - int bufferSize = 1024; - byte[] buffer = new byte[bufferSize]; - ZlibCodec compressor = new ZlibCodec(); - - Console.WriteLine("\n============================================"); - Console.WriteLine("Size of Buffer to Deflate: {0} bytes.", UncompressedBytes.Length); - MemoryStream ms = new MemoryStream(); - - int rc = compressor.InitializeDeflate(level); - - compressor.InputBuffer = UncompressedBytes; - compressor.NextIn = 0; - compressor.AvailableBytesIn = UncompressedBytes.Length; - - compressor.OutputBuffer = buffer; - - // pass 1: deflate - do - { - compressor.NextOut = 0; - compressor.AvailableBytesOut = buffer.Length; - rc = compressor.Deflate(FlushType.None); - - if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) - throw new Exception("deflating: " + compressor.Message); - - ms.Write(compressor.OutputBuffer, 0, buffer.Length - compressor.AvailableBytesOut); - } - while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); - - // pass 2: finish and flush - do - { - compressor.NextOut = 0; - compressor.AvailableBytesOut = buffer.Length; - rc = compressor.Deflate(FlushType.Finish); - - if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) - throw new Exception("deflating: " + compressor.Message); - - if (buffer.Length - compressor.AvailableBytesOut > 0) - ms.Write(buffer, 0, buffer.Length - compressor.AvailableBytesOut); - } - while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); - - compressor.EndDeflate(); - - ms.Seek(0, SeekOrigin.Begin); - CompressedBytes = new byte[compressor.TotalBytesOut]; - ms.Read(CompressedBytes, 0, CompressedBytes.Length); - } - - - whether to flush all data as you deflate. Generally you will want to - use Z_NO_FLUSH here, in a series of calls to Deflate(), and then call EndDeflate() to - flush everything. - - Z_OK if all goes well. - - - - End a deflation session. - - - Call this after making a series of one or more calls to Deflate(). All buffers are flushed. - - Z_OK if all goes well. - - - - Reset a codec for another deflation session. - - - Call this to reset the deflation state. For example if a thread is deflating - non-consecutive blocks, you can call Reset() after the Deflate(Sync) of the first - block and before the next Deflate(None) of the second block. - - Z_OK if all goes well. - - - - Set the CompressionStrategy and CompressionLevel for a deflation session. - - the level of compression to use. - the strategy to use for compression. - Z_OK if all goes well. - - - - Set the dictionary to be used for either Inflation or Deflation. - - The dictionary bytes to use. - Z_OK if all goes well. - - - - Set the dictionary to be used for either Inflation or Deflation unconditionally. - - Decoding a MSZip file requires the dictionary state to be set unconditionally - at the end of each block to the previous decoded data - The dictionary bytes to use. - Z_OK if all goes well. - - - - A bunch of constants used in the Zlib interface. - - - - - The maximum number of window bits for the Deflate algorithm. - - - - - The default number of window bits for the Deflate algorithm. - - - - - indicates everything is A-OK - - - - - Indicates that the last operation reached the end of the stream. - - - - - The operation ended in need of a dictionary. - - - - - There was an error with the stream - not enough data, not open and readable, etc. - - - - - There was an error with the data - not enough data, bad data, etc. - - - - - There was an error with the working buffer. - - - - - The size of the working buffer used in the ZlibCodec class. - - - - - The minimum size of the working buffer used in the ZlibCodec class. - - - - - Represents a Zlib stream for compression or decompression. - - - - - The ZlibStream is a Decorator on a . It adds ZLIB compression or decompression to any - stream. - - - Using this stream, applications can compress or decompress data via - stream Read() and Write() operations. Either compresssion or - decompression can occur through either reading or writing. The compression - format used is ZLIB, which is documented in IETF RFC 1950, "ZLIB Compressed - Data Format Specification version 3.3". This implementation of ZLIB always uses - DEFLATE as the compression method. (see IETF RFC 1951, "DEFLATE - Compressed Data Format Specification version 1.3.") - - - The ZLIB format allows for varying compression methods, window sizes, and dictionaries. - This implementation always uses the DEFLATE compression method, a preset dictionary, - and 15 window bits by default. - - - - This class is similar to , except that it adds the - RFC1950 header and trailer bytes to a compressed stream when compressing, or expects - the RFC1950 header and trailer bytes when decompressing. It is also similar to the - . - - - - - - - - Create a ZlibStream using the specified CompressionMode. - - - - - When mode is CompressionMode.Compress, the ZlibStream - will use the default compression level. The "captive" stream will be - closed when the ZlibStream is closed. - - - - - - This example uses a ZlibStream to compress a file, and writes the - compressed data to another file. - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(fileToCompress + ".zlib")) - { - using (Stream compressor = new ZlibStream(raw, CompressionMode.Compress)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(fileToCompress & ".zlib") - Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - - The stream which will be read or written. - Indicates whether the ZlibStream will compress or decompress. - - - - Create a ZlibStream using the specified CompressionMode and - the specified CompressionLevel. - - - - - - When mode is CompressionMode.Decompress, the level parameter is ignored. - The "captive" stream will be closed when the ZlibStream is closed. - - - - - - This example uses a ZlibStream to compress data from a file, and writes the - compressed data to another file. - - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(fileToCompress + ".zlib")) - { - using (Stream compressor = new ZlibStream(raw, - CompressionMode.Compress, - CompressionLevel.BestCompression)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(fileToCompress & ".zlib") - Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - - The stream to be read or written while deflating or inflating. - Indicates whether the ZlibStream will compress or decompress. - A tuning knob to trade speed for effectiveness. - - - - Create a ZlibStream using the specified CompressionMode, and - explicitly specify whether the captive stream should be left open after - Deflation or Inflation. - - - - - - When mode is CompressionMode.Compress, the ZlibStream will use - the default compression level. - - - - This constructor allows the application to request that the captive stream - remain open after the deflation or inflation occurs. By default, after - Close() is called on the stream, the captive stream is also - closed. In some cases this is not desired, for example if the stream is a - that will be re-read after - compression. Specify true for the parameter to leave the stream - open. - - - - See the other overloads of this constructor for example code. - - - - - The stream which will be read or written. This is called the - "captive" stream in other places in this documentation. - Indicates whether the ZlibStream will compress or decompress. - true if the application would like the stream to remain - open after inflation/deflation. - - - - Create a ZlibStream using the specified CompressionMode - and the specified CompressionLevel, and explicitly specify - whether the stream should be left open after Deflation or Inflation. - - - - - - This constructor allows the application to request that the captive - stream remain open after the deflation or inflation occurs. By - default, after Close() is called on the stream, the captive - stream is also closed. In some cases this is not desired, for example - if the stream is a that will be - re-read after compression. Specify true for the parameter to leave the stream open. - - - - When mode is CompressionMode.Decompress, the level parameter is - ignored. - - - - - - - This example shows how to use a ZlibStream to compress the data from a file, - and store the result into another file. The filestream remains open to allow - additional data to be written to it. - - - using (var output = System.IO.File.Create(fileToCompress + ".zlib")) - { - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (Stream compressor = new ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - // can write additional data to the output stream here - } - - - Using output As FileStream = File.Create(fileToCompress & ".zlib") - Using input As Stream = File.OpenRead(fileToCompress) - Using compressor As Stream = New ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - ' can write additional data to the output stream here. - End Using - - - - The stream which will be read or written. - - Indicates whether the ZlibStream will compress or decompress. - - - true if the application would like the stream to remain open after - inflation/deflation. - - - - A tuning knob to trade speed for effectiveness. This parameter is - effective only when mode is CompressionMode.Compress. - - - - - This property sets the flush behavior on the stream. - Sorry, though, not sure exactly how to describe all the various settings. - - - - - The size of the working buffer for the compression codec. - - - - - The working buffer is used for all stream operations. The default size is - 1024 bytes. The minimum size is 128 bytes. You may get better performance - with a larger buffer. Then again, you might not. You would have to test - it. - - - - Set this before the first call to Read() or Write() on the - stream. If you try to set it afterwards, it will throw. - - - - - Returns the total number of bytes input so far. - - - Returns the total number of bytes output so far. - - - - Dispose the stream. - - - - This may or may not result in a Close() call on the captive - stream. See the constructors that have a leaveOpen parameter - for more information. - - - This method may be invoked in two distinct scenarios. If disposing - == true, the method has been called directly or indirectly by a - user's code, for example via the public Dispose() method. In this - case, both managed and unmanaged resources can be referenced and - disposed. If disposing == false, the method has been called by the - runtime from inside the object finalizer and this method should not - reference other objects; in that case only unmanaged resources must - be referenced or disposed. - - - - indicates whether the Dispose method was invoked by user code. - - - - - Indicates whether the stream can be read. - - - The return value depends on whether the captive stream supports reading. - - - - - Indicates whether the stream supports Seek operations. - - - Always returns false. - - - - - Indicates whether the stream can be written. - - - The return value depends on whether the captive stream supports writing. - - - - - Flush the stream. - - - - - Reading this property always throws a . - - - - - The position of the stream pointer. - - - - Setting this property always throws a . Reading will return the total bytes - written out, if used in writing, or the total bytes read in, if used in - reading. The count may refer to compressed bytes or uncompressed bytes, - depending on how you've used the stream. - - - - - Read data from the stream. - - - - - - If you wish to use the ZlibStream to compress data while reading, - you can create a ZlibStream with CompressionMode.Compress, - providing an uncompressed data stream. Then call Read() on that - ZlibStream, and the data read will be compressed. If you wish to - use the ZlibStream to decompress data while reading, you can create - a ZlibStream with CompressionMode.Decompress, providing a - readable compressed data stream. Then call Read() on that - ZlibStream, and the data will be decompressed as it is read. - - - - A ZlibStream can be used for Read() or Write(), but - not both. - - - - - - The buffer into which the read data should be placed. - - - the offset within that data array to put the first byte read. - - the number of bytes to read. - - the number of bytes read - - - - Calling this method always throws a . - - - The offset to seek to.... - IF THIS METHOD ACTUALLY DID ANYTHING. - - - The reference specifying how to apply the offset.... IF - THIS METHOD ACTUALLY DID ANYTHING. - - - nothing. This method always throws. - - - - Calling this method always throws a . - - - The new value for the stream length.... IF - THIS METHOD ACTUALLY DID ANYTHING. - - - - - Write data to the stream. - - - - - - If you wish to use the ZlibStream to compress data while writing, - you can create a ZlibStream with CompressionMode.Compress, - and a writable output stream. Then call Write() on that - ZlibStream, providing uncompressed data as input. The data sent to - the output stream will be the compressed form of the data written. If you - wish to use the ZlibStream to decompress data while writing, you - can create a ZlibStream with CompressionMode.Decompress, and a - writable output stream. Then call Write() on that stream, - providing previously compressed data. The data sent to the output stream - will be the decompressed form of the data written. - - - - A ZlibStream can be used for Read() or Write(), but not both. - - - The buffer holding data to write to the stream. - the offset within that data array to find the first byte to write. - the number of bytes to write. - - - - Compress a string into a byte array using ZLIB. - - - - Uncompress it with . - - - - - - - - A string to compress. The string will first be encoded - using UTF8, then compressed. - - - The string in compressed form - - - - Compress a byte array into a new byte array using ZLIB. - - - - Uncompress it with . - - - - - - - A buffer to compress. - - - The data in compressed form - - - - Uncompress a ZLIB-compressed byte array into a single string. - - - - - - - A buffer containing ZLIB-compressed data. - - - The uncompressed string - - - - Uncompress a ZLIB-compressed byte array into a byte array. - - - - - - - A buffer containing ZLIB-compressed data. - - - The data in uncompressed form - - - diff --git a/packages/DotNetZip.1.13.4/lib/netstandard2.0/DotNetZip.dll b/packages/DotNetZip.1.13.4/lib/netstandard2.0/DotNetZip.dll deleted file mode 100644 index 2c6088ac0858f4035ea05b5c4f9060db65b22a30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239616 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 diff --git a/packages/DotNetZip.1.13.4/lib/netstandard2.0/DotNetZip.xml b/packages/DotNetZip.1.13.4/lib/netstandard2.0/DotNetZip.xml deleted file mode 100644 index 917e82b..0000000 --- a/packages/DotNetZip.1.13.4/lib/netstandard2.0/DotNetZip.xml +++ /dev/null @@ -1,18031 +0,0 @@ - - - - DotNetZip - - - - - Delivers the remaining bits, left-aligned, in a byte. - - - - This is valid only if NumRemainingBits is less than 8; - in other words it is valid only after a call to Flush(). - - - - - - Reset the BitWriter. - - - - This is useful when the BitWriter writes into a MemoryStream, and - is used by a BZip2Compressor, which itself is re-used for multiple - distinct data blocks. - - - - - - Write some number of bits from the given value, into the output. - - - - The nbits value should be a max of 25, for safety. For performance - reasons, this method does not check! - - - - - - Write a full 8-bit byte into the output. - - - - - Write four 8-bit bytes into the output. - - - - - Write all available byte-aligned bytes. - - - - This method writes no new output, but flushes any accumulated - bits. At completion, the accumulator may contain up to 7 - bits. - - - This is necessary when re-assembling output from N independent - compressors, one for each of N blocks. The output of any - particular compressor will in general have some fragment of a byte - remaining. This fragment needs to be accumulated into the - parent BZip2OutputStream. - - - - - - Writes all available bytes, and emits padding for the final byte as - necessary. This must be the last method invoked on an instance of - BitWriter. - - - - Knuth's increments seem to work better than Incerpi-Sedgewick here. - Possibly because the number of elems to sort is usually small, typically - <= 20. - - - - BZip2Compressor writes its compressed data out via a BitWriter. This - is necessary because BZip2 does byte shredding. - - - - - The number of uncompressed bytes being held in the buffer. - - - - I am thinking this may be useful in a Stream that uses this - compressor class. In the Close() method on the stream it could - check this value to see if anything has been written at all. You - may think the stream could easily track the number of bytes it - wrote, which would eliminate the need for this. But, there is the - case where the stream writes a complete block, and it is full, and - then writes no more. In that case the stream may want to check. - - - - - - Accept new bytes into the compressor data buffer - - - - This method does the first-level (cheap) run-length encoding, and - stores the encoded data into the rle block. - - - - - - Process one input byte into the block. - - - - - To "process" the byte means to do the run-length encoding. - There are 3 possible return values: - - 0 - the byte was not written, in other words, not - encoded into the block. This happens when the - byte b would require the start of a new run, and - the block has no more room for new runs. - - 1 - the byte was written, and the block is not full. - - 2 - the byte was written, and the block is full. - - - - 0 if the byte was not written, non-zero if written. - - - - Append one run to the output block. - - - - - This compressor does run-length-encoding before BWT and etc. This - method simply appends a run to the output block. The append always - succeeds. The return value indicates whether the block is full: - false (not full) implies that at least one additional run could be - processed. - - - true if the block is now full; otherwise false. - - - - Compress the data that has been placed (Run-length-encoded) into the - block. The compressed data goes into the CompressedBytes array. - - - - Side effects: 1. fills the CompressedBytes array. 2. sets the - AvailableBytesOut property. - - - - - This is the most hammered method of this class. - -

- This is the version using unrolled loops. -

-
- - Method "mainQSort3", file "blocksort.c", BZip2 1.0.2 - - - Array instance identical to sfmap, both are used only - temporarily and independently, so we do not need to allocate - additional memory. - - - - A read-only decorator stream that performs BZip2 decompression on Read. - - - - - Compressor State - - - - - Create a BZip2InputStream, wrapping it around the given input Stream. - - - - The input stream will be closed when the BZip2InputStream is closed. - - - The stream from which to read compressed data - - - - Create a BZip2InputStream with the given stream, and - specifying whether to leave the wrapped stream open when - the BZip2InputStream is closed. - - The stream from which to read compressed data - - Whether to leave the input stream open, when the BZip2InputStream closes. - - - - - This example reads a bzip2-compressed file, decompresses it, - and writes the decompressed data into a newly created file. - - - var fname = "logfile.log.bz2"; - using (var fs = File.OpenRead(fname)) - { - using (var decompressor = new Ionic.BZip2.BZip2InputStream(fs)) - { - var outFname = fname + ".decompressed"; - using (var output = File.Create(outFname)) - { - byte[] buffer = new byte[2048]; - int n; - while ((n = decompressor.Read(buffer, 0, buffer.Length)) > 0) - { - output.Write(buffer, 0, n); - } - } - } - } - - - - - - Read data from the stream. - - - - - To decompress a BZip2 data stream, create a BZip2InputStream, - providing a stream that reads compressed data. Then call Read() on - that BZip2InputStream, and the data read will be decompressed - as you read. - - - - A BZip2InputStream can be used only for Read(), not for Write(). - - - - The buffer into which the read data should be placed. - the offset within that data array to put the first byte read. - the number of bytes to read. - the number of bytes actually read - - - - Read a single byte from the stream. - - the byte read from the stream, or -1 if EOF - - - - Indicates whether the stream can be read. - - - The return value depends on whether the captive stream supports reading. - - - - - Indicates whether the stream supports Seek operations. - - - Always returns false. - - - - - Indicates whether the stream can be written. - - - The return value depends on whether the captive stream supports writing. - - - - - Flush the stream. - - - - - Reading this property always throws a . - - - - - The position of the stream pointer. - - - - Setting this property always throws a . Reading will return the - total number of uncompressed bytes read in. - - - - - Calling this method always throws a . - - this is irrelevant, since it will always throw! - this is irrelevant, since it will always throw! - irrelevant! - - - - Calling this method always throws a . - - this is irrelevant, since it will always throw! - - - - Calling this method always throws a . - - this parameter is never used - this parameter is never used - this parameter is never used - - - - Dispose the stream. - - - indicates whether the Dispose method was invoked by user code. - - - - - Close the stream. - - - - - Read n bits from input, right justifying the result. - - - - For example, if you read 1 bit, the result is either 0 - or 1. - - - - The number of bits to read, always between 1 and 32. - - - - Called by createHuffmanDecodingTables() exclusively. - - - Called by recvDecodingTables() exclusively. - - - Freq table collected to save a pass over the data during - decompression. - - - Initializes the tt array. - - This method is called when the required length of the array is known. - I don't initialize it at construction time to avoid unneccessary - memory allocation when compressing small files. - - - - A write-only decorator stream that compresses data as it is - written using the BZip2 algorithm. - - - - - Constructs a new BZip2OutputStream, that sends its - compressed output to the given output stream. - - - - The destination stream, to which compressed output will be sent. - - - - - This example reads a file, then compresses it with bzip2 file, - and writes the compressed data into a newly created file. - - - var fname = "logfile.log"; - using (var fs = File.OpenRead(fname)) - { - var outFname = fname + ".bz2"; - using (var output = File.Create(outFname)) - { - using (var compressor = new Ionic.BZip2.BZip2OutputStream(output)) - { - byte[] buffer = new byte[2048]; - int n; - while ((n = fs.Read(buffer, 0, buffer.Length)) > 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - - - - Constructs a new BZip2OutputStream with specified blocksize. - - the destination stream. - - The blockSize in units of 100000 bytes. - The valid range is 1..9. - - - - - Constructs a new BZip2OutputStream. - - the destination stream. - - whether to leave the captive stream open upon closing this stream. - - - - - Constructs a new BZip2OutputStream with specified blocksize, - and explicitly specifies whether to leave the wrapped stream open. - - - the destination stream. - - The blockSize in units of 100000 bytes. - The valid range is 1..9. - - - whether to leave the captive stream open upon closing this stream. - - - - - Close the stream. - - - - This may or may not close the underlying stream. Check the - constructors that accept a bool value. - - - - - - Flush the stream. - - - - - The blocksize parameter specified at construction time. - - - - - Write data to the stream. - - - - - Use the BZip2OutputStream to compress data while writing: - create a BZip2OutputStream with a writable output stream. - Then call Write() on that BZip2OutputStream, providing - uncompressed data as input. The data sent to the output stream will - be the compressed form of the input data. - - - - A BZip2OutputStream can be used only for Write() not for Read(). - - - - - The buffer holding data to write to the stream. - the offset within that data array to find the first byte to write. - the number of bytes to write. - - - - Indicates whether the stream can be read. - - - The return value is always false. - - - - - Indicates whether the stream supports Seek operations. - - - Always returns false. - - - - - Indicates whether the stream can be written. - - - The return value should always be true, unless and until the - object is disposed and closed. - - - - - Reading this property always throws a . - - - - - The position of the stream pointer. - - - - Setting this property always throws a . Reading will return the - total number of uncompressed bytes written through. - - - - - Calling this method always throws a . - - this is irrelevant, since it will always throw! - this is irrelevant, since it will always throw! - irrelevant! - - - - Calling this method always throws a . - - this is irrelevant, since it will always throw! - - - - Calling this method always throws a . - - this parameter is never used - this parameter is never used - this parameter is never used - never returns anything; always throws - - - - A write-only decorator stream that compresses data as it is - written using the BZip2 algorithm. This stream compresses by - block using multiple threads. - - - This class performs BZIP2 compression through writing. For - more information on the BZIP2 algorithm, see - . - - - - This class is similar to , - except that this implementation uses an approach that employs multiple - worker threads to perform the compression. On a multi-cpu or multi-core - computer, the performance of this class can be significantly higher than - the single-threaded BZip2OutputStream, particularly for larger streams. - How large? Anything over 10mb is a good candidate for parallel - compression. - - - - The tradeoff is that this class uses more memory and more CPU than the - vanilla BZip2OutputStream. Also, for small files, the - ParallelBZip2OutputStream can be much slower than the vanilla - BZip2OutputStream, because of the overhead associated to using the - thread pool. - - - - - - - Constructs a new ParallelBZip2OutputStream, that sends its - compressed output to the given output stream. - - - - The destination stream, to which compressed output will be sent. - - - - - This example reads a file, then compresses it with bzip2 file, - and writes the compressed data into a newly created file. - - - var fname = "logfile.log"; - using (var fs = File.OpenRead(fname)) - { - var outFname = fname + ".bz2"; - using (var output = File.Create(outFname)) - { - using (var compressor = new Ionic.BZip2.ParallelBZip2OutputStream(output)) - { - byte[] buffer = new byte[2048]; - int n; - while ((n = fs.Read(buffer, 0, buffer.Length)) > 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - - - - Constructs a new ParallelBZip2OutputStream with specified blocksize. - - the destination stream. - - The blockSize in units of 100000 bytes. - The valid range is 1..9. - - - - - Constructs a new ParallelBZip2OutputStream. - - the destination stream. - - whether to leave the captive stream open upon closing this stream. - - - - - Constructs a new ParallelBZip2OutputStream with specified blocksize, - and explicitly specifies whether to leave the wrapped stream open. - - - the destination stream. - - The blockSize in units of 100000 bytes. - The valid range is 1..9. - - - whether to leave the captive stream open upon closing this stream. - - - - - The maximum number of concurrent compression worker threads to use. - - - - - This property sets an upper limit on the number of concurrent worker - threads to employ for compression. The implementation of this stream - employs multiple threads from the .NET thread pool, via - ThreadPool.QueueUserWorkItem(), to compress the incoming data by - block. As each block of data is compressed, this stream re-orders the - compressed blocks and writes them to the output stream. - - - - A higher number of workers enables a higher degree of - parallelism, which tends to increase the speed of compression on - multi-cpu computers. On the other hand, a higher number of buffer - pairs also implies a larger memory consumption, more active worker - threads, and a higher cpu utilization for any compression. This - property enables the application to limit its memory consumption and - CPU utilization behavior depending on requirements. - - - - By default, DotNetZip allocates 4 workers per CPU core, subject to the - upper limit specified in this property. For example, suppose the - application sets this property to 16. Then, on a machine with 2 - cores, DotNetZip will use 8 workers; that number does not exceed the - upper limit specified by this property, so the actual number of - workers used will be 4 * 2 = 8. On a machine with 4 cores, DotNetZip - will use 16 workers; again, the limit does not apply. On a machine - with 8 cores, DotNetZip will use 16 workers, because of the limit. - - - - For each compression "worker thread" that occurs in parallel, there is - up to 2mb of memory allocated, for buffering and processing. The - actual number depends on the property. - - - - CPU utilization will also go up with additional workers, because a - larger number of buffer pairs allows a larger number of background - threads to compress in parallel. If you find that parallel - compression is consuming too much memory or CPU, you can adjust this - value downward. - - - - The default value is 16. Different values may deliver better or - worse results, depending on your priorities and the dynamic - performance characteristics of your storage and compute resources. - - - - The application can set this value at any time, but it is effective - only before the first call to Write(), which is when the buffers are - allocated. - - - - - - Close the stream. - - - - This may or may not close the underlying stream. Check the - constructors that accept a bool value. - - - - - - Flush the stream. - - - - - The blocksize parameter specified at construction time. - - - - - Write data to the stream. - - - - - Use the ParallelBZip2OutputStream to compress data while - writing: create a ParallelBZip2OutputStream with a writable - output stream. Then call Write() on that - ParallelBZip2OutputStream, providing uncompressed data as - input. The data sent to the output stream will be the compressed - form of the input data. - - - - A ParallelBZip2OutputStream can be used only for - Write() not for Read(). - - - - - The buffer holding data to write to the stream. - the offset within that data array to find the first byte to write. - the number of bytes to write. - - - - Indicates whether the stream can be read. - - - The return value is always false. - - - - - Indicates whether the stream supports Seek operations. - - - Always returns false. - - - - - Indicates whether the stream can be written. - - - The return value depends on whether the captive stream supports writing. - - - - - Reading this property always throws a . - - - - - The position of the stream pointer. - - - - Setting this property always throws a . Reading will return the - total number of uncompressed bytes written through. - - - - - The total number of bytes written out by the stream. - - - This value is meaningful only after a call to Close(). - - - - - Calling this method always throws a . - - this is irrelevant, since it will always throw! - this is irrelevant, since it will always throw! - irrelevant! - - - - Calling this method always throws a . - - this is irrelevant, since it will always throw! - - - - Calling this method always throws a . - - this parameter is never used - this parameter is never used - this parameter is never used - never returns anything; always throws - - - - Returns the "random" number at a specific index. - - the index - the random number - - - - Computes a CRC-32. The CRC-32 algorithm is parameterized - you - can set the polynomial and enable or disable bit - reversal. This can be used for GZIP, BZip2, or ZIP. - - - This type is used internally by DotNetZip; it is generally not used - directly by applications wishing to create, read, or manipulate zip - archive files. - - - - - Indicates the total number of bytes applied to the CRC. - - - - - Indicates the current CRC for all blocks slurped in. - - - - - Returns the CRC32 for the specified stream. - - The stream over which to calculate the CRC32 - the CRC32 calculation - - - - Returns the CRC32 for the specified stream, and writes the input into the - output stream. - - The stream over which to calculate the CRC32 - The stream into which to deflate the input - the CRC32 calculation - - - - Get the CRC32 for the given (word,byte) combo. This is a - computation defined by PKzip for PKZIP 2.0 (weak) encryption. - - The word to start with. - The byte to combine it with. - The CRC-ized result. - - - - Update the value for the running CRC32 using the given block of bytes. - This is useful when using the CRC32() class in a Stream. - - block of bytes to slurp - starting point in the block - how many bytes within the block to slurp - - - - Process one byte in the CRC. - - the byte to include into the CRC . - - - - Process a run of N identical bytes into the CRC. - - - - This method serves as an optimization for updating the CRC when a - run of identical bytes is found. Rather than passing in a buffer of - length n, containing all identical bytes b, this method accepts the - byte value and the length of the (virtual) buffer - the length of - the run. - - - the byte to include into the CRC. - the number of times that byte should be repeated. - - - - Combines the given CRC32 value with the current running total. - - - This is useful when using a divide-and-conquer approach to - calculating a CRC. Multiple threads can each calculate a - CRC32 on a segment of the data, and then combine the - individual CRC32 values at the end. - - the crc value to be combined with this one - the length of data the CRC value was calculated on - - - - Create an instance of the CRC32 class using the default settings: no - bit reversal, and a polynomial of 0xEDB88320. - - - - - Create an instance of the CRC32 class, specifying whether to reverse - data bits or not. - - - specify true if the instance should reverse data bits. - - - - In the CRC-32 used by BZip2, the bits are reversed. Therefore if you - want a CRC32 with compatibility with BZip2, you should pass true - here. In the CRC-32 used by GZIP and PKZIP, the bits are not - reversed; Therefore if you want a CRC32 with compatibility with - those, you should pass false. - - - - - - Create an instance of the CRC32 class, specifying the polynomial and - whether to reverse data bits or not. - - - The polynomial to use for the CRC, expressed in the reversed (LSB) - format: the highest ordered bit in the polynomial value is the - coefficient of the 0th power; the second-highest order bit is the - coefficient of the 1 power, and so on. Expressed this way, the - polynomial for the CRC-32C used in IEEE 802.3, is 0xEDB88320. - - - specify true if the instance should reverse data bits. - - - - - In the CRC-32 used by BZip2, the bits are reversed. Therefore if you - want a CRC32 with compatibility with BZip2, you should pass true - here for the reverseBits parameter. In the CRC-32 used by - GZIP and PKZIP, the bits are not reversed; Therefore if you want a - CRC32 with compatibility with those, you should pass false for the - reverseBits parameter. - - - - - - Reset the CRC-32 class - clear the CRC "remainder register." - - - - Use this when employing a single instance of this class to compute - multiple, distinct CRCs on multiple, distinct data blocks. - - - - - - A Stream that calculates a CRC32 (a checksum) on all bytes read, - or on all bytes written. - - - - - This class can be used to verify the CRC of a ZipEntry when - reading from a stream, or to calculate a CRC when writing to a - stream. The stream should be used to either read, or write, but - not both. If you intermix reads and writes, the results are not - defined. - - - - This class is intended primarily for use internally by the - DotNetZip library. - - - - - - The default constructor. - - - - Instances returned from this constructor will leave the underlying - stream open upon Close(). The stream uses the default CRC32 - algorithm, which implies a polynomial of 0xEDB88320. - - - The underlying stream - - - - The constructor allows the caller to specify how to handle the - underlying stream at close. - - - - The stream uses the default CRC32 algorithm, which implies a - polynomial of 0xEDB88320. - - - The underlying stream - true to leave the underlying stream - open upon close of the CrcCalculatorStream; false otherwise. - - - - A constructor allowing the specification of the length of the stream - to read. - - - - The stream uses the default CRC32 algorithm, which implies a - polynomial of 0xEDB88320. - - - Instances returned from this constructor will leave the underlying - stream open upon Close(). - - - The underlying stream - The length of the stream to slurp - - - - A constructor allowing the specification of the length of the stream - to read, as well as whether to keep the underlying stream open upon - Close(). - - - - The stream uses the default CRC32 algorithm, which implies a - polynomial of 0xEDB88320. - - - The underlying stream - The length of the stream to slurp - true to leave the underlying stream - open upon close of the CrcCalculatorStream; false otherwise. - - - - A constructor allowing the specification of the length of the stream - to read, as well as whether to keep the underlying stream open upon - Close(), and the CRC32 instance to use. - - - - The stream uses the specified CRC32 instance, which allows the - application to specify how the CRC gets calculated. - - - The underlying stream - The length of the stream to slurp - true to leave the underlying stream - open upon close of the CrcCalculatorStream; false otherwise. - the CRC32 instance to use to calculate the CRC32 - - - - Gets the total number of bytes run through the CRC32 calculator. - - - - This is either the total number of bytes read, or the total number of - bytes written, depending on the direction of this stream. - - - - - Provides the current CRC for all blocks slurped in. - - - - The running total of the CRC is kept as data is written or read - through the stream. read this property after all reads or writes to - get an accurate CRC for the entire stream. - - - - - - Indicates whether the underlying stream will be left open when the - CrcCalculatorStream is Closed. - - - - Set this at any point before calling . - - - - - - Read from the stream - - the buffer to read - the offset at which to start - the number of bytes to read - the number of bytes actually read - - - - Write to the stream. - - the buffer from which to write - the offset at which to start writing - the number of bytes to write - - - - Indicates whether the stream supports reading. - - - - - Indicates whether the stream supports seeking. - - - - Always returns false. - - - - - - Indicates whether the stream supports writing. - - - - - Flush the stream. - - - - - Returns the length of the underlying stream. - - - - - The getter for this property returns the total bytes read. - If you use the setter, it will throw - . - - - - - Seeking is not supported on this stream. This method always throws - - - N/A - N/A - N/A - - - - This method always throws - - - N/A - - - - Closes the stream. - - - - - A class for compressing and decompressing streams using the Deflate algorithm. - - - - - - The DeflateStream is a Decorator on a . It adds DEFLATE compression or decompression to any - stream. - - - - Using this stream, applications can compress or decompress data via stream - Read and Write operations. Either compresssion or decompression - can occur through either reading or writing. The compression format used is - DEFLATE, which is documented in IETF RFC 1951, "DEFLATE - Compressed Data Format Specification version 1.3.". - - - - This class is similar to , except that - ZlibStream adds the RFC - 1950 - ZLIB framing bytes to a compressed stream when compressing, or - expects the RFC1950 framing bytes when decompressing. The DeflateStream - does not. - - - - - - - - - - Create a DeflateStream using the specified CompressionMode. - - - - When mode is CompressionMode.Compress, the DeflateStream will use - the default compression level. The "captive" stream will be closed when - the DeflateStream is closed. - - - - This example uses a DeflateStream to compress data from a file, and writes - the compressed data to another file. - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(fileToCompress + ".deflated")) - { - using (Stream compressor = new DeflateStream(raw, CompressionMode.Compress)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(fileToCompress & ".deflated") - Using compressor As Stream = New DeflateStream(raw, CompressionMode.Compress) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - The stream which will be read or written. - Indicates whether the DeflateStream will compress or decompress. - - - - Create a DeflateStream using the specified CompressionMode and the specified CompressionLevel. - - - - - - When mode is CompressionMode.Decompress, the level parameter is - ignored. The "captive" stream will be closed when the DeflateStream is - closed. - - - - - - - This example uses a DeflateStream to compress data from a file, and writes - the compressed data to another file. - - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(fileToCompress + ".deflated")) - { - using (Stream compressor = new DeflateStream(raw, - CompressionMode.Compress, - CompressionLevel.BestCompression)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n= -1; - while (n != 0) - { - if (n > 0) - compressor.Write(buffer, 0, n); - n= input.Read(buffer, 0, buffer.Length); - } - } - } - } - - - - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(fileToCompress & ".deflated") - Using compressor As Stream = New DeflateStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - The stream to be read or written while deflating or inflating. - Indicates whether the DeflateStream will compress or decompress. - A tuning knob to trade speed for effectiveness. - - - - Create a DeflateStream using the specified - CompressionMode, and explicitly specify whether the - stream should be left open after Deflation or Inflation. - - - - - - This constructor allows the application to request that the captive stream - remain open after the deflation or inflation occurs. By default, after - Close() is called on the stream, the captive stream is also - closed. In some cases this is not desired, for example if the stream is a - memory stream that will be re-read after compression. Specify true for - the parameter to leave the stream open. - - - - The DeflateStream will use the default compression level. - - - - See the other overloads of this constructor for example code. - - - - - The stream which will be read or written. This is called the - "captive" stream in other places in this documentation. - - - - Indicates whether the DeflateStream will compress or decompress. - - - true if the application would like the stream to - remain open after inflation/deflation. - - - - Create a DeflateStream using the specified CompressionMode - and the specified CompressionLevel, and explicitly specify whether - the stream should be left open after Deflation or Inflation. - - - - - - When mode is CompressionMode.Decompress, the level parameter is ignored. - - - - This constructor allows the application to request that the captive stream - remain open after the deflation or inflation occurs. By default, after - Close() is called on the stream, the captive stream is also - closed. In some cases this is not desired, for example if the stream is a - that will be re-read after - compression. Specify true for the parameter - to leave the stream open. - - - - - - - This example shows how to use a DeflateStream to compress data from - a file, and store the compressed data into another file. - - - using (var output = System.IO.File.Create(fileToCompress + ".deflated")) - { - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (Stream compressor = new DeflateStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n= -1; - while (n != 0) - { - if (n > 0) - compressor.Write(buffer, 0, n); - n= input.Read(buffer, 0, buffer.Length); - } - } - } - // can write additional data to the output stream here - } - - - - Using output As FileStream = File.Create(fileToCompress & ".deflated") - Using input As Stream = File.OpenRead(fileToCompress) - Using compressor As Stream = New DeflateStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - ' can write additional data to the output stream here. - End Using - - - The stream which will be read or written. - Indicates whether the DeflateStream will compress or decompress. - true if the application would like the stream to remain open after inflation/deflation. - A tuning knob to trade speed for effectiveness. - - - - This property sets the flush behavior on the stream. - - See the ZLIB documentation for the meaning of the flush behavior. - - - - - The size of the working buffer for the compression codec. - - - - - The working buffer is used for all stream operations. The default size is - 1024 bytes. The minimum size is 128 bytes. You may get better performance - with a larger buffer. Then again, you might not. You would have to test - it. - - - - Set this before the first call to Read() or Write() on the - stream. If you try to set it afterwards, it will throw. - - - - - - The ZLIB strategy to be used during compression. - - - - By tweaking this parameter, you may be able to optimize the compression for - data with particular characteristics. - - - - Returns the total number of bytes input so far. - - - Returns the total number of bytes output so far. - - - - Dispose the stream. - - - - This may or may not result in a Close() call on the captive - stream. See the constructors that have a leaveOpen parameter - for more information. - - - Application code won't call this code directly. This method may be - invoked in two distinct scenarios. If disposing == true, the method - has been called directly or indirectly by a user's code, for example - via the public Dispose() method. In this case, both managed and - unmanaged resources can be referenced and disposed. If disposing == - false, the method has been called by the runtime from inside the - object finalizer and this method should not reference other objects; - in that case only unmanaged resources must be referenced or - disposed. - - - - true if the Dispose method was invoked by user code. - - - - - Indicates whether the stream can be read. - - - The return value depends on whether the captive stream supports reading. - - - - - Indicates whether the stream supports Seek operations. - - - Always returns false. - - - - - Indicates whether the stream can be written. - - - The return value depends on whether the captive stream supports writing. - - - - - Flush the stream. - - - - - Reading this property always throws a . - - - - - The position of the stream pointer. - - - - Setting this property always throws a . Reading will return the total bytes - written out, if used in writing, or the total bytes read in, if used in - reading. The count may refer to compressed bytes or uncompressed bytes, - depending on how you've used the stream. - - - - - Read data from the stream. - - - - - If you wish to use the DeflateStream to compress data while - reading, you can create a DeflateStream with - CompressionMode.Compress, providing an uncompressed data stream. - Then call Read() on that DeflateStream, and the data read will be - compressed as you read. If you wish to use the DeflateStream to - decompress data while reading, you can create a DeflateStream with - CompressionMode.Decompress, providing a readable compressed data - stream. Then call Read() on that DeflateStream, and the data read - will be decompressed as you read. - - - - A DeflateStream can be used for Read() or Write(), but not both. - - - - The buffer into which the read data should be placed. - the offset within that data array to put the first byte read. - the number of bytes to read. - the number of bytes actually read - - - - Calling this method always throws a . - - this is irrelevant, since it will always throw! - this is irrelevant, since it will always throw! - irrelevant! - - - - Calling this method always throws a . - - this is irrelevant, since it will always throw! - - - - Write data to the stream. - - - - - If you wish to use the DeflateStream to compress data while - writing, you can create a DeflateStream with - CompressionMode.Compress, and a writable output stream. Then call - Write() on that DeflateStream, providing uncompressed data - as input. The data sent to the output stream will be the compressed form - of the data written. If you wish to use the DeflateStream to - decompress data while writing, you can create a DeflateStream with - CompressionMode.Decompress, and a writable output stream. Then - call Write() on that stream, providing previously compressed - data. The data sent to the output stream will be the decompressed form of - the data written. - - - - A DeflateStream can be used for Read() or Write(), - but not both. - - - - - The buffer holding data to write to the stream. - the offset within that data array to find the first byte to write. - the number of bytes to write. - - - - Compress a string into a byte array using DEFLATE (RFC 1951). - - - - Uncompress it with . - - - DeflateStream.UncompressString(byte[]) - DeflateStream.CompressBuffer(byte[]) - GZipStream.CompressString(string) - ZlibStream.CompressString(string) - - - A string to compress. The string will first be encoded - using UTF8, then compressed. - - - The string in compressed form - - - - Compress a byte array into a new byte array using DEFLATE. - - - - Uncompress it with . - - - DeflateStream.CompressString(string) - DeflateStream.UncompressBuffer(byte[]) - GZipStream.CompressBuffer(byte[]) - ZlibStream.CompressBuffer(byte[]) - - - A buffer to compress. - - - The data in compressed form - - - - Uncompress a DEFLATE'd byte array into a single string. - - - DeflateStream.CompressString(String) - DeflateStream.UncompressBuffer(byte[]) - GZipStream.UncompressString(byte[]) - ZlibStream.UncompressString(byte[]) - - - A buffer containing DEFLATE-compressed data. - - - The uncompressed string - - - - Uncompress a DEFLATE'd byte array into a byte array. - - - DeflateStream.CompressBuffer(byte[]) - DeflateStream.UncompressString(byte[]) - GZipStream.UncompressBuffer(byte[]) - ZlibStream.UncompressBuffer(byte[]) - - - A buffer containing data that has been compressed with DEFLATE. - - - The data in uncompressed form - - - - A class for compressing and decompressing GZIP streams. - - - - - The GZipStream is a Decorator on a - . It adds GZIP compression or decompression to any - stream. - - - - Like the System.IO.Compression.GZipStream in the .NET Base Class Library, the - Ionic.Zlib.GZipStream can compress while writing, or decompress while - reading, but not vice versa. The compression method used is GZIP, which is - documented in IETF RFC - 1952, "GZIP file format specification version 4.3". - - - A GZipStream can be used to decompress data (through Read()) or - to compress data (through Write()), but not both. - - - - If you wish to use the GZipStream to compress data, you must wrap it - around a write-able stream. As you call Write() on the GZipStream, the - data will be compressed into the GZIP format. If you want to decompress data, - you must wrap the GZipStream around a readable stream that contains an - IETF RFC 1952-compliant stream. The data will be decompressed as you call - Read() on the GZipStream. - - - - Though the GZIP format allows data from multiple files to be concatenated - together, this stream handles only a single segment of GZIP format, typically - representing a single file. - - - - This class is similar to and . - ZlibStream handles RFC1950-compliant streams. - handles RFC1951-compliant streams. This class handles RFC1952-compliant streams. - - - - - - - - - - The comment on the GZIP stream. - - - - - The GZIP format allows for each file to optionally have an associated - comment stored with the file. The comment is encoded with the ISO-8859-1 - code page. To include a comment in a GZIP stream you create, set this - property before calling Write() for the first time on the - GZipStream. - - - - When using GZipStream to decompress, you can retrieve this property - after the first call to Read(). If no comment has been set in the - GZIP bytestream, the Comment property will return null - (Nothing in VB). - - - - - - The FileName for the GZIP stream. - - - - - - The GZIP format optionally allows each file to have an associated - filename. When compressing data (through Write()), set this - FileName before calling Write() the first time on the GZipStream. - The actual filename is encoded into the GZIP bytestream with the - ISO-8859-1 code page, according to RFC 1952. It is the application's - responsibility to insure that the FileName can be encoded and decoded - correctly with this code page. - - - - When decompressing (through Read()), you can retrieve this value - any time after the first Read(). In the case where there was no filename - encoded into the GZIP bytestream, the property will return null (Nothing - in VB). - - - - - - The last modified time for the GZIP stream. - - - - GZIP allows the storage of a last modified time with each GZIP entry. - When compressing data, you can set this before the first call to - Write(). When decompressing, you can retrieve this value any time - after the first call to Read(). - - - - - The CRC on the GZIP stream. - - - This is used for internal error checking. You probably don't need to look at this property. - - - - - Create a GZipStream using the specified CompressionMode. - - - - - When mode is CompressionMode.Compress, the GZipStream will use the - default compression level. - - - - As noted in the class documentation, the CompressionMode (Compress - or Decompress) also establishes the "direction" of the stream. A - GZipStream with CompressionMode.Compress works only through - Write(). A GZipStream with - CompressionMode.Decompress works only through Read(). - - - - - - This example shows how to use a GZipStream to compress data. - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(outputFile)) - { - using (Stream compressor = new GZipStream(raw, CompressionMode.Compress)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - Dim outputFile As String = (fileToCompress & ".compressed") - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(outputFile) - Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - - - This example shows how to use a GZipStream to uncompress a file. - - private void GunZipFile(string filename) - { - if (!filename.EndsWith(".gz)) - throw new ArgumentException("filename"); - var DecompressedFile = filename.Substring(0,filename.Length-3); - byte[] working = new byte[WORKING_BUFFER_SIZE]; - int n= 1; - using (System.IO.Stream input = System.IO.File.OpenRead(filename)) - { - using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) - { - using (var output = System.IO.File.Create(DecompressedFile)) - { - while (n !=0) - { - n= decompressor.Read(working, 0, working.Length); - if (n > 0) - { - output.Write(working, 0, n); - } - } - } - } - } - } - - - - Private Sub GunZipFile(ByVal filename as String) - If Not (filename.EndsWith(".gz)) Then - Throw New ArgumentException("filename") - End If - Dim DecompressedFile as String = filename.Substring(0,filename.Length-3) - Dim working(WORKING_BUFFER_SIZE) as Byte - Dim n As Integer = 1 - Using input As Stream = File.OpenRead(filename) - Using decompressor As Stream = new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, True) - Using output As Stream = File.Create(UncompressedFile) - Do - n= decompressor.Read(working, 0, working.Length) - If n > 0 Then - output.Write(working, 0, n) - End IF - Loop While (n > 0) - End Using - End Using - End Using - End Sub - - - - The stream which will be read or written. - Indicates whether the GZipStream will compress or decompress. - - - - Create a GZipStream using the specified CompressionMode and - the specified CompressionLevel. - - - - - The CompressionMode (Compress or Decompress) also establishes the - "direction" of the stream. A GZipStream with - CompressionMode.Compress works only through Write(). A - GZipStream with CompressionMode.Decompress works only - through Read(). - - - - - - - This example shows how to use a GZipStream to compress a file into a .gz file. - - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(fileToCompress + ".gz")) - { - using (Stream compressor = new GZipStream(raw, - CompressionMode.Compress, - CompressionLevel.BestCompression)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(fileToCompress & ".gz") - Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - The stream to be read or written while deflating or inflating. - Indicates whether the GZipStream will compress or decompress. - A tuning knob to trade speed for effectiveness. - - - - Create a GZipStream using the specified CompressionMode, and - explicitly specify whether the stream should be left open after Deflation - or Inflation. - - - - - This constructor allows the application to request that the captive stream - remain open after the deflation or inflation occurs. By default, after - Close() is called on the stream, the captive stream is also - closed. In some cases this is not desired, for example if the stream is a - memory stream that will be re-read after compressed data has been written - to it. Specify true for the parameter to leave - the stream open. - - - - The (Compress or Decompress) also - establishes the "direction" of the stream. A GZipStream with - CompressionMode.Compress works only through Write(). A GZipStream - with CompressionMode.Decompress works only through Read(). - - - - The GZipStream will use the default compression level. If you want - to specify the compression level, see . - - - - See the other overloads of this constructor for example code. - - - - - - The stream which will be read or written. This is called the "captive" - stream in other places in this documentation. - - - Indicates whether the GZipStream will compress or decompress. - - - - true if the application would like the base stream to remain open after - inflation/deflation. - - - - - Create a GZipStream using the specified CompressionMode and the - specified CompressionLevel, and explicitly specify whether the - stream should be left open after Deflation or Inflation. - - - - - - This constructor allows the application to request that the captive stream - remain open after the deflation or inflation occurs. By default, after - Close() is called on the stream, the captive stream is also - closed. In some cases this is not desired, for example if the stream is a - memory stream that will be re-read after compressed data has been written - to it. Specify true for the parameter to - leave the stream open. - - - - As noted in the class documentation, the CompressionMode (Compress - or Decompress) also establishes the "direction" of the stream. A - GZipStream with CompressionMode.Compress works only through - Write(). A GZipStream with CompressionMode.Decompress works only - through Read(). - - - - - - This example shows how to use a GZipStream to compress data. - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(outputFile)) - { - using (Stream compressor = new GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, true)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - Dim outputFile As String = (fileToCompress & ".compressed") - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(outputFile) - Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, True) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - The stream which will be read or written. - Indicates whether the GZipStream will compress or decompress. - true if the application would like the stream to remain open after inflation/deflation. - A tuning knob to trade speed for effectiveness. - - - - This property sets the flush behavior on the stream. - - - - - The size of the working buffer for the compression codec. - - - - - The working buffer is used for all stream operations. The default size is - 1024 bytes. The minimum size is 128 bytes. You may get better performance - with a larger buffer. Then again, you might not. You would have to test - it. - - - - Set this before the first call to Read() or Write() on the - stream. If you try to set it afterwards, it will throw. - - - - - Returns the total number of bytes input so far. - - - Returns the total number of bytes output so far. - - - - Dispose the stream. - - - - This may or may not result in a Close() call on the captive - stream. See the constructors that have a leaveOpen parameter - for more information. - - - This method may be invoked in two distinct scenarios. If disposing - == true, the method has been called directly or indirectly by a - user's code, for example via the public Dispose() method. In this - case, both managed and unmanaged resources can be referenced and - disposed. If disposing == false, the method has been called by the - runtime from inside the object finalizer and this method should not - reference other objects; in that case only unmanaged resources must - be referenced or disposed. - - - - indicates whether the Dispose method was invoked by user code. - - - - - Indicates whether the stream can be read. - - - The return value depends on whether the captive stream supports reading. - - - - - Indicates whether the stream supports Seek operations. - - - Always returns false. - - - - - Indicates whether the stream can be written. - - - The return value depends on whether the captive stream supports writing. - - - - - Flush the stream. - - - - - Reading this property always throws a . - - - - - The position of the stream pointer. - - - - Setting this property always throws a . Reading will return the total bytes - written out, if used in writing, or the total bytes read in, if used in - reading. The count may refer to compressed bytes or uncompressed bytes, - depending on how you've used the stream. - - - - - Read and decompress data from the source stream. - - - - With a GZipStream, decompression is done through reading. - - - - - byte[] working = new byte[WORKING_BUFFER_SIZE]; - using (System.IO.Stream input = System.IO.File.OpenRead(_CompressedFile)) - { - using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) - { - using (var output = System.IO.File.Create(_DecompressedFile)) - { - int n; - while ((n= decompressor.Read(working, 0, working.Length)) !=0) - { - output.Write(working, 0, n); - } - } - } - } - - - The buffer into which the decompressed data should be placed. - the offset within that data array to put the first byte read. - the number of bytes to read. - the number of bytes actually read - - - - Calling this method always throws a . - - irrelevant; it will always throw! - irrelevant; it will always throw! - irrelevant! - - - - Calling this method always throws a . - - irrelevant; this method will always throw! - - - - Write data to the stream. - - - - - If you wish to use the GZipStream to compress data while writing, - you can create a GZipStream with CompressionMode.Compress, and a - writable output stream. Then call Write() on that GZipStream, - providing uncompressed data as input. The data sent to the output stream - will be the compressed form of the data written. - - - - A GZipStream can be used for Read() or Write(), but not - both. Writing implies compression. Reading implies decompression. - - - - The buffer holding data to write to the stream. - the offset within that data array to find the first byte to write. - the number of bytes to write. - - - - Compress a string into a byte array using GZip. - - - - Uncompress it with . - - - - - - - A string to compress. The string will first be encoded - using UTF8, then compressed. - - - The string in compressed form - - - - Compress a byte array into a new byte array using GZip. - - - - Uncompress it with . - - - - - - - A buffer to compress. - - - The data in compressed form - - - - Uncompress a GZip'ed byte array into a single string. - - - - - - - A buffer containing GZIP-compressed data. - - - The uncompressed string - - - - Uncompress a GZip'ed byte array into a byte array. - - - - - - - A buffer containing data that has been compressed with GZip. - - - The data in uncompressed form - - - - A class for compressing streams using the - Deflate algorithm with multiple threads. - - - - - This class performs DEFLATE compression through writing. For - more information on the Deflate algorithm, see IETF RFC 1951, - "DEFLATE Compressed Data Format Specification version 1.3." - - - - This class is similar to , except - that this class is for compression only, and this implementation uses an - approach that employs multiple worker threads to perform the DEFLATE. On - a multi-cpu or multi-core computer, the performance of this class can be - significantly higher than the single-threaded DeflateStream, particularly - for larger streams. How large? Anything over 10mb is a good candidate - for parallel compression. - - - - The tradeoff is that this class uses more memory and more CPU than the - vanilla DeflateStream, and also is less efficient as a compressor. For - large files the size of the compressed data stream can be less than 1% - larger than the size of a compressed data stream from the vanialla - DeflateStream. For smaller files the difference can be larger. The - difference will also be larger if you set the BufferSize to be lower than - the default value. Your mileage may vary. Finally, for small files, the - ParallelDeflateOutputStream can be much slower than the vanilla - DeflateStream, because of the overhead associated to using the thread - pool. - - - - - - - - Create a ParallelDeflateOutputStream. - - - - - This stream compresses data written into it via the DEFLATE - algorithm (see RFC 1951), and writes out the compressed byte stream. - - - - The instance will use the default compression level, the default - buffer sizes and the default number of threads and buffers per - thread. - - - - This class is similar to , - except that this implementation uses an approach that employs - multiple worker threads to perform the DEFLATE. On a multi-cpu or - multi-core computer, the performance of this class can be - significantly higher than the single-threaded DeflateStream, - particularly for larger streams. How large? Anything over 10mb is - a good candidate for parallel compression. - - - - - - - This example shows how to use a ParallelDeflateOutputStream to compress - data. It reads a file, compresses it, and writes the compressed data to - a second, output file. - - - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n= -1; - String outputFile = fileToCompress + ".compressed"; - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(outputFile)) - { - using (Stream compressor = new ParallelDeflateOutputStream(raw)) - { - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Dim outputFile As String = (fileToCompress & ".compressed") - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(outputFile) - Using compressor As Stream = New ParallelDeflateOutputStream(raw) - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - The stream to which compressed data will be written. - - - - Create a ParallelDeflateOutputStream using the specified CompressionLevel. - - - See the - constructor for example code. - - The stream to which compressed data will be written. - A tuning knob to trade speed for effectiveness. - - - - Create a ParallelDeflateOutputStream and specify whether to leave the captive stream open - when the ParallelDeflateOutputStream is closed. - - - See the - constructor for example code. - - The stream to which compressed data will be written. - - true if the application would like the stream to remain open after inflation/deflation. - - - - - Create a ParallelDeflateOutputStream and specify whether to leave the captive stream open - when the ParallelDeflateOutputStream is closed. - - - See the - constructor for example code. - - The stream to which compressed data will be written. - A tuning knob to trade speed for effectiveness. - - true if the application would like the stream to remain open after inflation/deflation. - - - - - Create a ParallelDeflateOutputStream using the specified - CompressionLevel and CompressionStrategy, and specifying whether to - leave the captive stream open when the ParallelDeflateOutputStream is - closed. - - - See the - constructor for example code. - - The stream to which compressed data will be written. - A tuning knob to trade speed for effectiveness. - - By tweaking this parameter, you may be able to optimize the compression for - data with particular characteristics. - - - true if the application would like the stream to remain open after inflation/deflation. - - - - - The ZLIB strategy to be used during compression. - - - - - - The maximum number of buffer pairs to use. - - - - - This property sets an upper limit on the number of memory buffer - pairs to create. The implementation of this stream allocates - multiple buffers to facilitate parallel compression. As each buffer - fills up, this stream uses - ThreadPool.QueueUserWorkItem() - to compress those buffers in a background threadpool thread. After a - buffer is compressed, it is re-ordered and written to the output - stream. - - - - A higher number of buffer pairs enables a higher degree of - parallelism, which tends to increase the speed of compression on - multi-cpu computers. On the other hand, a higher number of buffer - pairs also implies a larger memory consumption, more active worker - threads, and a higher cpu utilization for any compression. This - property enables the application to limit its memory consumption and - CPU utilization behavior depending on requirements. - - - - For each compression "task" that occurs in parallel, there are 2 - buffers allocated: one for input and one for output. This property - sets a limit for the number of pairs. The total amount of storage - space allocated for buffering will then be (N*S*2), where N is the - number of buffer pairs, S is the size of each buffer (). By default, DotNetZip allocates 4 buffer - pairs per CPU core, so if your machine has 4 cores, and you retain - the default buffer size of 128k, then the - ParallelDeflateOutputStream will use 4 * 4 * 2 * 128kb of buffer - memory in total, or 4mb, in blocks of 128kb. If you then set this - property to 8, then the number will be 8 * 2 * 128kb of buffer - memory, or 2mb. - - - - CPU utilization will also go up with additional buffers, because a - larger number of buffer pairs allows a larger number of background - threads to compress in parallel. If you find that parallel - compression is consuming too much memory or CPU, you can adjust this - value downward. - - - - The default value is 16. Different values may deliver better or - worse results, depending on your priorities and the dynamic - performance characteristics of your storage and compute resources. - - - - This property is not the number of buffer pairs to use; it is an - upper limit. An illustration: Suppose you have an application that - uses the default value of this property (which is 16), and it runs - on a machine with 2 CPU cores. In that case, DotNetZip will allocate - 4 buffer pairs per CPU core, for a total of 8 pairs. The upper - limit specified by this property has no effect. - - - - The application can set this value at any time, but it is effective - only before the first call to Write(), which is when the buffers are - allocated. - - - - - - The size of the buffers used by the compressor threads. - - - - - The default buffer size is 128k. The application can set this value - at any time, but it is effective only before the first Write(). - - - - Larger buffer sizes implies larger memory consumption but allows - more efficient compression. Using smaller buffer sizes consumes less - memory but may result in less effective compression. For example, - using the default buffer size of 128k, the compression delivered is - within 1% of the compression delivered by the single-threaded . On the other hand, using a - BufferSize of 8k can result in a compressed data stream that is 5% - larger than that delivered by the single-threaded - DeflateStream. Excessively small buffer sizes can also cause - the speed of the ParallelDeflateOutputStream to drop, because of - larger thread scheduling overhead dealing with many many small - buffers. - - - - The total amount of storage space allocated for buffering will be - (N*S*2), where N is the number of buffer pairs, and S is the size of - each buffer (this property). There are 2 buffers used by the - compressor, one for input and one for output. By default, DotNetZip - allocates 4 buffer pairs per CPU core, so if your machine has 4 - cores, then the number of buffer pairs used will be 16. If you - accept the default value of this property, 128k, then the - ParallelDeflateOutputStream will use 16 * 2 * 128kb of buffer memory - in total, or 4mb, in blocks of 128kb. If you set this property to - 64kb, then the number will be 16 * 2 * 64kb of buffer memory, or - 2mb. - - - - - - - The CRC32 for the data that was written out, prior to compression. - - - This value is meaningful only after a call to Close(). - - - - - The total number of uncompressed bytes processed by the ParallelDeflateOutputStream. - - - This value is meaningful only after a call to Close(). - - - - - Write data to the stream. - - - - - - To use the ParallelDeflateOutputStream to compress data, create a - ParallelDeflateOutputStream with CompressionMode.Compress, passing a - writable output stream. Then call Write() on that - ParallelDeflateOutputStream, providing uncompressed data as input. The - data sent to the output stream will be the compressed form of the data - written. - - - - To decompress data, use the class. - - - - The buffer holding data to write to the stream. - the offset within that data array to find the first byte to write. - the number of bytes to write. - - - - Flush the stream. - - - - - Close the stream. - - - You must call Close on the stream to guarantee that all of the data written in has - been compressed, and the compressed data has been written out. - - - - Dispose the object - - - Because ParallelDeflateOutputStream is IDisposable, the - application must call this method when finished using the instance. - - - This method is generally called implicitly upon exit from - a using scope in C# (Using in VB). - - - - - The Dispose method - - indicates whether the Dispose method was invoked by user code. - - - - - Resets the stream for use with another stream. - - - Because the ParallelDeflateOutputStream is expensive to create, it - has been designed so that it can be recycled and re-used. You have - to call Close() on the stream first, then you can call Reset() on - it, to use it again on another stream. - - - - The new output stream for this era. - - - - - ParallelDeflateOutputStream deflater = null; - foreach (var inputFile in listOfFiles) - { - string outputFile = inputFile + ".compressed"; - using (System.IO.Stream input = System.IO.File.OpenRead(inputFile)) - { - using (var outStream = System.IO.File.Create(outputFile)) - { - if (deflater == null) - deflater = new ParallelDeflateOutputStream(outStream, - CompressionLevel.Best, - CompressionStrategy.Default, - true); - deflater.Reset(outStream); - - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - deflater.Write(buffer, 0, n); - } - } - } - } - - - - - - Indicates whether the stream supports Seek operations. - - - Always returns false. - - - - - Indicates whether the stream supports Read operations. - - - Always returns false. - - - - - Indicates whether the stream supports Write operations. - - - Returns true if the provided stream is writable. - - - - - Reading this property always throws a NotSupportedException. - - - - - Returns the current position of the output stream. - - - - Because the output gets written by a background thread, - the value may change asynchronously. Setting this - property always throws a NotSupportedException. - - - - - - This method always throws a NotSupportedException. - - - The buffer into which data would be read, IF THIS METHOD - ACTUALLY DID ANYTHING. - - - The offset within that data array at which to insert the - data that is read, IF THIS METHOD ACTUALLY DID - ANYTHING. - - - The number of bytes to write, IF THIS METHOD ACTUALLY DID - ANYTHING. - - nothing. - - - - This method always throws a NotSupportedException. - - - The offset to seek to.... - IF THIS METHOD ACTUALLY DID ANYTHING. - - - The reference specifying how to apply the offset.... IF - THIS METHOD ACTUALLY DID ANYTHING. - - nothing. It always throws. - - - - This method always throws a NotSupportedException. - - - The new value for the stream length.... IF - THIS METHOD ACTUALLY DID ANYTHING. - - - - - Map from a distance to a distance code. - - - No side effects. _dist_code[256] and _dist_code[257] are never used. - - - - - Describes how to flush the current deflate operation. - - - The different FlushType values are useful when using a Deflate in a streaming application. - - - - No flush at all. - - - Closes the current block, but doesn't flush it to - the output. Used internally only in hypothetical - scenarios. This was supposed to be removed by Zlib, but it is - still in use in some edge cases. - - - - - Use this during compression to specify that all pending output should be - flushed to the output buffer and the output should be aligned on a byte - boundary. You might use this in a streaming communication scenario, so that - the decompressor can get all input data available so far. When using this - with a ZlibCodec, AvailableBytesIn will be zero after the call if - enough output space has been provided before the call. Flushing will - degrade compression and so it should be used only when necessary. - - - - - Use this during compression to specify that all output should be flushed, as - with FlushType.Sync, but also, the compression state should be reset - so that decompression can restart from this point if previous compressed - data has been damaged or if random access is desired. Using - FlushType.Full too often can significantly degrade the compression. - - - - Signals the end of the compression/decompression stream. - - - - The compression level to be used when using a DeflateStream or ZlibStream with CompressionMode.Compress. - - - - - None means that the data will be simply stored, with no change at all. - If you are producing ZIPs for use on Mac OSX, be aware that archives produced with CompressionLevel.None - cannot be opened with the default zip reader. Use a different CompressionLevel. - - - - - Same as None. - - - - - The fastest but least effective compression. - - - - - A synonym for BestSpeed. - - - - - A little slower, but better, than level 1. - - - - - A little slower, but better, than level 2. - - - - - A little slower, but better, than level 3. - - - - - A little slower than level 4, but with better compression. - - - - - The default compression level, with a good balance of speed and compression efficiency. - - - - - A synonym for Default. - - - - - Pretty good compression! - - - - - Better compression than Level7! - - - - - The "best" compression, where best means greatest reduction in size of the input data stream. - This is also the slowest compression. - - - - - A synonym for BestCompression. - - - - - Describes options for how the compression algorithm is executed. Different strategies - work better on different sorts of data. The strategy parameter can affect the compression - ratio and the speed of compression but not the correctness of the compresssion. - - - - - The default strategy is probably the best for normal data. - - - - - The Filtered strategy is intended to be used most effectively with data produced by a - filter or predictor. By this definition, filtered data consists mostly of small - values with a somewhat random distribution. In this case, the compression algorithm - is tuned to compress them better. The effect of Filtered is to force more Huffman - coding and less string matching; it is a half-step between Default and HuffmanOnly. - - - - - Using HuffmanOnly will force the compressor to do Huffman encoding only, with no - string matching. - - - - - An enum to specify the direction of transcoding - whether to compress or decompress. - - - - - Used to specify that the stream should compress the data. - - - - - Used to specify that the stream should decompress the data. - - - - - A general purpose exception class for exceptions in the Zlib library. - - - - - The ZlibException class captures exception information generated - by the Zlib library. - - - - - This ctor collects a message attached to the exception. - - the message for the exception. - - - - Performs an unsigned bitwise right shift with the specified number - - Number to operate on - Ammount of bits to shift - The resulting number from the shift operation - - - - Reads a number of characters from the current source TextReader and writes - the data to the target array at the specified index. - - - The source TextReader to read from - Contains the array of characteres read from the source TextReader. - The starting index of the target array. - The maximum number of characters to read from the source TextReader. - - - The number of characters read. The number will be less than or equal to - count depending on the data available in the source TextReader. Returns -1 - if the end of the stream is reached. - - - - - Computes an Adler-32 checksum. - - - The Adler checksum is similar to a CRC checksum, but faster to compute, though less - reliable. It is used in producing RFC1950 compressed streams. The Adler checksum - is a required part of the "ZLIB" standard. Applications will almost never need to - use this class directly. - - - - - - - Calculates the Adler32 checksum. - - - - This is used within ZLIB. You probably don't need to use this directly. - - - - To compute an Adler32 checksum on a byte array: - - var adler = Adler.Adler32(0, null, 0, 0); - adler = Adler.Adler32(adler, buffer, index, length); - - - - - - Encoder and Decoder for ZLIB and DEFLATE (IETF RFC1950 and RFC1951). - - - - This class compresses and decompresses data according to the Deflate algorithm - and optionally, the ZLIB format, as documented in RFC 1950 - ZLIB and RFC 1951 - DEFLATE. - - - - - The buffer from which data is taken. - - - - - An index into the InputBuffer array, indicating where to start reading. - - - - - The number of bytes available in the InputBuffer, starting at NextIn. - - - Generally you should set this to InputBuffer.Length before the first Inflate() or Deflate() call. - The class will update this number as calls to Inflate/Deflate are made. - - - - - Total number of bytes read so far, through all calls to Inflate()/Deflate(). - - - - - Buffer to store output data. - - - - - An index into the OutputBuffer array, indicating where to start writing. - - - - - The number of bytes available in the OutputBuffer, starting at NextOut. - - - Generally you should set this to OutputBuffer.Length before the first Inflate() or Deflate() call. - The class will update this number as calls to Inflate/Deflate are made. - - - - - Total number of bytes written to the output so far, through all calls to Inflate()/Deflate(). - - - - - used for diagnostics, when something goes wrong! - - - - - The compression level to use in this codec. Useful only in compression mode. - - - - - The number of Window Bits to use. - - - This gauges the size of the sliding window, and hence the - compression effectiveness as well as memory consumption. It's best to just leave this - setting alone if you don't know what it is. The maximum value is 15 bits, which implies - a 32k window. - - - - - The compression strategy to use. - - - This is only effective in compression. The theory offered by ZLIB is that different - strategies could potentially produce significant differences in compression behavior - for different data sets. Unfortunately I don't have any good recommendations for how - to set it differently. When I tested changing the strategy I got minimally different - compression performance. It's best to leave this property alone if you don't have a - good feel for it. Or, you may want to produce a test harness that runs through the - different strategy options and evaluates them on different file types. If you do that, - let me know your results. - - - - - The Adler32 checksum on the data transferred through the codec so far. You probably don't need to look at this. - - - - - Create a ZlibCodec. - - - If you use this default constructor, you will later have to explicitly call - InitializeInflate() or InitializeDeflate() before using the ZlibCodec to compress - or decompress. - - - - - Create a ZlibCodec that either compresses or decompresses. - - - Indicates whether the codec should compress (deflate) or decompress (inflate). - - - - - Initialize the inflation state. - - - It is not necessary to call this before using the ZlibCodec to inflate data; - It is implicitly called when you call the constructor. - - Z_OK if everything goes well. - - - - Initialize the inflation state with an explicit flag to - govern the handling of RFC1950 header bytes. - - - - By default, the ZLIB header defined in RFC 1950 is expected. If - you want to read a zlib stream you should specify true for - expectRfc1950Header. If you have a deflate stream, you will want to specify - false. It is only necessary to invoke this initializer explicitly if you - want to specify false. - - - whether to expect an RFC1950 header byte - pair when reading the stream of data to be inflated. - - Z_OK if everything goes well. - - - - Initialize the ZlibCodec for inflation, with the specified number of window bits. - - The number of window bits to use. If you need to ask what that is, - then you shouldn't be calling this initializer. - Z_OK if all goes well. - - - - Initialize the inflation state with an explicit flag to govern the handling of - RFC1950 header bytes. - - - - If you want to read a zlib stream you should specify true for - expectRfc1950Header. In this case, the library will expect to find a ZLIB - header, as defined in RFC - 1950, in the compressed stream. If you will be reading a DEFLATE or - GZIP stream, which does not have such a header, you will want to specify - false. - - - whether to expect an RFC1950 header byte pair when reading - the stream of data to be inflated. - The number of window bits to use. If you need to ask what that is, - then you shouldn't be calling this initializer. - Z_OK if everything goes well. - - - - Inflate the data in the InputBuffer, placing the result in the OutputBuffer. - - - You must have set InputBuffer and OutputBuffer, NextIn and NextOut, and AvailableBytesIn and - AvailableBytesOut before calling this method. - - - - private void InflateBuffer() - { - int bufferSize = 1024; - byte[] buffer = new byte[bufferSize]; - ZlibCodec decompressor = new ZlibCodec(); - - Console.WriteLine("\n============================================"); - Console.WriteLine("Size of Buffer to Inflate: {0} bytes.", CompressedBytes.Length); - MemoryStream ms = new MemoryStream(DecompressedBytes); - - int rc = decompressor.InitializeInflate(); - - decompressor.InputBuffer = CompressedBytes; - decompressor.NextIn = 0; - decompressor.AvailableBytesIn = CompressedBytes.Length; - - decompressor.OutputBuffer = buffer; - - // pass 1: inflate - do - { - decompressor.NextOut = 0; - decompressor.AvailableBytesOut = buffer.Length; - rc = decompressor.Inflate(FlushType.None); - - if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) - throw new Exception("inflating: " + decompressor.Message); - - ms.Write(decompressor.OutputBuffer, 0, buffer.Length - decompressor.AvailableBytesOut); - } - while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); - - // pass 2: finish and flush - do - { - decompressor.NextOut = 0; - decompressor.AvailableBytesOut = buffer.Length; - rc = decompressor.Inflate(FlushType.Finish); - - if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) - throw new Exception("inflating: " + decompressor.Message); - - if (buffer.Length - decompressor.AvailableBytesOut > 0) - ms.Write(buffer, 0, buffer.Length - decompressor.AvailableBytesOut); - } - while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); - - decompressor.EndInflate(); - } - - - - The flush to use when inflating. - Z_OK if everything goes well. - - - - Ends an inflation session. - - - Call this after successively calling Inflate(). This will cause all buffers to be flushed. - After calling this you cannot call Inflate() without a intervening call to one of the - InitializeInflate() overloads. - - Z_OK if everything goes well. - - - - I don't know what this does! - - Z_OK if everything goes well. - - - - Initialize the ZlibCodec for deflation operation. - - - The codec will use the MAX window bits and the default level of compression. - - - - int bufferSize = 40000; - byte[] CompressedBytes = new byte[bufferSize]; - byte[] DecompressedBytes = new byte[bufferSize]; - - ZlibCodec compressor = new ZlibCodec(); - - compressor.InitializeDeflate(CompressionLevel.Default); - - compressor.InputBuffer = System.Text.ASCIIEncoding.ASCII.GetBytes(TextToCompress); - compressor.NextIn = 0; - compressor.AvailableBytesIn = compressor.InputBuffer.Length; - - compressor.OutputBuffer = CompressedBytes; - compressor.NextOut = 0; - compressor.AvailableBytesOut = CompressedBytes.Length; - - while (compressor.TotalBytesIn != TextToCompress.Length && compressor.TotalBytesOut < bufferSize) - { - compressor.Deflate(FlushType.None); - } - - while (true) - { - int rc= compressor.Deflate(FlushType.Finish); - if (rc == ZlibConstants.Z_STREAM_END) break; - } - - compressor.EndDeflate(); - - - - Z_OK if all goes well. You generally don't need to check the return code. - - - - Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel. - - - The codec will use the maximum window bits (15) and the specified - CompressionLevel. It will emit a ZLIB stream as it compresses. - - The compression level for the codec. - Z_OK if all goes well. - - - - Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, - and the explicit flag governing whether to emit an RFC1950 header byte pair. - - - The codec will use the maximum window bits (15) and the specified CompressionLevel. - If you want to generate a zlib stream, you should specify true for - wantRfc1950Header. In this case, the library will emit a ZLIB - header, as defined in RFC - 1950, in the compressed stream. - - The compression level for the codec. - whether to emit an initial RFC1950 byte pair in the compressed stream. - Z_OK if all goes well. - - - - Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, - and the specified number of window bits. - - - The codec will use the specified number of window bits and the specified CompressionLevel. - - The compression level for the codec. - the number of window bits to use. If you don't know what this means, don't use this method. - Z_OK if all goes well. - - - - Initialize the ZlibCodec for deflation operation, using the specified - CompressionLevel, the specified number of window bits, and the explicit flag - governing whether to emit an RFC1950 header byte pair. - - - The compression level for the codec. - whether to emit an initial RFC1950 byte pair in the compressed stream. - the number of window bits to use. If you don't know what this means, don't use this method. - Z_OK if all goes well. - - - - Deflate one batch of data. - - - You must have set InputBuffer and OutputBuffer before calling this method. - - - - private void DeflateBuffer(CompressionLevel level) - { - int bufferSize = 1024; - byte[] buffer = new byte[bufferSize]; - ZlibCodec compressor = new ZlibCodec(); - - Console.WriteLine("\n============================================"); - Console.WriteLine("Size of Buffer to Deflate: {0} bytes.", UncompressedBytes.Length); - MemoryStream ms = new MemoryStream(); - - int rc = compressor.InitializeDeflate(level); - - compressor.InputBuffer = UncompressedBytes; - compressor.NextIn = 0; - compressor.AvailableBytesIn = UncompressedBytes.Length; - - compressor.OutputBuffer = buffer; - - // pass 1: deflate - do - { - compressor.NextOut = 0; - compressor.AvailableBytesOut = buffer.Length; - rc = compressor.Deflate(FlushType.None); - - if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) - throw new Exception("deflating: " + compressor.Message); - - ms.Write(compressor.OutputBuffer, 0, buffer.Length - compressor.AvailableBytesOut); - } - while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); - - // pass 2: finish and flush - do - { - compressor.NextOut = 0; - compressor.AvailableBytesOut = buffer.Length; - rc = compressor.Deflate(FlushType.Finish); - - if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) - throw new Exception("deflating: " + compressor.Message); - - if (buffer.Length - compressor.AvailableBytesOut > 0) - ms.Write(buffer, 0, buffer.Length - compressor.AvailableBytesOut); - } - while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); - - compressor.EndDeflate(); - - ms.Seek(0, SeekOrigin.Begin); - CompressedBytes = new byte[compressor.TotalBytesOut]; - ms.Read(CompressedBytes, 0, CompressedBytes.Length); - } - - - whether to flush all data as you deflate. Generally you will want to - use Z_NO_FLUSH here, in a series of calls to Deflate(), and then call EndDeflate() to - flush everything. - - Z_OK if all goes well. - - - - End a deflation session. - - - Call this after making a series of one or more calls to Deflate(). All buffers are flushed. - - Z_OK if all goes well. - - - - Reset a codec for another deflation session. - - - Call this to reset the deflation state. For example if a thread is deflating - non-consecutive blocks, you can call Reset() after the Deflate(Sync) of the first - block and before the next Deflate(None) of the second block. - - Z_OK if all goes well. - - - - Set the CompressionStrategy and CompressionLevel for a deflation session. - - the level of compression to use. - the strategy to use for compression. - Z_OK if all goes well. - - - - Set the dictionary to be used for either Inflation or Deflation. - - The dictionary bytes to use. - Z_OK if all goes well. - - - - Set the dictionary to be used for either Inflation or Deflation unconditionally. - - Decoding a MSZip file requires the dictionary state to be set unconditionally - at the end of each block to the previous decoded data - The dictionary bytes to use. - Z_OK if all goes well. - - - - A bunch of constants used in the Zlib interface. - - - - - The maximum number of window bits for the Deflate algorithm. - - - - - The default number of window bits for the Deflate algorithm. - - - - - indicates everything is A-OK - - - - - Indicates that the last operation reached the end of the stream. - - - - - The operation ended in need of a dictionary. - - - - - There was an error with the stream - not enough data, not open and readable, etc. - - - - - There was an error with the data - not enough data, bad data, etc. - - - - - There was an error with the working buffer. - - - - - The size of the working buffer used in the ZlibCodec class. - - - - - The minimum size of the working buffer used in the ZlibCodec class. - - - - - Represents a Zlib stream for compression or decompression. - - - - - The ZlibStream is a Decorator on a . It adds ZLIB compression or decompression to any - stream. - - - Using this stream, applications can compress or decompress data via - stream Read() and Write() operations. Either compresssion or - decompression can occur through either reading or writing. The compression - format used is ZLIB, which is documented in IETF RFC 1950, "ZLIB Compressed - Data Format Specification version 3.3". This implementation of ZLIB always uses - DEFLATE as the compression method. (see IETF RFC 1951, "DEFLATE - Compressed Data Format Specification version 1.3.") - - - The ZLIB format allows for varying compression methods, window sizes, and dictionaries. - This implementation always uses the DEFLATE compression method, a preset dictionary, - and 15 window bits by default. - - - - This class is similar to , except that it adds the - RFC1950 header and trailer bytes to a compressed stream when compressing, or expects - the RFC1950 header and trailer bytes when decompressing. It is also similar to the - . - - - - - - - - Create a ZlibStream using the specified CompressionMode. - - - - - When mode is CompressionMode.Compress, the ZlibStream - will use the default compression level. The "captive" stream will be - closed when the ZlibStream is closed. - - - - - - This example uses a ZlibStream to compress a file, and writes the - compressed data to another file. - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(fileToCompress + ".zlib")) - { - using (Stream compressor = new ZlibStream(raw, CompressionMode.Compress)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(fileToCompress & ".zlib") - Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - - The stream which will be read or written. - Indicates whether the ZlibStream will compress or decompress. - - - - Create a ZlibStream using the specified CompressionMode and - the specified CompressionLevel. - - - - - - When mode is CompressionMode.Decompress, the level parameter is ignored. - The "captive" stream will be closed when the ZlibStream is closed. - - - - - - This example uses a ZlibStream to compress data from a file, and writes the - compressed data to another file. - - - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (var raw = System.IO.File.Create(fileToCompress + ".zlib")) - { - using (Stream compressor = new ZlibStream(raw, - CompressionMode.Compress, - CompressionLevel.BestCompression)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - } - - - - Using input As Stream = File.OpenRead(fileToCompress) - Using raw As FileStream = File.Create(fileToCompress & ".zlib") - Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - End Using - - - - The stream to be read or written while deflating or inflating. - Indicates whether the ZlibStream will compress or decompress. - A tuning knob to trade speed for effectiveness. - - - - Create a ZlibStream using the specified CompressionMode, and - explicitly specify whether the captive stream should be left open after - Deflation or Inflation. - - - - - - When mode is CompressionMode.Compress, the ZlibStream will use - the default compression level. - - - - This constructor allows the application to request that the captive stream - remain open after the deflation or inflation occurs. By default, after - Close() is called on the stream, the captive stream is also - closed. In some cases this is not desired, for example if the stream is a - that will be re-read after - compression. Specify true for the parameter to leave the stream - open. - - - - See the other overloads of this constructor for example code. - - - - - The stream which will be read or written. This is called the - "captive" stream in other places in this documentation. - Indicates whether the ZlibStream will compress or decompress. - true if the application would like the stream to remain - open after inflation/deflation. - - - - Create a ZlibStream using the specified CompressionMode - and the specified CompressionLevel, and explicitly specify - whether the stream should be left open after Deflation or Inflation. - - - - - - This constructor allows the application to request that the captive - stream remain open after the deflation or inflation occurs. By - default, after Close() is called on the stream, the captive - stream is also closed. In some cases this is not desired, for example - if the stream is a that will be - re-read after compression. Specify true for the parameter to leave the stream open. - - - - When mode is CompressionMode.Decompress, the level parameter is - ignored. - - - - - - - This example shows how to use a ZlibStream to compress the data from a file, - and store the result into another file. The filestream remains open to allow - additional data to be written to it. - - - using (var output = System.IO.File.Create(fileToCompress + ".zlib")) - { - using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - { - using (Stream compressor = new ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true)) - { - byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - int n; - while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - { - compressor.Write(buffer, 0, n); - } - } - } - // can write additional data to the output stream here - } - - - Using output As FileStream = File.Create(fileToCompress & ".zlib") - Using input As Stream = File.OpenRead(fileToCompress) - Using compressor As Stream = New ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True) - Dim buffer As Byte() = New Byte(4096) {} - Dim n As Integer = -1 - Do While (n <> 0) - If (n > 0) Then - compressor.Write(buffer, 0, n) - End If - n = input.Read(buffer, 0, buffer.Length) - Loop - End Using - End Using - ' can write additional data to the output stream here. - End Using - - - - The stream which will be read or written. - - Indicates whether the ZlibStream will compress or decompress. - - - true if the application would like the stream to remain open after - inflation/deflation. - - - - A tuning knob to trade speed for effectiveness. This parameter is - effective only when mode is CompressionMode.Compress. - - - - - This property sets the flush behavior on the stream. - Sorry, though, not sure exactly how to describe all the various settings. - - - - - The size of the working buffer for the compression codec. - - - - - The working buffer is used for all stream operations. The default size is - 1024 bytes. The minimum size is 128 bytes. You may get better performance - with a larger buffer. Then again, you might not. You would have to test - it. - - - - Set this before the first call to Read() or Write() on the - stream. If you try to set it afterwards, it will throw. - - - - - Returns the total number of bytes input so far. - - - Returns the total number of bytes output so far. - - - - Dispose the stream. - - - - This may or may not result in a Close() call on the captive - stream. See the constructors that have a leaveOpen parameter - for more information. - - - This method may be invoked in two distinct scenarios. If disposing - == true, the method has been called directly or indirectly by a - user's code, for example via the public Dispose() method. In this - case, both managed and unmanaged resources can be referenced and - disposed. If disposing == false, the method has been called by the - runtime from inside the object finalizer and this method should not - reference other objects; in that case only unmanaged resources must - be referenced or disposed. - - - - indicates whether the Dispose method was invoked by user code. - - - - - Indicates whether the stream can be read. - - - The return value depends on whether the captive stream supports reading. - - - - - Indicates whether the stream supports Seek operations. - - - Always returns false. - - - - - Indicates whether the stream can be written. - - - The return value depends on whether the captive stream supports writing. - - - - - Flush the stream. - - - - - Reading this property always throws a . - - - - - The position of the stream pointer. - - - - Setting this property always throws a . Reading will return the total bytes - written out, if used in writing, or the total bytes read in, if used in - reading. The count may refer to compressed bytes or uncompressed bytes, - depending on how you've used the stream. - - - - - Read data from the stream. - - - - - - If you wish to use the ZlibStream to compress data while reading, - you can create a ZlibStream with CompressionMode.Compress, - providing an uncompressed data stream. Then call Read() on that - ZlibStream, and the data read will be compressed. If you wish to - use the ZlibStream to decompress data while reading, you can create - a ZlibStream with CompressionMode.Decompress, providing a - readable compressed data stream. Then call Read() on that - ZlibStream, and the data will be decompressed as it is read. - - - - A ZlibStream can be used for Read() or Write(), but - not both. - - - - - - The buffer into which the read data should be placed. - - - the offset within that data array to put the first byte read. - - the number of bytes to read. - - the number of bytes read - - - - Calling this method always throws a . - - - The offset to seek to.... - IF THIS METHOD ACTUALLY DID ANYTHING. - - - The reference specifying how to apply the offset.... IF - THIS METHOD ACTUALLY DID ANYTHING. - - - nothing. This method always throws. - - - - Calling this method always throws a . - - - The new value for the stream length.... IF - THIS METHOD ACTUALLY DID ANYTHING. - - - - - Write data to the stream. - - - - - - If you wish to use the ZlibStream to compress data while writing, - you can create a ZlibStream with CompressionMode.Compress, - and a writable output stream. Then call Write() on that - ZlibStream, providing uncompressed data as input. The data sent to - the output stream will be the compressed form of the data written. If you - wish to use the ZlibStream to decompress data while writing, you - can create a ZlibStream with CompressionMode.Decompress, and a - writable output stream. Then call Write() on that stream, - providing previously compressed data. The data sent to the output stream - will be the decompressed form of the data written. - - - - A ZlibStream can be used for Read() or Write(), but not both. - - - The buffer holding data to write to the stream. - the offset within that data array to find the first byte to write. - the number of bytes to write. - - - - Compress a string into a byte array using ZLIB. - - - - Uncompress it with . - - - - - - - - A string to compress. The string will first be encoded - using UTF8, then compressed. - - - The string in compressed form - - - - Compress a byte array into a new byte array using ZLIB. - - - - Uncompress it with . - - - - - - - A buffer to compress. - - - The data in compressed form - - - - Uncompress a ZLIB-compressed byte array into a single string. - - - - - - - A buffer containing ZLIB-compressed data. - - - The uncompressed string - - - - Uncompress a ZLIB-compressed byte array into a byte array. - - - - - - - A buffer containing ZLIB-compressed data. - - - The data in uncompressed form - - - - This class exposes a set of COM-accessible wrappers for static - methods available on the ZipFile class. You don't need this - class unless you are using DotNetZip from a COM environment. - - - - - A wrapper for ZipFile.IsZipFile(string) - - The filename to of the zip file to check. - true if the file contains a valid zip file. - - - - A wrapper for ZipFile.IsZipFile(string, bool) - - - We cannot use "overloaded" Method names in COM interop. - So, here, we use a unique name. - - The filename to of the zip file to check. - true if the file contains a valid zip file. - - - - A wrapper for ZipFile.CheckZip(string) - - The filename to of the zip file to check. - - true if the named zip file checks OK. Otherwise, false. - - - - A COM-friendly wrapper for the static method . - - - The filename to of the zip file to check. - - The password to check. - - true if the named zip file checks OK. Otherwise, false. - - - - A wrapper for ZipFile.FixZipDirectory(string) - - The filename to of the zip file to fix. - - - - A wrapper for ZipFile.LibraryVersion - - - the version number on the DotNetZip assembly, formatted as a string. - - - - - An enum that provides the various encryption algorithms supported by this - library. - - - - - - PkzipWeak implies the use of Zip 2.0 encryption, which is known to be - weak and subvertible. - - - - A note on interoperability: Values of PkzipWeak and None are - specified in PKWARE's zip - specification, and are considered to be "standard". Zip archives - produced using these options will be interoperable with many other zip tools - and libraries, including Windows Explorer. - - - - Values of WinZipAes128 and WinZipAes256 are not part of the Zip - specification, but rather imply the use of a vendor-specific extension from - WinZip. If you want to produce interoperable Zip archives, do not use these - values. For example, if you produce a zip archive using WinZipAes256, you - will be able to open it in Windows Explorer on Windows XP and Vista, but you - will not be able to extract entries; trying this will lead to an "unspecified - error". For this reason, some people have said that a zip archive that uses - WinZip's AES encryption is not actually a zip archive at all. A zip archive - produced this way will be readable with the WinZip tool (Version 11 and - beyond). - - - - There are other third-party tools and libraries, both commercial and - otherwise, that support WinZip's AES encryption. These will be able to read - AES-encrypted zip archives produced by DotNetZip, and conversely applications - that use DotNetZip to read zip archives will be able to read AES-encrypted - archives produced by those tools or libraries. Consult the documentation for - those other tools and libraries to find out if WinZip's AES encryption is - supported. - - - - In case you care: According to the WinZip specification, the - actual AES key used is derived from the via an - algorithm that complies with RFC 2898, using an iteration - count of 1000. The algorithm is sometimes referred to as PBKDF2, which stands - for "Password Based Key Derivation Function #2". - - - - A word about password strength and length: The AES encryption technology is - very good, but any system is only as secure as the weakest link. If you want - to secure your data, be sure to use a password that is hard to guess. To make - it harder to guess (increase its "entropy"), you should make it longer. If - you use normal characters from an ASCII keyboard, a password of length 20 will - be strong enough that it will be impossible to guess. For more information on - that, I'd encourage you to read this - article. - - - - - - - No encryption at all. - - - - - Traditional or Classic pkzip encryption. - - - - - WinZip AES encryption (128 key bits). - - - - - WinZip AES encryption (256 key bits). - - - - - An encryption algorithm that is not supported by DotNetZip. - - - - - Delegate in which the application writes the ZipEntry content for the named entry. - - - The name of the entry that must be written. - The stream to which the entry data should be written. - - - When you add an entry and specify a WriteDelegate, via , the application - code provides the logic that writes the entry data directly into the zip file. - - - - - This example shows how to define a WriteDelegate that obtains a DataSet, and then - writes the XML for the DataSet into the zip archive. There's no need to - save the XML to a disk file first. - - - private void WriteEntry (String filename, Stream output) - { - DataSet ds1 = ObtainDataSet(); - ds1.WriteXml(output); - } - - private void Run() - { - using (var zip = new ZipFile()) - { - zip.AddEntry(zipEntryName, WriteEntry); - zip.Save(zipFileName); - } - } - - - - Private Sub WriteEntry (ByVal filename As String, ByVal output As Stream) - DataSet ds1 = ObtainDataSet() - ds1.WriteXml(stream) - End Sub - - Public Sub Run() - Using zip = New ZipFile - zip.AddEntry(zipEntryName, New WriteDelegate(AddressOf WriteEntry)) - zip.Save(zipFileName) - End Using - End Sub - - - - - - - Delegate in which the application opens the stream, just-in-time, for the named entry. - - - - The name of the ZipEntry that the application should open the stream for. - - - - When you add an entry via , the application code provides the logic that - opens and closes the stream for the given ZipEntry. - - - - - - - Delegate in which the application closes the stream, just-in-time, for the named entry. - - - - The name of the ZipEntry that the application should close the stream for. - - - The stream to be closed. - - - When you add an entry via , the application code provides the logic that - opens and closes the stream for the given ZipEntry. - - - - - - - Delegate for the callback by which the application tells the - library the CompressionLevel to use for a file. - - - - - Using this callback, the application can, for example, specify that - previously-compressed files (.mp3, .png, .docx, etc) should use a - CompressionLevel of None, or can set the compression level based - on any other factor. - - - - - - - In an EventArgs type, indicates which sort of progress event is being - reported. - - - There are events for reading, events for saving, and events for - extracting. This enumeration allows a single EventArgs type to be sued to - describe one of multiple subevents. For example, a SaveProgress event is - invoked before, after, and during the saving of a single entry. The value - of an enum with this type, specifies which event is being triggered. The - same applies to Extraction, Reading and Adding events. - - - - - Indicates that a Add() operation has started. - - - - - Indicates that an individual entry in the archive has been added. - - - - - Indicates that a Add() operation has completed. - - - - - Indicates that a Read() operation has started. - - - - - Indicates that an individual entry in the archive is about to be read. - - - - - Indicates that an individual entry in the archive has just been read. - - - - - Indicates that a Read() operation has completed. - - - - - The given event reports the number of bytes read so far - during a Read() operation. - - - - - Indicates that a Save() operation has started. - - - - - Indicates that an individual entry in the archive is about to be written. - - - - - Indicates that an individual entry in the archive has just been saved. - - - - - Indicates that a Save() operation has completed. - - - - - Indicates that the zip archive has been created in a - temporary location during a Save() operation. - - - - - Indicates that the temporary file is about to be renamed to the final archive - name during a Save() operation. - - - - - Indicates that the temporary file is has just been renamed to the final archive - name during a Save() operation. - - - - - Indicates that the self-extracting archive has been compiled - during a Save() operation. - - - - - The given event is reporting the number of source bytes that have run through the compressor so far - during a Save() operation. - - - - - Indicates that an entry is about to be extracted. - - - - - Indicates that an entry has just been extracted. - - - - - Indicates that extraction of an entry would overwrite an existing - filesystem file. You must use - - ExtractExistingFileAction.InvokeExtractProgressEvent in the call - to ZipEntry.Extract() in order to receive this event. - - - - - The given event is reporting the number of bytes written so far for - the current entry during an Extract() operation. - - - - - Indicates that an ExtractAll operation is about to begin. - - - - - Indicates that an ExtractAll operation has completed. - - - - - Indicates that an error has occurred while saving a zip file. - This generally means the file cannot be opened, because it has been - removed, or because it is locked by another process. It can also - mean that the file cannot be Read, because of a range lock conflict. - - - - - Provides information about the progress of a save, read, or extract operation. - This is a base class; you will probably use one of the classes derived from this one. - - - - - The total number of entries to be saved or extracted. - - - - - The name of the last entry saved or extracted. - - - - - In an event handler, set this to cancel the save or extract - operation that is in progress. - - - - - The type of event being reported. - - - - - Returns the archive name associated to this event. - - - - - The number of bytes read or written so far for this entry. - - - - - Total number of bytes that will be read or written for this entry. - This number will be -1 if the value cannot be determined. - - - - - Provides information about the progress of a Read operation. - - - - - Provides information about the progress of a Add operation. - - - - - Provides information about the progress of a save operation. - - - - - Constructor for the SaveProgressEventArgs. - - the name of the zip archive. - whether this is before saving the entry, or after - The total number of entries in the zip archive. - Number of entries that have been saved. - The entry involved in the event. - - - - Number of entries saved so far. - - - - - Provides information about the progress of the extract operation. - - - - - Constructor for the ExtractProgressEventArgs. - - the name of the zip archive. - whether this is before saving the entry, or after - The total number of entries in the zip archive. - Number of entries that have been extracted. - The entry involved in the event. - The location to which entries are extracted. - - - - Number of entries extracted so far. This is set only if the - EventType is Extracting_BeforeExtractEntry or Extracting_AfterExtractEntry, and - the Extract() is occurring witin the scope of a call to ExtractAll(). - - - - - Returns the extraction target location, a filesystem path. - - - - - Provides information about the an error that occurred while zipping. - - - - - Returns the exception that occurred, if any. - - - - - Returns the name of the file that caused the exception, if any. - - - - - Issued when an ZipEntry.ExtractWithPassword() method is invoked - with an incorrect password. - - - - - Default ctor. - - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - The innerException for this exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The serialization info for the exception. - The streaming context from which to deserialize. - - - - Indicates that a read was attempted on a stream, and bad or incomplete data was - received. - - - - - Default ctor. - - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - The innerException for this exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The serialization info for the exception. - The streaming context from which to deserialize. - - - - Issued when an CRC check fails upon extracting an entry from a zip archive. - - - - - Default ctor. - - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The serialization info for the exception. - The streaming context from which to deserialize. - - - - Issued when errors occur saving a self-extracting archive. - - - - - Default ctor. - - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The serialization info for the exception. - The streaming context from which to deserialize. - - - - Indicates that an operation was attempted on a ZipFile which was not possible - given the state of the instance. For example, if you call Save() on a ZipFile - which has no filename set, you can get this exception. - - - - - Default ctor. - - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - The innerException for this exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The serialization info for the exception. - The streaming context from which to deserialize. - - - - Base class for all exceptions defined by and throw by the Zip library. - - - - - Default ctor. - - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The message in the exception. - The innerException for this exception. - - - - Come on, you know how exceptions work. Why are you looking at this documentation? - - The serialization info for the exception. - The streaming context from which to deserialize. - - - - An enum for the options when extracting an entry would overwrite an existing file. - - - - - This enum describes the actions that the library can take when an - Extract() or ExtractWithPassword() method is called to extract an - entry to a filesystem, and the extraction would overwrite an existing filesystem - file. - - - - - - - Throw an exception when extraction would overwrite an existing file. (For - COM clients, this is a 0 (zero).) - - - - - When extraction would overwrite an existing file, overwrite the file silently. - The overwrite will happen even if the target file is marked as read-only. - (For COM clients, this is a 1.) - - - - - When extraction would overwrite an existing file, don't overwrite the file, silently. - (For COM clients, this is a 2.) - - - - - When extraction would overwrite an existing file, invoke the ExtractProgress - event, using an event type of . In - this way, the application can decide, just-in-time, whether to overwrite the - file. For example, a GUI application may wish to pop up a dialog to allow - the user to choose. You may want to examine the property before making - the decision. If, after your processing in the Extract progress event, you - want to NOT extract the file, set - on the ZipProgressEventArgs.CurrentEntry to DoNotOverwrite. - If you do want to extract the file, set ZipEntry.ExtractExistingFile - to OverwriteSilently. If you want to cancel the Extraction, set - ZipProgressEventArgs.Cancel to true. Cancelling differs from using - DoNotOverwrite in that a cancel will not extract any further entries, if - there are any. (For COM clients, the value of this enum is a 3.) - - - - - Collects general purpose utility methods. - - - - private null constructor - - - - Utility routine for transforming path names from filesystem format (on Windows that means backslashes) to - a format suitable for use within zipfiles. This means trimming the volume letter and colon (if any) And - swapping backslashes for forward slashes. - - source path. - transformed path - - - - Sanitize paths in zip files. This means making sure that relative paths in a zip file don't go outside - the top directory. Entries like something/../../../../Temp/evil.txt get sanitized to Temp/evil.txt - when extracting - - A path with forward slashes as directory separator - sanitized path - - - - Finds a signature in the zip stream. This is useful for finding - the end of a zip entry, for example, or the beginning of the next ZipEntry. - - - - - Scans through 64k at a time. - - - - If the method fails to find the requested signature, the stream Position - after completion of this method is unchanged. If the method succeeds in - finding the requested signature, the stream position after completion is - direct AFTER the signature found in the stream. - - - - The stream to search - The 4-byte signature to find - The number of bytes read - - - - Create a pseudo-random filename, suitable for use as a temporary - file, and open it. - - - - This method produces a filename of the form - DotNetZip-xxxxxxxx.tmp, where xxxxxxxx is replaced by randomly - chosen characters, and creates that file. - - - - - - Workitem 7889: handle ERROR_LOCK_VIOLATION during read - - - This could be gracefully handled with an extension attribute, but - This assembly used to be built for .NET 2.0, so could not use - extension methods. - - - - - A decorator stream. It wraps another stream, and performs bookkeeping - to keep track of the stream Position. - - - - In some cases, it is not possible to get the Position of a stream, let's - say, on a write-only output stream like ASP.NET's - Response.OutputStream, or on a different write-only stream - provided as the destination for the zip by the application. In this - case, programmers can use this counting stream to count the bytes read - or written. - - - Consider the scenario of an application that saves a self-extracting - archive (SFX), that uses a custom SFX stub. - - - Saving to a filesystem file, the application would open the - filesystem file (getting a FileStream), save the custom sfx stub - into it, and then call ZipFile.Save(), specifying the same - FileStream. ZipFile.Save() does the right thing for the zipentry - offsets, by inquiring the Position of the FileStream before writing - any data, and then adding that initial offset into any ZipEntry - offsets in the zip directory. Everything works fine. - - - Now suppose the application is an ASPNET application and it saves - directly to Response.OutputStream. It's not possible for DotNetZip to - inquire the Position, so the offsets for the SFX will be wrong. - - - The workaround is for the application to use this class to wrap - HttpResponse.OutputStream, then write the SFX stub and the ZipFile - into that wrapper stream. Because ZipFile.Save() can inquire the - Position, it will then do the right thing with the offsets. - - - - - - The constructor. - - The underlying stream - - - - Gets the wrapped stream. - - - - - The count of bytes written out to the stream. - - - - - the count of bytes that have been read from the stream. - - - - - Adjust the byte count on the stream. - - - - the number of bytes to subtract from the count. - - - - - Subtract delta from the count of bytes written to the stream. - This is necessary when seeking back, and writing additional data, - as happens in some cases when saving Zip files. - - - - - - The read method. - - The buffer to hold the data read from the stream. - the offset within the buffer to copy the first byte read. - the number of bytes to read. - the number of bytes read, after decryption and decompression. - - - - Write data into the stream. - - The buffer holding data to write to the stream. - the offset within that data array to find the first byte to write. - the number of bytes to write. - - - - Whether the stream can be read. - - - - - Whether it is possible to call Seek() on the stream. - - - - - Whether it is possible to call Write() on the stream. - - - - - Flushes the underlying stream. - - - - - The length of the underlying stream. - - - - - Returns the sum of number of bytes written, plus the initial - offset before writing. - - - - - The Position of the stream. - - - - - Seek in the stream. - - the offset point to seek to - the reference point from which to seek - The new position - - - - Set the length of the underlying stream. Be careful with this! - - - the length to set on the underlying stream. - - - - This is a helper class supporting WinZip AES encryption. - This class is intended for use only by the DotNetZip library. - - - - Most uses of the DotNetZip library will not involve direct calls into - the WinZipAesCrypto class. Instead, the WinZipAesCrypto class is - instantiated and used by the ZipEntry() class when WinZip AES - encryption or decryption on an entry is employed. - - - - - A stream that encrypts as it writes, or decrypts as it reads. The - Crypto is AES in CTR (counter) mode, which is compatible with the AES - encryption employed by WinZip 12.0. - - - - The AES/CTR encryption protocol used by WinZip works like this: - - - start with a counter, initialized to zero. - - - to encrypt, take the data by 16-byte blocks. For each block: - - apply the transform to the counter - - increement the counter - - XOR the result of the transform with the plaintext to - get the ciphertext. - - compute the mac on the encrypted bytes - - when finished with all blocks, store the computed MAC. - - - to decrypt, take the data by 16-byte blocks. For each block: - - compute the mac on the encrypted bytes, - - apply the transform to the counter - - increement the counter - - XOR the result of the transform with the ciphertext to - get the plaintext. - - when finished with all blocks, compare the computed MAC against - the stored MAC - - - - - - - The constructor. - - The underlying stream - To either encrypt or decrypt. - The pre-initialized WinZipAesCrypto object. - The maximum number of bytes to read from the stream. - - - - Returns the final HMAC-SHA1-80 for the data that was encrypted. - - - - - Close the stream. - - - - - Returns true if the stream can be read. - - - - - Always returns false. - - - - - Returns true if the CryptoMode is Encrypt. - - - - - Flush the content in the stream. - - - - - Getting this property throws a NotImplementedException. - - - - - Getting or Setting this property throws a NotImplementedException. - - - - - This method throws a NotImplementedException. - - - - - This method throws a NotImplementedException. - - - - - This class implements the "traditional" or "classic" PKZip encryption, - which today is considered to be weak. On the other hand it is - ubiquitous. This class is intended for use only by the DotNetZip - library. - - - - Most uses of the DotNetZip library will not involve direct calls into - the ZipCrypto class. Instead, the ZipCrypto class is instantiated and - used by the ZipEntry() class when encryption or decryption on an entry - is employed. If for some reason you really wanted to use a weak - encryption algorithm in some other application, you might use this - library. But you would be much better off using one of the built-in - strong encryption libraries in the .NET Framework, like the AES - algorithm or SHA. - - - - - The default constructor for ZipCrypto. - - - - This class is intended for internal use by the library only. It's - probably not useful to you. Seriously. Stop reading this - documentation. It's a waste of your time. Go do something else. - Check the football scores. Go get an ice cream with a friend. - Seriously. - - - - - - From AppNote.txt: - unsigned char decrypt_byte() - local unsigned short temp - temp :=- Key(2) | 2 - decrypt_byte := (temp * (temp ^ 1)) bitshift-right 8 - end decrypt_byte - - - - - Call this method on a cipher text to render the plaintext. You must - first initialize the cipher with a call to InitCipher. - - - - - var cipher = new ZipCrypto(); - cipher.InitCipher(Password); - // Decrypt the header. This has a side effect of "further initializing the - // encryption keys" in the traditional zip encryption. - byte[] DecryptedMessage = cipher.DecryptMessage(EncryptedMessage); - - - - The encrypted buffer. - - The number of bytes to encrypt. - Should be less than or equal to CipherText.Length. - - - The plaintext. - - - - This is the converse of DecryptMessage. It encrypts the plaintext - and produces a ciphertext. - - - The plain text buffer. - - - The number of bytes to encrypt. - Should be less than or equal to plainText.Length. - - - The ciphertext. - - - - This initializes the cipher with the given password. - See AppNote.txt for details. - - - - The passphrase for encrypting or decrypting with this cipher. - - - - - Step 1 - Initializing the encryption keys - ----------------------------------------- - Start with these keys: - Key(0) := 305419896 (0x12345678) - Key(1) := 591751049 (0x23456789) - Key(2) := 878082192 (0x34567890) - - Then, initialize the keys with a password: - - loop for i from 0 to length(password)-1 - update_keys(password(i)) - end loop - - Where update_keys() is defined as: - - update_keys(char): - Key(0) := crc32(key(0),char) - Key(1) := Key(1) + (Key(0) bitwiseAND 000000ffH) - Key(1) := Key(1) * 134775813 + 1 - Key(2) := crc32(key(2),key(1) rightshift 24) - end update_keys - - Where crc32(old_crc,char) is a routine that given a CRC value and a - character, returns an updated CRC value after applying the CRC-32 - algorithm described elsewhere in this document. - - - - - After the keys are initialized, then you can use the cipher to - encrypt the plaintext. - - - - Essentially we encrypt the password with the keys, then discard the - ciphertext for the password. This initializes the keys for later use. - - - - - - - A Stream for reading and concurrently decrypting data from a zip file, - or for writing and concurrently encrypting data to a zip file. - - - - The constructor. - The underlying stream - To either encrypt or decrypt. - The pre-initialized ZipCrypto object. - - - - Represents a single entry in a ZipFile. Typically, applications get a ZipEntry - by enumerating the entries within a ZipFile, or by adding an entry to a ZipFile. - - - - - True if the referenced entry is a directory. - - - - - Provides a human-readable string with information about the ZipEntry. - - - - - Reads one entry from the zip directory structure in the zip file. - - - - The zipfile for which a directory entry will be read. From this param, the - method gets the ReadStream and the expected text encoding - (ProvisionalAlternateEncoding) which is used if the entry is not marked - UTF-8. - - - - a list of previously seen entry names; used to prevent duplicates. - - - the entry read from the archive. - - - - Returns true if the passed-in value is a valid signature for a ZipDirEntry. - - the candidate 4-byte signature value. - true, if the signature is valid according to the PKWare spec. - - - - Default constructor. - - - Applications should never need to call this directly. It is exposed to - support COM Automation environments. - - - - - The time and date at which the file indicated by the ZipEntry was - last modified. - - - - - The DotNetZip library sets the LastModified value for an entry, equal to - the Last Modified time of the file in the filesystem. If an entry is - added from a stream, the library uses System.DateTime.Now for this - value, for the given entry. - - - - This property allows the application to retrieve and possibly set the - LastModified value on an entry, to an arbitrary value. values with a - setting of DateTimeKind.Unspecified are taken to be expressed as - DateTimeKind.Local. - - - - Be aware that because of the way PKWare's - Zip specification describes how times are stored in the zip file, - the full precision of the System.DateTime datatype is not stored - for the last modified time when saving zip files. For more information on - how times are formatted, see the PKZip specification. - - - - The actual last modified time of a file can be stored in multiple ways in - the zip file, and they are not mutually exclusive: - - - - - In the so-called "DOS" format, which has a 2-second precision. Values - are rounded to the nearest even second. For example, if the time on the - file is 12:34:43, then it will be stored as 12:34:44. This first value - is accessible via the LastModified property. This value is always - present in the metadata for each zip entry. In some cases the value is - invalid, or zero. - - - - In the so-called "Windows" or "NTFS" format, as an 8-byte integer - quantity expressed as the number of 1/10 milliseconds (in other words - the number of 100 nanosecond units) since January 1, 1601 (UTC). This - format is how Windows represents file times. This time is accessible - via the ModifiedTime property. - - - - In the "Unix" format, a 4-byte quantity specifying the number of seconds since - January 1, 1970 UTC. - - - - In an older format, now deprecated but still used by some current - tools. This format is also a 4-byte quantity specifying the number of - seconds since January 1, 1970 UTC. - - - - - - Zip tools and libraries will always at least handle (read or write) the - DOS time, and may also handle the other time formats. Keep in mind that - while the names refer to particular operating systems, there is nothing in - the time formats themselves that prevents their use on other operating - systems. - - - - When reading ZIP files, the DotNetZip library reads the Windows-formatted - time, if it is stored in the entry, and sets both LastModified and - ModifiedTime to that value. When writing ZIP files, the DotNetZip - library by default will write both time quantities. It can also emit the - Unix-formatted time if desired (See .) - - - - The last modified time of the file created upon a call to - ZipEntry.Extract() may be adjusted during extraction to compensate - for differences in how the .NET Base Class Library deals with daylight - saving time (DST) versus how the Windows filesystem deals with daylight - saving time. Raymond Chen provides - some good context. - - - - In a nutshell: Daylight savings time rules change regularly. In 2007, for - example, the inception week of DST changed. In 1977, DST was in place all - year round. In 1945, likewise. And so on. Win32 does not attempt to - guess which time zone rules were in effect at the time in question. It - will render a time as "standard time" and allow the app to change to DST - as necessary. .NET makes a different choice. - - - - Compare the output of FileInfo.LastWriteTime.ToString("f") with what you - see in the Windows Explorer property sheet for a file that was last - written to on the other side of the DST transition. For example, suppose - the file was last modified on October 17, 2003, during DST but DST is not - currently in effect. Explorer's file properties reports Thursday, October - 17, 2003, 8:45:38 AM, but .NETs FileInfo reports Thursday, October 17, - 2003, 9:45 AM. - - - - Win32 says, "Thursday, October 17, 2002 8:45:38 AM PST". Note: Pacific - STANDARD Time. Even though October 17 of that year occurred during Pacific - Daylight Time, Win32 displays the time as standard time because that's - what time it is NOW. - - - - .NET BCL assumes that the current DST rules were in place at the time in - question. So, .NET says, "Well, if the rules in effect now were also in - effect on October 17, 2003, then that would be daylight time" so it - displays "Thursday, October 17, 2003, 9:45 AM PDT" - daylight time. - - - - So .NET gives a value which is more intuitively correct, but is also - potentially incorrect, and which is not invertible. Win32 gives a value - which is intuitively incorrect, but is strictly correct. - - - - Because of this funkiness, this library adds one hour to the LastModified - time on the extracted file, if necessary. That is to say, if the time in - question had occurred in what the .NET Base Class Library assumed to be - DST. This assumption may be wrong given the constantly changing DST rules, - but it is the best we can do. - - - - - - - - Ability to set Last Modified DOS time to zero - (for using with EmitTimesInWindowsFormatWhenSaving+EmitTimesInUnixFormatWhenSaving setted to false) - some flasher hardware use as marker of first binary - - - - - Last Modified time for the file represented by the entry. - - - - - - This value corresponds to the "last modified" time in the NTFS file times - as described in the Zip - specification. When getting this property, the value may be - different from . When setting the property, - the property also gets set, but with a lower - precision. - - - - Let me explain. It's going to take a while, so get - comfortable. Originally, waaaaay back in 1989 when the ZIP specification - was originally described by the esteemed Mr. Phil Katz, the dominant - operating system of the time was MS-DOS. MSDOS stored file times with a - 2-second precision, because, c'mon, who is ever going to need better - resolution than THAT? And so ZIP files, regardless of the platform on - which the zip file was created, store file times in exactly the same format that DOS used - in 1989. - - - - Since then, the ZIP spec has evolved, but the internal format for file - timestamps remains the same. Despite the fact that the way times are - stored in a zip file is rooted in DOS heritage, any program on any - operating system can format a time in this way, and most zip tools and - libraries DO - they round file times to the nearest even second and store - it just like DOS did 25+ years ago. - - - - PKWare extended the ZIP specification to allow a zip file to store what - are called "NTFS Times" and "Unix(tm) times" for a file. These are the - last write, last access, and file creation - times of a particular file. These metadata are not actually specific - to NTFS or Unix. They are tracked for each file by NTFS and by various - Unix filesystems, but they are also tracked by other filesystems, too. - The key point is that the times are formatted in the zip file - in the same way that NTFS formats the time (ticks since win32 epoch), - or in the same way that Unix formats the time (seconds since Unix - epoch). As with the DOS time, any tool or library running on any - operating system is capable of formatting a time in one of these ways - and embedding it into the zip file. - - - - These extended times are higher precision quantities than the DOS time. - As described above, the (DOS) LastModified has a precision of 2 seconds. - The Unix time is stored with a precision of 1 second. The NTFS time is - stored with a precision of 0.0000001 seconds. The quantities are easily - convertible, except for the loss of precision you may incur. - - - - A zip archive can store the {C,A,M} times in NTFS format, in Unix format, - or not at all. Often a tool running on Unix or Mac will embed the times - in Unix format (1 second precision), while WinZip running on Windows might - embed the times in NTFS format (precision of of 0.0000001 seconds). When - reading a zip file with these "extended" times, in either format, - DotNetZip represents the values with the - ModifiedTime, AccessedTime and CreationTime - properties on the ZipEntry. - - - - While any zip application or library, regardless of the platform it - runs on, could use any of the time formats allowed by the ZIP - specification, not all zip tools or libraries do support all these - formats. Storing the higher-precision times for each entry is - optional for zip files, and many tools and libraries don't use the - higher precision quantities at all. The old DOS time, represented by - , is guaranteed to be present, though it - sometimes unset. - - - - Ok, getting back to the question about how the LastModified - property relates to this ModifiedTime - property... LastModified is always set, while - ModifiedTime is not. (The other times stored in the NTFS - times extension, CreationTime and AccessedTime also - may not be set on an entry that is read from an existing zip file.) - When reading a zip file, then LastModified takes the DOS time - that is stored with the file. If the DOS time has been stored as zero - in the zipfile, then this library will use DateTime.Now for the - LastModified value. If the ZIP file was created by an evolved - tool, then there will also be higher precision NTFS or Unix times in - the zip file. In that case, this library will read those times, and - set LastModified and ModifiedTime to the same value, the - one corresponding to the last write time of the file. If there are no - higher precision times stored for the entry, then ModifiedTime - remains unset (likewise AccessedTime and CreationTime), - and LastModified keeps its DOS time. - - - - When creating zip files with this library, by default the extended time - properties (ModifiedTime, AccessedTime, and - CreationTime) are set on the ZipEntry instance, and these data are - stored in the zip archive for each entry, in NTFS format. If you add an - entry from an actual filesystem file, then the entry gets the actual file - times for that file, to NTFS-level precision. If you add an entry from a - stream, or a string, then the times get the value DateTime.Now. In - this case LastModified and ModifiedTime will be identical, - to 2 seconds of precision. You can explicitly set the - CreationTime, AccessedTime, and ModifiedTime of an - entry using the property setters. If you want to set all of those - quantities, it's more efficient to use the method. Those - changes are not made permanent in the zip file until you call or one of its cousins. - - - - When creating a zip file, you can override the default behavior of - this library for formatting times in the zip file, disabling the - embedding of file times in NTFS format or enabling the storage of file - times in Unix format, or both. You may want to do this, for example, - when creating a zip file on Windows, that will be consumed on a Mac, - by an application that is not hip to the "NTFS times" format. To do - this, use the and - properties. A valid zip - file may store the file times in both formats. But, there are no - guarantees that a program running on Mac or Linux will gracefully - handle the NTFS-formatted times when Unix times are present, or that a - non-DotNetZip-powered application running on Windows will be able to - handle file times in Unix format. DotNetZip will always do something - reasonable; other libraries or tools may not. When in doubt, test. - - - - I'll bet you didn't think one person could type so much about time, eh? - And reading it was so enjoyable, too! Well, in appreciation, maybe you - should donate? - - - - - - - - - - - Last Access time for the file represented by the entry. - - - This value may or may not be meaningful. If the ZipEntry was read from an existing - Zip archive, this information may not be available. For an explanation of why, see - . - - - - - - - - The file creation time for the file represented by the entry. - - - - This value may or may not be meaningful. If the ZipEntry was read - from an existing zip archive, and the creation time was not set on the entry - when the zip file was created, then this property may be meaningless. For an - explanation of why, see . - - - - - - - - Sets the NTFS Creation, Access, and Modified times for the given entry. - - - - - When adding an entry from a file or directory, the Creation, Access, and - Modified times for the given entry are automatically set from the - filesystem values. When adding an entry from a stream or string, the - values are implicitly set to DateTime.Now. The application may wish to - set these values to some arbitrary value, before saving the archive, and - can do so using the various setters. If you want to set all of the times, - this method is more efficient. - - - - The values you set here will be retrievable with the , and properties. - - - - When this method is called, if both and are false, then the - EmitTimesInWindowsFormatWhenSaving flag is automatically set. - - - - DateTime values provided here without a DateTimeKind are assumed to be Local Time. - - - - the creation time of the entry. - the last access time of the entry. - the last modified time of the entry. - - - - - - - - - - Specifies whether the Creation, Access, and Modified times for the given - entry will be emitted in "Windows format" when the zip archive is saved. - - - - - An application creating a zip archive can use this flag to explicitly - specify that the file times for the entry should or should not be stored - in the zip archive in the format used by Windows. The default value of - this property is true. - - - - When adding an entry from a file or directory, the Creation (), Access (), and Modified - () times for the given entry are automatically - set from the filesystem values. When adding an entry from a stream or - string, all three values are implicitly set to DateTime.Now. Applications - can also explicitly set those times by calling . - - - - PKWARE's - zip specification describes multiple ways to format these times in a - zip file. One is the format Windows applications normally use: 100ns ticks - since Jan 1, 1601 UTC. The other is a format Unix applications typically - use: seconds since January 1, 1970 UTC. Each format can be stored in an - "extra field" in the zip entry when saving the zip archive. The former - uses an extra field with a Header Id of 0x000A, while the latter uses a - header ID of 0x5455. - - - - Not all zip tools and libraries can interpret these fields. Windows - compressed folders is one that can read the Windows Format timestamps, - while I believe the Infozip - tools can read the Unix format timestamps. Although the time values are - easily convertible, subject to a loss of precision, some tools and - libraries may be able to read only one or the other. DotNetZip can read or - write times in either or both formats. - - - - The times stored are taken from , , and . - - - - This property is not mutually exclusive from the property. It is - possible that a zip entry can embed the timestamps in both forms, one - form, or neither. But, there are no guarantees that a program running on - Mac or Linux will gracefully handle NTFS Formatted times, or that a - non-DotNetZip-powered application running on Windows will be able to - handle file times in Unix format. When in doubt, test. - - - - Normally you will use the ZipFile.EmitTimesInWindowsFormatWhenSaving - property, to specify the behavior for all entries in a zip, rather than - the property on each individual entry. - - - - - - - - - - - - - Specifies whether the Creation, Access, and Modified times for the given - entry will be emitted in "Unix(tm) format" when the zip archive is saved. - - - - - An application creating a zip archive can use this flag to explicitly - specify that the file times for the entry should or should not be stored - in the zip archive in the format used by Unix. By default this flag is - false, meaning the Unix-format times are not stored in the zip - archive. - - - - When adding an entry from a file or directory, the Creation (), Access (), and Modified - () times for the given entry are automatically - set from the filesystem values. When adding an entry from a stream or - string, all three values are implicitly set to DateTime.Now. Applications - can also explicitly set those times by calling . - - - - PKWARE's - zip specification describes multiple ways to format these times in a - zip file. One is the format Windows applications normally use: 100ns ticks - since Jan 1, 1601 UTC. The other is a format Unix applications typically - use: seconds since Jan 1, 1970 UTC. Each format can be stored in an - "extra field" in the zip entry when saving the zip archive. The former - uses an extra field with a Header Id of 0x000A, while the latter uses a - header ID of 0x5455. - - - - Not all tools and libraries can interpret these fields. Windows - compressed folders is one that can read the Windows Format timestamps, - while I believe the Infozip - tools can read the Unix format timestamps. Although the time values are - easily convertible, subject to a loss of precision, some tools and - libraries may be able to read only one or the other. DotNetZip can read or - write times in either or both formats. - - - - The times stored are taken from , , and . - - - - This property is not mutually exclusive from the property. It is - possible that a zip entry can embed the timestamps in both forms, one - form, or neither. But, there are no guarantees that a program running on - Mac or Linux will gracefully handle NTFS Formatted times, or that a - non-DotNetZip-powered application running on Windows will be able to - handle file times in Unix format. When in doubt, test. - - - - Normally you will use the ZipFile.EmitTimesInUnixFormatWhenSaving - property, to specify the behavior for all entries, rather than the - property on each individual entry. - - - - - - - - - - - - - The type of timestamp attached to the ZipEntry. - - - - This property is valid only for a ZipEntry that was read from a zip archive. - It indicates the type of timestamp attached to the entry. - - - - - - - - The file attributes for the entry. - - - - - - The attributes in NTFS include - ReadOnly, Archive, Hidden, System, and Indexed. When adding a - ZipEntry to a ZipFile, these attributes are set implicitly when - adding an entry from the filesystem. When adding an entry from a stream - or string, the Attributes are not set implicitly. Regardless of the way - an entry was added to a ZipFile, you can set the attributes - explicitly if you like. - - - - When reading a ZipEntry from a ZipFile, the attributes are - set according to the data stored in the ZipFile. If you extract the - entry from the archive to a filesystem file, DotNetZip will set the - attributes on the resulting file accordingly. - - - - The attributes can be set explicitly by the application. For example the - application may wish to set the FileAttributes.ReadOnly bit for all - entries added to an archive, so that on unpack, this attribute will be set - on the extracted file. Any changes you make to this property are made - permanent only when you call a Save() method on the ZipFile - instance that contains the ZipEntry. - - - - For example, an application may wish to zip up a directory and set the - ReadOnly bit on every file in the archive, so that upon later extraction, - the resulting files will be marked as ReadOnly. Not every extraction tool - respects these attributes, but if you unpack with DotNetZip, as for - example in a self-extracting archive, then the attributes will be set as - they are stored in the ZipFile. - - - - These attributes may not be interesting or useful if the resulting archive - is extracted on a non-Windows platform. How these attributes get used - upon extraction depends on the platform and tool used. - - - - - - - The name of the filesystem file, referred to by the ZipEntry. - - - - - This property specifies the thing-to-be-zipped on disk, and is set only - when the ZipEntry is being created from a filesystem file. If the - ZipFile is instantiated by reading an existing .zip archive, then - the LocalFileName will be null (Nothing in VB). - - - - When it is set, the value of this property may be different than , which is the path used in the archive itself. If you - call Zip.AddFile("foop.txt", AlternativeDirectory), then the path - used for the ZipEntry within the zip archive will be different - than this path. - - - - If the entry is being added from a stream, then this is null (Nothing in VB). - - - - - - - - The name of the file contained in the ZipEntry. - - - - - - This is the name of the entry in the ZipFile itself. When creating - a zip archive, if the ZipEntry has been created from a filesystem - file, via a call to or , or a related overload, the value - of this property is derived from the name of that file. The - FileName property does not include drive letters, and may include a - different directory path, depending on the value of the - directoryPathInArchive parameter used when adding the entry into - the ZipFile. - - - - In some cases there is no related filesystem file - for example when a - ZipEntry is created using or one of the similar overloads. In this case, the value of - this property is derived from the fileName and the directory path passed - to that method. - - - - When reading a zip file, this property takes the value of the entry name - as stored in the zip file. If you extract such an entry, the extracted - file will take the name given by this property. - - - - Applications can set this property when creating new zip archives or when - reading existing archives. When setting this property, the actual value - that is set will replace backslashes with forward slashes, in accordance - with the Zip - specification, for compatibility with Unix(tm) and ... get - this.... Amiga! - - - - If an application reads a ZipFile via or a related overload, and then explicitly - sets the FileName on an entry contained within the ZipFile, and - then calls , the application will effectively - rename the entry within the zip archive. - - - - If an application sets the value of FileName, then calls - Extract() on the entry, the entry is extracted to a file using the - newly set value as the filename. The FileName value is made - permanent in the zip archive only after a call to one of the - ZipFile.Save() methods on the ZipFile that contains the - ZipEntry. - - - - If an application attempts to set the FileName to a value that - would result in a duplicate entry in the ZipFile, an exception is - thrown. - - - - When a ZipEntry is contained within a ZipFile, applications - cannot rename the entry within the context of a foreach (For - Each in VB) loop, because of the way the ZipFile stores - entries. If you need to enumerate through all the entries and rename one - or more of them, use ZipFile.EntriesSorted as the - collection. See also, ZipFile.GetEnumerator(). - - - - - - - The stream that provides content for the ZipEntry. - - - - - - The application can use this property to set the input stream for an - entry on a just-in-time basis. Imagine a scenario where the application - creates a ZipFile comprised of content obtained from hundreds of - files, via calls to AddFile(). The DotNetZip library opens streams - on these files on a just-in-time basis, only when writing the entry out to - an external store within the scope of a ZipFile.Save() call. Only - one input stream is opened at a time, as each entry is being written out. - - - - Now imagine a different application that creates a ZipFile - with content obtained from hundreds of streams, added through . Normally the - application would supply an open stream to that call. But when large - numbers of streams are being added, this can mean many open streams at one - time, unnecessarily. - - - - To avoid this, call and specify delegates that open and close the stream at - the time of Save. - - - - - Setting the value of this property when the entry was not added from a - stream (for example, when the ZipEntry was added with or , or when the entry was added by - reading an existing zip archive) will throw an exception. - - - - - - - - A flag indicating whether the InputStream was provided Just-in-time. - - - - - - When creating a zip archive, an application can obtain content for one or - more of the ZipEntry instances from streams, using the method. At the time - of calling that method, the application can supply null as the value of - the stream parameter. By doing so, the application indicates to the - library that it will provide a stream for the entry on a just-in-time - basis, at the time one of the ZipFile.Save() methods is called and - the data for the various entries are being compressed and written out. - - - - In this case, the application can set the - property, typically within the SaveProgress event (event type: ) for that entry. - - - - The application will later want to call Close() and Dispose() on that - stream. In the SaveProgress event, when the event type is , the application can - do so. This flag indicates that the stream has been provided by the - application on a just-in-time basis and that it is the application's - responsibility to call Close/Dispose on that stream. - - - - - - - - An enum indicating the source of the ZipEntry. - - - - - The version of the zip engine needed to read the ZipEntry. - - - - - This is a readonly property, indicating the version of
the Zip - specification that the extracting tool or library must support to - extract the given entry. Generally higher versions indicate newer - features. Older zip engines obviously won't know about new features, and - won't be able to extract entries that depend on those newer features. - - - - - value - Features - - - - 20 - a basic Zip Entry, potentially using PKZIP encryption. - - - - - 45 - The ZIP64 extension is used on the entry. - - - - - 46 - File is compressed using BZIP2 compression* - - - - 50 - File is encrypted using PkWare's DES, 3DES, (broken) RC2 or RC4 - - - - 51 - File is encrypted using PKWare's AES encryption or corrected RC2 encryption. - - - - 52 - File is encrypted using corrected RC2-64 encryption** - - - - 61 - File is encrypted using non-OAEP key wrapping*** - - - - 63 - File is compressed using LZMA, PPMd+, Blowfish, or Twofish - - - - - - There are other values possible, not listed here. DotNetZip supports - regular PKZip encryption, and ZIP64 extensions. DotNetZip cannot extract - entries that require a zip engine higher than 45. - - - - This value is set upon reading an existing zip file, or after saving a zip - archive. - - - - - - The comment attached to the ZipEntry. - - - - - Each entry in a zip file can optionally have a comment associated to - it. The comment might be displayed by a zip tool during extraction, for - example. - - - - By default, the Comment is encoded in IBM437 code page. You can - specify an alternative with and - . - - - - - - - - Indicates whether the entry requires ZIP64 extensions. - - - - - - This property is null (Nothing in VB) until a Save() method on the - containing instance has been called. The property is - non-null (HasValue is true) only after a Save() method has - been called. - - - - After the containing ZipFile has been saved, the Value of this - property is true if any of the following three conditions holds: the - uncompressed size of the entry is larger than 0xFFFFFFFF; the compressed - size of the entry is larger than 0xFFFFFFFF; the relative offset of the - entry within the zip archive is larger than 0xFFFFFFFF. These quantities - are not known until a Save() is attempted on the zip archive and - the compression is applied. - - - - If none of the three conditions holds, then the Value is false. - - - - A Value of false does not indicate that the entry, as saved in the - zip archive, does not use ZIP64. It merely indicates that ZIP64 is - not required. An entry may use ZIP64 even when not required if - the property on the containing - ZipFile instance is set to , or if - the property on the containing - ZipFile instance is set to - and the output stream was not seekable. - - - - - - - - Indicates whether the entry actually used ZIP64 extensions, as it was most - recently written to the output file or stream. - - - - - - This Nullable property is null (Nothing in VB) until a Save() - method on the containing instance has been - called. HasValue is true only after a Save() method has been - called. - - - - The value of this property for a particular ZipEntry may change - over successive calls to Save() methods on the containing ZipFile, - even if the file that corresponds to the ZipEntry does not. This - may happen if other entries contained in the ZipFile expand, - causing the offset for this particular entry to exceed 0xFFFFFFFF. - - - - - - - The bitfield for the entry as defined in the zip spec. You probably - never need to look at this. - - - - - You probably do not need to concern yourself with the contents of this - property, but in case you do: - - - - - bit - meaning - - - - 0 - set if encryption is used. - - - - 1-2 - - set to determine whether normal, max, fast deflation. DotNetZip library - always leaves these bits unset when writing (indicating "normal" - deflation"), but can read an entry with any value here. - - - - - 3 - - Indicates that the Crc32, Compressed and Uncompressed sizes are zero in the - local header. This bit gets set on an entry during writing a zip file, when - it is saved to a non-seekable output stream. - - - - - - 4 - reserved for "enhanced deflating". This library doesn't do enhanced deflating. - - - - 5 - set to indicate the zip is compressed patched data. This library doesn't do that. - - - - 6 - - set if PKWare's strong encryption is used (must also set bit 1 if bit 6 is - set). This bit is not set if WinZip's AES encryption is set. - - - - 7 - not used - - - - 8 - not used - - - - 9 - not used - - - - 10 - not used - - - - 11 - - Language encoding flag (EFS). If this bit is set, the filename and comment - fields for this file must be encoded using UTF-8. This library currently - does not support UTF-8. - - - - - 12 - Reserved by PKWARE for enhanced compression. - - - - 13 - - Used when encrypting the Central Directory to indicate selected data - values in the Local Header are masked to hide their actual values. See - the section in the Zip - specification describing the Strong Encryption Specification for - details. - - - - - 14 - Reserved by PKWARE. - - - - 15 - Reserved by PKWARE. - - - - - - - - - The compression method employed for this ZipEntry. - - - - - - The - Zip specification allows a variety of compression methods. This - library supports just two: 0x08 = Deflate. 0x00 = Store (no compression), - for reading or writing. - - - - When reading an entry from an existing zipfile, the value you retrieve - here indicates the compression method used on the entry by the original - creator of the zip. When writing a zipfile, you can specify either 0x08 - (Deflate) or 0x00 (None). If you try setting something else, you will get - an exception. - - - - You may wish to set CompressionMethod to CompressionMethod.None (0) - when zipping already-compressed data like a jpg, png, or mp3 file. - This can save time and cpu cycles. - - - - When setting this property on a ZipEntry that is read from an - existing zip file, calling ZipFile.Save() will cause the new - CompressionMethod to be used on the entry in the newly saved zip file. - - - - Setting this property may have the side effect of modifying the - CompressionLevel property. If you set the CompressionMethod to a - value other than None, and CompressionLevel is previously - set to None, then CompressionLevel will be set to - Default. - - - - - - - In this example, the first entry added to the zip archive uses the default - behavior - compression is used where it makes sense. The second entry, - the MP3 file, is added to the archive without being compressed. - - using (ZipFile zip = new ZipFile(ZipFileToCreate)) - { - ZipEntry e1= zip.AddFile(@"notes\Readme.txt"); - ZipEntry e2= zip.AddFile(@"music\StopThisTrain.mp3"); - e2.CompressionMethod = CompressionMethod.None; - zip.Save(); - } - - - - Using zip As New ZipFile(ZipFileToCreate) - zip.AddFile("notes\Readme.txt") - Dim e2 as ZipEntry = zip.AddFile("music\StopThisTrain.mp3") - e2.CompressionMethod = CompressionMethod.None - zip.Save - End Using - - - - - - Sets the compression level to be used for the entry when saving the zip - archive. This applies only for CompressionMethod = DEFLATE. - - - - - When using the DEFLATE compression method, Varying the compression - level used on entries can affect the size-vs-speed tradeoff when - compression and decompressing data streams or files. - - - - If you do not set this property, the default compression level is used, - which normally gives a good balance of compression efficiency and - compression speed. In some tests, using BestCompression can - double the time it takes to compress, while delivering just a small - increase in compression efficiency. This behavior will vary with the - type of data you compress. If you are in doubt, just leave this setting - alone, and accept the default. - - - - When setting this property on a ZipEntry that is read from an - existing zip file, calling ZipFile.Save() will cause the new - CompressionLevel to be used on the entry in the newly saved zip file. - - - - Setting this property may have the side effect of modifying the - CompressionMethod property. If you set the CompressionLevel - to a value other than None, CompressionMethod will be set - to Deflate, if it was previously None. - - - - Setting this property has no effect if the CompressionMethod is something - other than Deflate or None. - - - - - - - - The compressed size of the file, in bytes, within the zip archive. - - - - When reading a ZipFile, this value is read in from the existing - zip file. When creating or updating a ZipFile, the compressed - size is computed during compression. Therefore the value on a - ZipEntry is valid after a call to Save() (or one of its - overloads) in that case. - - - - - - - The size of the file, in bytes, before compression, or after extraction. - - - - When reading a ZipFile, this value is read in from the existing - zip file. When creating or updating a ZipFile, the uncompressed - size is computed during compression. Therefore the value on a - ZipEntry is valid after a call to Save() (or one of its - overloads) in that case. - - - - - - - The ratio of compressed size to uncompressed size of the ZipEntry. - - - - - This is a ratio of the compressed size to the uncompressed size of the - entry, expressed as a double in the range of 0 to 100+. A value of 100 - indicates no compression at all. It could be higher than 100 when the - compression algorithm actually inflates the data, as may occur for small - files, or uncompressible data that is encrypted. - - - - You could format it for presentation to a user via a format string of - "{3,5:F0}%" to see it as a percentage. - - - - If the size of the original uncompressed file is 0, implying a - denominator of 0, the return value will be zero. - - - - This property is valid after reading in an existing zip file, or after - saving the ZipFile that contains the ZipEntry. You cannot know the - effect of a compression transform until you try it. - - - - - - - The 32-bit CRC (Cyclic Redundancy Check) on the contents of the ZipEntry. - - - - - You probably don't need to concern yourself with this. It is used - internally by DotNetZip to verify files or streams upon extraction. - - The value is a 32-bit - CRC using 0xEDB88320 for the polynomial. This is the same CRC-32 used in - PNG, MPEG-2, and other protocols and formats. It is a read-only property; when - creating a Zip archive, the CRC for each entry is set only after a call to - Save() on the containing ZipFile. When reading an existing zip file, the value - of this property reflects the stored CRC for the entry. - - - - - - True if the entry is a directory (not a file). - This is a readonly property on the entry. - - - - - A derived property that is true if the entry uses encryption. - - - - - This is a readonly property on the entry. When reading a zip file, - the value for the ZipEntry is determined by the data read - from the zip file. After saving a ZipFile, the value of this - property for each ZipEntry indicates whether encryption was - actually used (which will have been true if the was set and the property - was something other than . - - - - - - Set this to specify which encryption algorithm to use for the entry when - saving it to a zip archive. - - - - - - Set this property in order to encrypt the entry when the ZipFile is - saved. When setting this property, you must also set a on the entry. If you set a value other than on this property and do not set a - Password then the entry will not be encrypted. The ZipEntry - data is encrypted as the ZipFile is saved, when you call or one of its cousins on the containing - ZipFile instance. You do not need to specify the Encryption - when extracting entries from an archive. - - - - The Zip specification from PKWare defines a set of encryption algorithms, - and the data formats for the zip archive that support them, and PKWare - supports those algorithms in the tools it produces. Other vendors of tools - and libraries, such as WinZip or Xceed, typically support a - subset of the algorithms specified by PKWare. These tools can - sometimes support additional different encryption algorithms and data - formats, not specified by PKWare. The AES Encryption specified and - supported by WinZip is the most popular example. This library supports a - subset of the complete set of algorithms specified by PKWare and other - vendors. - - - - There is no common, ubiquitous multi-vendor standard for strong encryption - within zip files. There is broad support for so-called "traditional" Zip - encryption, sometimes called Zip 2.0 encryption, as specified - by PKWare, but this encryption is considered weak and - breakable. This library currently supports the Zip 2.0 "weak" encryption, - and also a stronger WinZip-compatible AES encryption, using either 128-bit - or 256-bit key strength. If you want DotNetZip to support an algorithm - that is not currently supported, call the author of this library and maybe - we can talk business. - - - - The class also has a property. In most cases you will use - that property when setting encryption. This property takes - precedence over any Encryption set on the ZipFile itself. - Typically, you would use the per-entry Encryption when most entries in the - zip archive use one encryption algorithm, and a few entries use a - different one. If all entries in the zip file use the same Encryption, - then it is simpler to just set this property on the ZipFile itself, when - creating a zip archive. - - - - Some comments on updating archives: If you read a ZipFile, you can - modify the Encryption on an encrypted entry: you can remove encryption - from an entry that was encrypted; you can encrypt an entry that was not - encrypted previously; or, you can change the encryption algorithm. The - changes in encryption are not made permanent until you call Save() on the - ZipFile. To effect changes in encryption, the entry content is - streamed through several transformations, depending on the modification - the application has requested. For example if the entry is not encrypted - and the application sets Encryption to PkzipWeak, then at - the time of Save(), the original entry is read and decompressed, - then re-compressed and encrypted. Conversely, if the original entry is - encrypted with PkzipWeak encryption, and the application sets the - Encryption property to WinZipAes128, then at the time of - Save(), the original entry is decrypted via PKZIP encryption and - decompressed, then re-compressed and re-encrypted with AES. This all - happens automatically within the library, but it can be time-consuming for - large entries. - - - - Additionally, when updating archives, it is not possible to change the - password when changing the encryption algorithm. To change both the - algorithm and the password, you need to Save() the zipfile twice. First - set the Encryption to None, then call Save(). Then set the - Encryption to the new value (not "None"), then call Save() - once again. - - - - The WinZip AES encryption algorithms are not supported on the .NET Compact - Framework. - - - - - - This example creates a zip archive that uses encryption, and then extracts - entries from the archive. When creating the zip archive, the ReadMe.txt - file is zipped without using a password or encryption. The other file - uses encryption. - - - // Create a zip archive with AES Encryption. - using (ZipFile zip = new ZipFile()) - { - zip.AddFile("ReadMe.txt") - ZipEntry e1= zip.AddFile("2008-Regional-Sales-Report.pdf"); - e1.Encryption= EncryptionAlgorithm.WinZipAes256; - e1.Password= "Top.Secret.No.Peeking!"; - zip.Save("EncryptedArchive.zip"); - } - - // Extract a zip archive that uses AES Encryption. - // You do not need to specify the algorithm during extraction. - using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) - { - // Specify the password that is used during extraction, for - // all entries that require a password: - zip.Password= "Top.Secret.No.Peeking!"; - zip.ExtractAll("extractDirectory"); - } - - - - ' Create a zip that uses Encryption. - Using zip As New ZipFile() - zip.AddFile("ReadMe.txt") - Dim e1 as ZipEntry - e1= zip.AddFile("2008-Regional-Sales-Report.pdf") - e1.Encryption= EncryptionAlgorithm.WinZipAes256 - e1.Password= "Top.Secret.No.Peeking!" - zip.Save("EncryptedArchive.zip") - End Using - - ' Extract a zip archive that uses AES Encryption. - ' You do not need to specify the algorithm during extraction. - Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) - ' Specify the password that is used during extraction, for - ' all entries that require a password: - zip.Password= "Top.Secret.No.Peeking!" - zip.ExtractAll("extractDirectory") - End Using - - - - - - Thrown in the setter if EncryptionAlgorithm.Unsupported is specified. - - - ZipEntry.Password - ZipFile.Encryption - - - - The Password to be used when encrypting a ZipEntry upon - ZipFile.Save(), or when decrypting an entry upon Extract(). - - - - - This is a write-only property on the entry. Set this to request that the - entry be encrypted when writing the zip archive, or set it to specify the - password to be used when extracting an existing entry that is encrypted. - - - - The password set here is implicitly used to encrypt the entry during the - operation, or to decrypt during the or operation. If you set - the Password on a ZipEntry after calling Save(), there is no - effect. - - - - Consider setting the property when using a - password. Answering concerns that the standard password protection - supported by all zip tools is weak, WinZip has extended the ZIP - specification with a way to use AES Encryption to protect entries in the - Zip file. Unlike the "PKZIP 2.0" encryption specified in the PKZIP - specification, AES - Encryption uses a standard, strong, tested, encryption - algorithm. DotNetZip can create zip archives that use WinZip-compatible - AES encryption, if you set the property. But, - archives created that use AES encryption may not be readable by all other - tools and libraries. For example, Windows Explorer cannot read a - "compressed folder" (a zip file) that uses AES encryption, though it can - read a zip file that uses "PKZIP encryption." - - - - The class also has a - property. This property takes precedence over any password set on the - ZipFile itself. Typically, you would use the per-entry Password when most - entries in the zip archive use one password, and a few entries use a - different password. If all entries in the zip file use the same password, - then it is simpler to just set this property on the ZipFile itself, - whether creating a zip archive or extracting a zip archive. - - - - Some comments on updating archives: If you read a ZipFile, you - cannot modify the password on any encrypted entry, except by extracting - the entry with the original password (if any), removing the original entry - via , and then adding a new - entry with a new Password. - - - - For example, suppose you read a ZipFile, and there is an encrypted - entry. Setting the Password property on that ZipEntry and then - calling Save() on the ZipFile does not update the password - on that entry in the archive. Neither is an exception thrown. Instead, - what happens during the Save() is the existing entry is copied - through to the new zip archive, in its original encrypted form. Upon - re-reading that archive, the entry can be decrypted with its original - password. - - - - If you read a ZipFile, and there is an un-encrypted entry, you can set the - Password on the entry and then call Save() on the ZipFile, and get - encryption on that entry. - - - - - - - This example creates a zip file with two entries, and then extracts the - entries from the zip file. When creating the zip file, the two files are - added to the zip file using password protection. Each entry uses a - different password. During extraction, each file is extracted with the - appropriate password. - - - // create a file with encryption - using (ZipFile zip = new ZipFile()) - { - ZipEntry entry; - entry= zip.AddFile("Declaration.txt"); - entry.Password= "123456!"; - entry = zip.AddFile("Report.xls"); - entry.Password= "1Secret!"; - zip.Save("EncryptedArchive.zip"); - } - - // extract entries that use encryption - using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) - { - ZipEntry entry; - entry = zip["Declaration.txt"]; - entry.Password = "123456!"; - entry.Extract("extractDir"); - entry = zip["Report.xls"]; - entry.Password = "1Secret!"; - entry.Extract("extractDir"); - } - - - - - Using zip As New ZipFile - Dim entry as ZipEntry - entry= zip.AddFile("Declaration.txt") - entry.Password= "123456!" - entry = zip.AddFile("Report.xls") - entry.Password= "1Secret!" - zip.Save("EncryptedArchive.zip") - End Using - - - ' extract entries that use encryption - Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) - Dim entry as ZipEntry - entry = zip("Declaration.txt") - entry.Password = "123456!" - entry.Extract("extractDir") - entry = zip("Report.xls") - entry.Password = "1Secret!" - entry.Extract("extractDir") - End Using - - - - - - - ZipFile.Password - - - - The action the library should take when extracting a file that already exists. - - - - - This property affects the behavior of the Extract methods (one of the - Extract() or ExtractWithPassword() overloads), when - extraction would would overwrite an existing filesystem file. If you do - not set this property, the library throws an exception when extracting - an entry would overwrite an existing file. - - - - This property has no effect when extracting to a stream, or when the file to be - extracted does not already exist. - - - - - - - This example shows how to set the ExtractExistingFile property in - an ExtractProgress event, in response to user input. The - ExtractProgress event is invoked if and only if the - ExtractExistingFile property was previously set to - ExtractExistingFileAction.InvokeExtractProgressEvent. - - public static void ExtractProgress(object sender, ExtractProgressEventArgs e) - { - if (e.EventType == ZipProgressEventType.Extracting_BeforeExtractEntry) - Console.WriteLine("extract {0} ", e.CurrentEntry.FileName); - - else if (e.EventType == ZipProgressEventType.Extracting_ExtractEntryWouldOverwrite) - { - ZipEntry entry = e.CurrentEntry; - string response = null; - // Ask the user if he wants overwrite the file - do - { - Console.Write("Overwrite {0} in {1} ? (y/n/C) ", entry.FileName, e.ExtractLocation); - response = Console.ReadLine(); - Console.WriteLine(); - - } while (response != null && response[0]!='Y' && - response[0]!='N' && response[0]!='C'); - - if (response[0]=='C') - e.Cancel = true; - else if (response[0]=='Y') - entry.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently; - else - entry.ExtractExistingFile= ExtractExistingFileAction.DoNotOverwrite; - } - } - - - - - - The action to take when an error is encountered while - opening or reading files as they are saved into a zip archive. - - - - - Errors can occur within a call to ZipFile.Save, as the various files contained - in a ZipFile are being saved into the zip archive. During the - Save, DotNetZip will perform a File.Open on the file - associated to the ZipEntry, and then will read the entire contents of - the file as it is zipped. Either the open or the Read may fail, because - of lock conflicts or other reasons. Using this property, you can - specify the action to take when such errors occur. - - - - Typically you will NOT set this property on individual ZipEntry - instances. Instead, you will set the ZipFile.ZipErrorAction property on - the ZipFile instance, before adding any entries to the - ZipFile. If you do this, errors encountered on behalf of any of - the entries in the ZipFile will be handled the same way. - - - - But, if you use a handler, you will want - to set this property on the ZipEntry within the handler, to - communicate back to DotNetZip what you would like to do with the - particular error. - - - - - - - - - Indicates whether the entry was included in the most recent save. - - - An entry can be excluded or skipped from a save if there is an error - opening or reading the entry. - - - - - - A callback that allows the application to specify the compression to use - for a given entry that is about to be added to the zip archive. - - - - - See - - - - - - Set to indicate whether to use UTF-8 encoding for filenames and comments. - - - - - - If this flag is set, the comment and filename for the entry will be - encoded with UTF-8, as described in the Zip - specification, if necessary. "Necessary" means, the filename or - entry comment (if any) cannot be reflexively encoded and decoded using the - default code page, IBM437. - - - - Setting this flag to true is equivalent to setting to System.Text.Encoding.UTF8. - - - - This flag has no effect or relation to the text encoding used within the - file itself. - - - - - - - The text encoding to use for the FileName and Comment on this ZipEntry, - when the default encoding is insufficient. - - - - - - Don't use this property. See . - - - - - - - Specifies the alternate text encoding used by this ZipEntry - - - - The default text encoding used in Zip files for encoding filenames and - comments is IBM437, which is something like a superset of ASCII. In - cases where this is insufficient, applications can specify an - alternate encoding. - - - When creating a zip file, the usage of the alternate encoding is - governed by the property. - Typically you would set both properties to tell DotNetZip to employ an - encoding that is not IBM437 in the zipfile you are creating. - - - Keep in mind that because the ZIP specification states that the only - valid encodings to use are IBM437 and UTF-8, if you use something - other than that, then zip tools and libraries may not be able to - successfully read the zip archive you generate. - - - The zip specification states that applications should presume that - IBM437 is in use, except when a special bit is set, which indicates - UTF-8. There is no way to specify an arbitrary code page, within the - zip file itself. When you create a zip file encoded with gb2312 or - ibm861 or anything other than IBM437 or UTF-8, then the application - that reads the zip file needs to "know" which code page to use. In - some cases, the code page used when reading is chosen implicitly. For - example, WinRar uses the ambient code page for the host desktop - operating system. The pitfall here is that if you create a zip in - Copenhagen and send it to Tokyo, the reader of the zipfile may not be - able to decode successfully. - - - - This example shows how to create a zipfile encoded with a - language-specific encoding: - - using (var zip = new ZipFile()) - { - zip.AlternateEnoding = System.Text.Encoding.GetEncoding("ibm861"); - zip.AlternateEnodingUsage = ZipOption.Always; - zip.AddFileS(arrayOfFiles); - zip.Save("Myarchive-Encoded-in-IBM861.zip"); - } - - - - - - - Describes if and when this instance should apply - AlternateEncoding to encode the FileName and Comment, when - saving. - - - - - - Indicates whether an entry is marked as a text file. Be careful when - using on this property. Unless you have a good reason, you should - probably ignore this property. - - - - - The ZIP format includes a provision for specifying whether an entry in - the zip archive is a text or binary file. This property exposes that - metadata item. Be careful when using this property: It's not clear - that this property as a firm meaning, across tools and libraries. - - - - To be clear, when reading a zip file, the property value may or may - not be set, and its value may or may not be valid. Not all entries - that you may think of as "text" entries will be so marked, and entries - marked as "text" are not guaranteed in any way to be text entries. - Whether the value is set and set correctly depends entirely on the - application that produced the zip file. - - - - There are many zip tools available, and when creating zip files, some - of them "respect" the IsText metadata field, and some of them do not. - Unfortunately, even when an application tries to do "the right thing", - it's not always clear what "the right thing" is. - - - - There's no firm definition of just what it means to be "a text file", - and the zip specification does not help in this regard. Twenty years - ago, text was ASCII, each byte was less than 127. IsText meant, all - bytes in the file were less than 127. These days, it is not the case - that all text files have all bytes less than 127. Any unicode file - may have bytes that are above 0x7f. The zip specification has nothing - to say on this topic. Therefore, it's not clear what IsText really - means. - - - - This property merely tells a reading application what is stored in the - metadata for an entry, without guaranteeing its validity or its - meaning. - - - - When DotNetZip is used to create a zipfile, it attempts to set this - field "correctly." For example, if a file ends in ".txt", this field - will be set. Your application may override that default setting. When - writing a zip file, you must set the property before calling - Save() on the ZipFile. - - - - When reading a zip file, a more general way to decide just what kind - of file is contained in a particular entry is to use the file type - database stored in the operating system. The operating system stores - a table that says, a file with .jpg extension is a JPG image file, a - file with a .xml extension is an XML document, a file with a .txt is a - pure ASCII text document, and so on. To get this information on - Windows, you - need to read and parse the registry. - - - - - using (var zip = new ZipFile()) - { - var e = zip.UpdateFile("Descriptions.mme", ""); - e.IsText = true; - zip.Save(zipPath); - } - - - - Using zip As New ZipFile - Dim e2 as ZipEntry = zip.AddFile("Descriptions.mme", "") - e.IsText= True - zip.Save(zipPath) - End Using - - - - - Provides a string representation of the instance. - a string representation of the instance. - - - - Extract the entry to the filesystem, starting at the current - working directory. - - - - This method has a bunch of overloads! One of them is sure to - be the right one for you... If you don't like these, check - out the ExtractWithPassword() methods. - - - - - - - - - This method extracts an entry from a zip file into the current - working directory. The path of the entry as extracted is the full - path as specified in the zip archive, relative to the current - working directory. After the file is extracted successfully, the - file attributes and timestamps are set. - - - - The action taken when extraction an entry would overwrite an - existing file is determined by the property. - - - - Within the call to Extract(), the content for the entry is - written into a filesystem file, and then the last modified time of the - file is set according to the property on - the entry. See the remarks the property for - some details about the last modified time. - - - - - - - Extract the entry to a file in the filesystem, using the specified - behavior when extraction would overwrite an existing file. - - - - - See the remarks on the property, for some - details about how the last modified time of the file is set after - extraction. - - - - - The action to take if extraction would overwrite an existing file. - - - - - Extracts the entry to the specified stream. - - - - - The caller can specify any write-able stream, for example a , a , or ASP.NET's - Response.OutputStream. The content will be decrypted and - decompressed as necessary. If the entry is encrypted and no password - is provided, this method will throw. - - - The position on the stream is not reset by this method before it extracts. - You may want to call stream.Seek() before calling ZipEntry.Extract(). - - - - - the stream to which the entry should be extracted. - - - - - - Extract the entry to the filesystem, starting at the specified base - directory. - - - the pathname of the base directory - - - - - - This example extracts only the entries in a zip file that are .txt files, - into a directory called "textfiles". - - using (ZipFile zip = ZipFile.Read("PackedDocuments.zip")) - { - foreach (string s1 in zip.EntryFilenames) - { - if (s1.EndsWith(".txt")) - { - zip[s1].Extract("textfiles"); - } - } - } - - - Using zip As ZipFile = ZipFile.Read("PackedDocuments.zip") - Dim s1 As String - For Each s1 In zip.EntryFilenames - If s1.EndsWith(".txt") Then - zip(s1).Extract("textfiles") - End If - Next - End Using - - - - - - - Using this method, existing entries in the filesystem will not be - overwritten. If you would like to force the overwrite of existing - files, see the property, or call - . - - - - See the remarks on the property, for some - details about how the last modified time of the created file is set. - - - - - - Extract the entry to the filesystem, starting at the specified base - directory, and using the specified behavior when extraction would - overwrite an existing file. - - - - - See the remarks on the property, for some - details about how the last modified time of the created file is set. - - - - - - String sZipPath = "Airborne.zip"; - String sFilePath = "Readme.txt"; - String sRootFolder = "Digado"; - using (ZipFile zip = ZipFile.Read(sZipPath)) - { - if (zip.EntryFileNames.Contains(sFilePath)) - { - // use the string indexer on the zip file - zip[sFileName].Extract(sRootFolder, - ExtractExistingFileAction.OverwriteSilently); - } - } - - - - Dim sZipPath as String = "Airborne.zip" - Dim sFilePath As String = "Readme.txt" - Dim sRootFolder As String = "Digado" - Using zip As ZipFile = ZipFile.Read(sZipPath) - If zip.EntryFileNames.Contains(sFilePath) - ' use the string indexer on the zip file - zip(sFilePath).Extract(sRootFolder, _ - ExtractExistingFileAction.OverwriteSilently) - End If - End Using - - - - the pathname of the base directory - - The action to take if extraction would overwrite an existing file. - - - - - Extract the entry to the filesystem, using the current working directory - and the specified password. - - - - This method has a bunch of overloads! One of them is sure to be - the right one for you... - - - - - - - - - Existing entries in the filesystem will not be overwritten. If you - would like to force the overwrite of existing files, see the property, or call - . - - - - See the remarks on the property for some - details about how the "last modified" time of the created file is - set. - - - - - In this example, entries that use encryption are extracted using a - particular password. - - using (var zip = ZipFile.Read(FilePath)) - { - foreach (ZipEntry e in zip) - { - if (e.UsesEncryption) - e.ExtractWithPassword("Secret!"); - else - e.Extract(); - } - } - - - Using zip As ZipFile = ZipFile.Read(FilePath) - Dim e As ZipEntry - For Each e In zip - If (e.UsesEncryption) - e.ExtractWithPassword("Secret!") - Else - e.Extract - End If - Next - End Using - - - The Password to use for decrypting the entry. - - - - Extract the entry to the filesystem, starting at the specified base - directory, and using the specified password. - - - - - - - - Existing entries in the filesystem will not be overwritten. If you - would like to force the overwrite of existing files, see the property, or call - . - - - - See the remarks on the property, for some - details about how the last modified time of the created file is set. - - - - The pathname of the base directory. - The Password to use for decrypting the entry. - - - - Extract the entry to a file in the filesystem, relative to the - current directory, using the specified behavior when extraction - would overwrite an existing file. - - - - - See the remarks on the property, for some - details about how the last modified time of the created file is set. - - - - The Password to use for decrypting the entry. - - - The action to take if extraction would overwrite an existing file. - - - - - Extract the entry to the filesystem, starting at the specified base - directory, and using the specified behavior when extraction would - overwrite an existing file. - - - - See the remarks on the property, for some - details about how the last modified time of the created file is set. - - - the pathname of the base directory - - The action to take if extraction would - overwrite an existing file. - - The Password to use for decrypting the entry. - - - - Extracts the entry to the specified stream, using the specified - Password. For example, the caller could extract to Console.Out, or - to a MemoryStream. - - - - - The caller can specify any write-able stream, for example a , a , or ASP.NET's - Response.OutputStream. The content will be decrypted and - decompressed as necessary. If the entry is encrypted and no password - is provided, this method will throw. - - - The position on the stream is not reset by this method before it extracts. - You may want to call stream.Seek() before calling ZipEntry.Extract(). - - - - - - the stream to which the entry should be extracted. - - - The password to use for decrypting the entry. - - - - - Opens a readable stream corresponding to the zip entry in the - archive. The stream decompresses and decrypts as necessary, as it - is read. - - - - - - DotNetZip offers a variety of ways to extract entries from a zip - file. This method allows an application to extract an entry by - reading a . - - - - The return value is of type . Use it as you would any - stream for reading. When an application calls on that stream, it will - receive data from the zip entry that is decrypted and decompressed - as necessary. - - - - CrcCalculatorStream adds one additional feature: it keeps a - CRC32 checksum on the bytes of the stream as it is read. The CRC - value is available in the property on the - CrcCalculatorStream. When the read is complete, your - application - should check this CRC against the - property on the ZipEntry to validate the content of the - ZipEntry. You don't have to validate the entry using the CRC, but - you should, to verify integrity. Check the example for how to do - this. - - - - If the entry is protected with a password, then you need to provide - a password prior to calling , either by - setting the property on the entry, or the - property on the ZipFile - itself. Or, you can use , the - overload of OpenReader that accepts a password parameter. - - - - If you want to extract entry data into a write-able stream that is - already opened, like a , do not - use this method. Instead, use . - - - - Your application may use only one stream created by OpenReader() at - a time, and you should not call other Extract methods before - completing your reads on a stream obtained from OpenReader(). This - is because there is really only one source stream for the compressed - content. A call to OpenReader() seeks in the source stream, to the - beginning of the compressed content. A subsequent call to - OpenReader() on a different entry will seek to a different position - in the source stream, as will a call to Extract() or one of its - overloads. This will corrupt the state for the decompressing stream - from the original call to OpenReader(). - - - - The OpenReader() method works only when the ZipEntry is - obtained from an instance of ZipFile. This method will throw - an exception if the ZipEntry is obtained from a . - - - - - This example shows how to open a zip archive, then read in a named - entry via a stream. After the read loop is complete, the code - compares the calculated during the read loop with the expected CRC - on the ZipEntry, to verify the extraction. - - using (ZipFile zip = new ZipFile(ZipFileToRead)) - { - ZipEntry e1= zip["Elevation.mp3"]; - using (Ionic.Zlib.CrcCalculatorStream s = e1.OpenReader()) - { - byte[] buffer = new byte[4096]; - int n, totalBytesRead= 0; - do { - n = s.Read(buffer,0, buffer.Length); - totalBytesRead+=n; - } while (n>0); - if (s.Crc32 != e1.Crc32) - throw new Exception(string.Format("The Zip Entry failed the CRC Check. (0x{0:X8}!=0x{1:X8})", s.Crc32, e1.Crc32)); - if (totalBytesRead != e1.UncompressedSize) - throw new Exception(string.Format("We read an unexpected number of bytes. ({0}!={1})", totalBytesRead, e1.UncompressedSize)); - } - } - - - Using zip As New ZipFile(ZipFileToRead) - Dim e1 As ZipEntry = zip.Item("Elevation.mp3") - Using s As Ionic.Zlib.CrcCalculatorStream = e1.OpenReader - Dim n As Integer - Dim buffer As Byte() = New Byte(4096) {} - Dim totalBytesRead As Integer = 0 - Do - n = s.Read(buffer, 0, buffer.Length) - totalBytesRead = (totalBytesRead + n) - Loop While (n > 0) - If (s.Crc32 <> e1.Crc32) Then - Throw New Exception(String.Format("The Zip Entry failed the CRC Check. (0x{0:X8}!=0x{1:X8})", s.Crc32, e1.Crc32)) - End If - If (totalBytesRead <> e1.UncompressedSize) Then - Throw New Exception(String.Format("We read an unexpected number of bytes. ({0}!={1})", totalBytesRead, e1.UncompressedSize)) - End If - End Using - End Using - - - - The Stream for reading. - - - - Opens a readable stream for an encrypted zip entry in the archive. - The stream decompresses and decrypts as necessary, as it is read. - - - - - See the documentation on the method for - full details. This overload allows the application to specify a - password for the ZipEntry to be read. - - - - The password to use for decrypting the entry. - The Stream for reading. - - - - Pass in either basedir or s, but not both. - In other words, you can extract to a stream or to a directory (filesystem), but not both! - The Password param is required for encrypted entries. - - - - - Extract to a stream - In other words, you can extract to a stream or to a directory (filesystem), but not both! - The Password param is required for encrypted entries. - - - - - Validates that the args are consistent; returning whether the caller can return - because it's done, or not (caller should continue) - - - - - Validates that the args are consistent; returning whether the caller can return - because it's done, or not (caller should continue) - - - - - Reads one ZipEntry from the given stream. The content for - the entry does not get decompressed or decrypted. This method - basically reads metadata, and seeks. - - the ZipContainer this entry belongs to. - - true of this is the first entry being read from the stream. - - the ZipEntry read from the stream. - - - - Finds a particular segment in the given extra field. - This is used when modifying a previously-generated - extra field, in particular when removing the AES crypto - segment in the extra field. - - - - - At current cursor position in the stream, read the extra - field, and set the properties on the ZipEntry instance - appropriately. This can be called when processing the - Extra field in the Central Directory, or in the local - header. - - - - - generate and return a byte array that encodes the filename - for the entry. - - - - side effects: generate and store into _CommentBytes the - byte array for any comment attached to the entry. Also - sets _actualEncoding to indicate the actual encoding - used. The same encoding is used for both filename and - comment. - - - - - - Stores the position of the entry source stream, or, if the position is - already stored, seeks to that position. - - - - - This method is called in prep for reading the source stream. If PKZIP - encryption is used, then we need to calc the CRC32 before doing the - encryption, because the CRC is used in the 12th byte of the PKZIP - encryption header. So, we need to be able to seek backward in the source - when saving the ZipEntry. This method is called from the place that - calculates the CRC, and also from the method that does the encryption of - the file data. - - - - The first time through, this method sets the _sourceStreamOriginalPosition - field. Subsequent calls to this method seek to that position. - - - - - - Copy metadata that may have been changed by the app. We do this when - resetting the zipFile instance. If the app calls Save() on a ZipFile, then - tries to party on that file some more, we may need to Reset() it , which - means re-reading the entries and then copying the metadata. I think. - - - - - Set the input stream and get its length, if possible. The length is - used for progress updates, AND, to allow an optimization in case of - a stream/file of zero length. In that case we skip the Encrypt and - compression Stream. (like DeflateStream or BZip2OutputStream) - - - - - Prepare the given stream for output - wrap it in a CountingStream, and - then in a CRC stream, and an encryptor and deflator as appropriate. - - - - Previously this was used in ZipEntry.Write(), but in an effort to - introduce some efficiencies in that method I've refactored to put the - code inline. This method still gets called by ZipOutputStream. - - - - - - An enum that specifies the type of timestamp available on the ZipEntry. - - - - - - The last modified time of a file can be stored in multiple ways in - a zip file, and they are not mutually exclusive: - - - - - In the so-called "DOS" format, which has a 2-second precision. Values - are rounded to the nearest even second. For example, if the time on the - file is 12:34:43, then it will be stored as 12:34:44. This first value - is accessible via the LastModified property. This value is always - present in the metadata for each zip entry. In some cases the value is - invalid, or zero. - - - - In the so-called "Windows" or "NTFS" format, as an 8-byte integer - quantity expressed as the number of 1/10 milliseconds (in other words - the number of 100 nanosecond units) since January 1, 1601 (UTC). This - format is how Windows represents file times. This time is accessible - via the ModifiedTime property. - - - - In the "Unix" format, a 4-byte quantity specifying the number of seconds since - January 1, 1970 UTC. - - - - In an older format, now deprecated but still used by some current - tools. This format is also a 4-byte quantity specifying the number of - seconds since January 1, 1970 UTC. - - - - - - This bit field describes which of the formats were found in a ZipEntry that was read. - - - - - - - Default value. - - - - - A DOS timestamp with 2-second precision. - - - - - A Windows timestamp with 100-ns precision. - - - - - A Unix timestamp with 1-second precision. - - - - - A Unix timestamp with 1-second precision, stored in InfoZip v1 format. This - format is outdated and is supported for reading archives only. - - - - - The method of compression to use for a particular ZipEntry. - - - - PKWare's - ZIP Specification describes a number of distinct - cmopression methods that can be used within a zip - file. DotNetZip supports a subset of them. - - - - - No compression at all. For COM environments, the value is 0 (zero). - - - - - DEFLATE compression, as described in IETF RFC - 1951. This is the "normal" compression used in zip - files. For COM environments, the value is 8. - - - - - BZip2 compression, a compression algorithm developed by Julian Seward. - For COM environments, the value is 12. - - - - - An enum that specifies the source of the ZipEntry. - - - - - Default value. Invalid on a bonafide ZipEntry. - - - - - The entry was instantiated by calling AddFile() or another method that - added an entry from the filesystem. - - - - - The entry was instantiated via or - . - - - - - The ZipEntry was instantiated by reading a zipfile. - - - - - The content for the ZipEntry will be or was provided by the WriteDelegate. - - - - - The content for the ZipEntry will be obtained from the stream dispensed by the OpenDelegate. - The entry was instantiated via . - - - - - The content for the ZipEntry will be or was obtained from a ZipOutputStream. - - - - - An enum providing the options when an error occurs during opening or reading - of a file or directory that is being saved to a zip file. - - - - - This enum describes the actions that the library can take when an error occurs - opening or reading a file, as it is being saved into a Zip archive. - - - - In some cases an error will occur when DotNetZip tries to open a file to be - added to the zip archive. In other cases, an error might occur after the - file has been successfully opened, while DotNetZip is reading the file. - - - - The first problem might occur when calling AddDirectory() on a directory - that contains a Clipper .dbf file; the file is locked by Clipper and - cannot be opened by another process. An example of the second problem is - the ERROR_LOCK_VIOLATION that results when a file is opened by another - process, but not locked, and a range lock has been taken on the file. - Microsoft Outlook takes range locks on .PST files. - - - - - - Throw an exception when an error occurs while zipping. This is the default - behavior. (For COM clients, this is a 0 (zero).) - - - - - When an error occurs during zipping, for example a file cannot be opened, - skip the file causing the error, and continue zipping. (For COM clients, - this is a 1.) - - - - - When an error occurs during zipping, for example a file cannot be opened, - retry the operation that caused the error. Be careful with this option. If - the error is not temporary, the library will retry forever. (For COM - clients, this is a 2.) - - - - - When an error occurs, invoke the zipError event. The event type used is - . A typical use of this option: - a GUI application may wish to pop up a dialog to allow the user to view the - error that occurred, and choose an appropriate action. After your - processing in the error event, if you want to skip the file, set on the - ZipProgressEventArgs.CurrentEntry to Skip. If you want the - exception to be thrown, set ZipErrorAction on the CurrentEntry - to Throw. If you want to cancel the zip, set - ZipProgressEventArgs.Cancel to true. Cancelling differs from using - Skip in that a cancel will not save any further entries, if there are any. - (For COM clients, the value of this enum is a 3.) - - - - - The ZipFile type represents a zip archive file. - - - - - This is the main type in the DotNetZip class library. This class reads and - writes zip files, as defined in the specification - for zip files described by PKWare. The compression for this - implementation is provided by a managed-code version of Zlib, included with - DotNetZip in the classes in the Ionic.Zlib namespace. - - - - This class provides a general purpose zip file capability. Use it to read, - create, or update zip files. When you want to create zip files using a - Stream type to write the zip file, you may want to consider the class. - - - - Both the ZipOutputStream class and the ZipFile class can - be used to create zip files. Both of them support many of the common zip - features, including Unicode, different compression methods and levels, - and ZIP64. They provide very similar performance when creating zip - files. - - - - The ZipFile class is generally easier to use than - ZipOutputStream and should be considered a higher-level interface. For - example, when creating a zip file via calls to the PutNextEntry() and - Write() methods on the ZipOutputStream class, the caller is - responsible for opening the file, reading the bytes from the file, writing - those bytes into the ZipOutputStream, setting the attributes on the - ZipEntry, and setting the created, last modified, and last accessed - timestamps on the zip entry. All of these things are done automatically by a - call to ZipFile.AddFile(). - For this reason, the ZipOutputStream is generally recommended for use - only when your application emits arbitrary data, not necessarily data from a - filesystem file, directly into a zip file, and does so using a Stream - metaphor. - - - - Aside from the differences in programming model, there are other - differences in capability between the two classes. - - - - - ZipFile can be used to read and extract zip files, in addition to - creating zip files. ZipOutputStream cannot read zip files. If you want - to use a stream to read zip files, check out the class. - - - - ZipOutputStream does not support the creation of segmented or spanned - zip files. - - - - ZipOutputStream cannot produce a self-extracting archive. - - - - - Be aware that the ZipFile class implements the interface. In order for ZipFile to - produce a valid zip file, you use use it within a using clause (Using - in VB), or call the Dispose() method explicitly. See the examples - for how to employ a using clause. - - - - - - - Adds an item, either a file or a directory, to a zip file archive. - - - - - This method is handy if you are adding things to zip archive and don't - want to bother distinguishing between directories or files. Any files are - added as single entries. A directory added through this method is added - recursively: all files and subdirectories contained within the directory - are added to the ZipFile. - - - - The name of the item may be a relative path or a fully-qualified - path. Remember, the items contained in ZipFile instance get written - to the disk only when you call or a similar - save method. - - - - The directory name used for the file within the archive is the same - as the directory name (potentially a relative path) specified in the - . - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - - - - This method has two overloads. - - the name of the file or directory to add. - - The ZipEntry added. - - - - Adds an item, either a file or a directory, to a zip file archive, - explicitly specifying the directory path to be used in the archive. - - - - - If adding a directory, the add is recursive on all files and - subdirectories contained within it. - - - The name of the item may be a relative path or a fully-qualified path. - The item added by this call to the ZipFile is not read from the - disk nor written to the zip file archive until the application calls - Save() on the ZipFile. - - - - This version of the method allows the caller to explicitly specify the - directory path to be used in the archive, which would override the - "natural" path of the filesystem file. - - - - Encryption will be used on the file data if the Password has - been set on the ZipFile object, prior to calling this method. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - Thrown if the file or directory passed in does not exist. - - - the name of the file or directory to add. - - - - The name of the directory path to use within the zip archive. This path - need not refer to an extant directory in the current filesystem. If the - files within the zip are later extracted, this is the path used for the - extracted file. Passing null (Nothing in VB) will use the - path on the fileOrDirectoryName. Passing the empty string ("") will - insert the item at the root path within the archive. - - - - - - - - This example shows how to zip up a set of files into a flat hierarchy, - regardless of where in the filesystem the files originated. The resulting - zip archive will contain a toplevel directory named "flat", which itself - will contain files Readme.txt, MyProposal.docx, and Image1.jpg. A - subdirectory under "flat" called SupportFiles will contain all the files - in the "c:\SupportFiles" directory on disk. - - - String[] itemnames= { - "c:\\fixedContent\\Readme.txt", - "MyProposal.docx", - "c:\\SupportFiles", // a directory - "images\\Image1.jpg" - }; - - try - { - using (ZipFile zip = new ZipFile()) - { - for (int i = 1; i < itemnames.Length; i++) - { - // will add Files or Dirs, recurses and flattens subdirectories - zip.AddItem(itemnames[i],"flat"); - } - zip.Save(ZipToCreate); - } - } - catch (System.Exception ex1) - { - System.Console.Error.WriteLine("exception: {0}", ex1); - } - - - - Dim itemnames As String() = _ - New String() { "c:\fixedContent\Readme.txt", _ - "MyProposal.docx", _ - "SupportFiles", _ - "images\Image1.jpg" } - Try - Using zip As New ZipFile - Dim i As Integer - For i = 1 To itemnames.Length - 1 - ' will add Files or Dirs, recursing and flattening subdirectories. - zip.AddItem(itemnames(i), "flat") - Next i - zip.Save(ZipToCreate) - End Using - Catch ex1 As Exception - Console.Error.WriteLine("exception: {0}", ex1.ToString()) - End Try - - - The ZipEntry added. - - - - Adds a File to a Zip file archive. - - - - - This call collects metadata for the named file in the filesystem, - including the file attributes and the timestamp, and inserts that metadata - into the resulting ZipEntry. Only when the application calls Save() on - the ZipFile, does DotNetZip read the file from the filesystem and - then write the content to the zip file archive. - - - - This method will throw an exception if an entry with the same name already - exists in the ZipFile. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - - In this example, three files are added to a Zip archive. The ReadMe.txt - file will be placed in the root of the archive. The .png file will be - placed in a folder within the zip called photos\personal. The pdf file - will be included into a folder within the zip called Desktop. - - - try - { - using (ZipFile zip = new ZipFile()) - { - zip.AddFile("c:\\photos\\personal\\7440-N49th.png"); - zip.AddFile("c:\\Desktop\\2008-Regional-Sales-Report.pdf"); - zip.AddFile("ReadMe.txt"); - - zip.Save("Package.zip"); - } - } - catch (System.Exception ex1) - { - System.Console.Error.WriteLine("exception: " + ex1); - } - - - - Try - Using zip As ZipFile = New ZipFile - zip.AddFile("c:\photos\personal\7440-N49th.png") - zip.AddFile("c:\Desktop\2008-Regional-Sales-Report.pdf") - zip.AddFile("ReadMe.txt") - zip.Save("Package.zip") - End Using - Catch ex1 As Exception - Console.Error.WriteLine("exception: {0}", ex1.ToString) - End Try - - - - This method has two overloads. - - - - - - - The name of the file to add. It should refer to a file in the filesystem. - The name of the file may be a relative path or a fully-qualified path. - - The ZipEntry corresponding to the File added. - - - - Adds a File to a Zip file archive, potentially overriding the path to be - used within the zip archive. - - - - - The file added by this call to the ZipFile is not written to the - zip file archive until the application calls Save() on the ZipFile. - - - - This method will throw an exception if an entry with the same name already - exists in the ZipFile. - - - - This version of the method allows the caller to explicitly specify the - directory path to be used in the archive. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - - In this example, three files are added to a Zip archive. The ReadMe.txt - file will be placed in the root of the archive. The .png file will be - placed in a folder within the zip called images. The pdf file will be - included into a folder within the zip called files\docs, and will be - encrypted with the given password. - - - try - { - using (ZipFile zip = new ZipFile()) - { - // the following entry will be inserted at the root in the archive. - zip.AddFile("c:\\datafiles\\ReadMe.txt", ""); - // this image file will be inserted into the "images" directory in the archive. - zip.AddFile("c:\\photos\\personal\\7440-N49th.png", "images"); - // the following will result in a password-protected file called - // files\\docs\\2008-Regional-Sales-Report.pdf in the archive. - zip.Password = "EncryptMe!"; - zip.AddFile("c:\\Desktop\\2008-Regional-Sales-Report.pdf", "files\\docs"); - zip.Save("Archive.zip"); - } - } - catch (System.Exception ex1) - { - System.Console.Error.WriteLine("exception: {0}", ex1); - } - - - - Try - Using zip As ZipFile = New ZipFile - ' the following entry will be inserted at the root in the archive. - zip.AddFile("c:\datafiles\ReadMe.txt", "") - ' this image file will be inserted into the "images" directory in the archive. - zip.AddFile("c:\photos\personal\7440-N49th.png", "images") - ' the following will result in a password-protected file called - ' files\\docs\\2008-Regional-Sales-Report.pdf in the archive. - zip.Password = "EncryptMe!" - zip.AddFile("c:\Desktop\2008-Regional-Sales-Report.pdf", "files\documents") - zip.Save("Archive.zip") - End Using - Catch ex1 As Exception - Console.Error.WriteLine("exception: {0}", ex1) - End Try - - - - - - - - - The name of the file to add. The name of the file may be a relative path - or a fully-qualified path. - - - - Specifies a directory path to use to override any path in the fileName. - This path may, or may not, correspond to a real directory in the current - filesystem. If the files within the zip are later extracted, this is the - path used for the extracted file. Passing null (Nothing in - VB) will use the path on the fileName, if any. Passing the empty string - ("") will insert the item at the root path within the archive. - - - The ZipEntry corresponding to the file added. - - - - This method removes a collection of entries from the ZipFile. - - - - A collection of ZipEntry instances from this zip file to be removed. For - example, you can pass in an array of ZipEntry instances; or you can call - SelectEntries(), and then add or remove entries from that - ICollection<ZipEntry> (ICollection(Of ZipEntry) in VB), and pass - that ICollection to this method. - - - - - - - - This method removes a collection of entries from the ZipFile, by name. - - - - A collection of strings that refer to names of entries to be removed - from the ZipFile. For example, you can pass in an array or a - List of Strings that provide the names of entries to be removed. - - - - - - - - This method adds a set of files to the ZipFile. - - - - - Use this method to add a set of files to the zip archive, in one call. - For example, a list of files received from - System.IO.Directory.GetFiles() can be added to a zip archive in one - call. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to each - ZipEntry added. - - - - - The collection of names of the files to add. Each string should refer to a - file in the filesystem. The name of the file may be a relative path or a - fully-qualified path. - - - - This example shows how to create a zip file, and add a few files into it. - - String ZipFileToCreate = "archive1.zip"; - String DirectoryToZip = "c:\\reports"; - using (ZipFile zip = new ZipFile()) - { - // Store all files found in the top level directory, into the zip archive. - String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); - zip.AddFiles(filenames); - zip.Save(ZipFileToCreate); - } - - - - Dim ZipFileToCreate As String = "archive1.zip" - Dim DirectoryToZip As String = "c:\reports" - Using zip As ZipFile = New ZipFile - ' Store all files found in the top level directory, into the zip archive. - Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) - zip.AddFiles(filenames) - zip.Save(ZipFileToCreate) - End Using - - - - - - - - Adds or updates a set of files in the ZipFile. - - - - - Any files that already exist in the archive are updated. Any files that - don't yet exist in the archive are added. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to each - ZipEntry added. - - - - - The collection of names of the files to update. Each string should refer to a file in - the filesystem. The name of the file may be a relative path or a fully-qualified path. - - - - - - Adds a set of files to the ZipFile, using the - specified directory path in the archive. - - - - - Any directory structure that may be present in the - filenames contained in the list is "flattened" in the - archive. Each file in the list is added to the archive in - the specified top-level directory. - - - - For ZipFile properties including , , , , , , and , their respective values at the - time of this call will be applied to each ZipEntry added. - - - - - The names of the files to add. Each string should refer to - a file in the filesystem. The name of the file may be a - relative path or a fully-qualified path. - - - - Specifies a directory path to use to override any path in the file name. - Th is path may, or may not, correspond to a real directory in the current - filesystem. If the files within the zip are later extracted, this is the - path used for the extracted file. Passing null (Nothing in - VB) will use the path on each of the fileNames, if any. Passing - the empty string ("") will insert the item at the root path within the - archive. - - - - - - - Adds a set of files to the ZipFile, using the specified directory - path in the archive, and preserving the full directory structure in the - filenames. - - - - - - Think of the as a "root" or - base directory used in the archive for the files that get added. when - is true, the hierarchy of files - found in the filesystem will be placed, with the hierarchy intact, - starting at that root in the archive. When preserveDirHierarchy - is false, the path hierarchy of files is flattned, and the flattened - set of files gets placed in the root within the archive as specified in - directoryPathInArchive. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to each - ZipEntry added. - - - - - - The names of the files to add. Each string should refer to a file in the - filesystem. The name of the file may be a relative path or a - fully-qualified path. - - - - Specifies a directory path to use as a prefix for each entry name. - This path may, or may not, correspond to a real directory in the current - filesystem. If the files within the zip are later extracted, this is the - path used for the extracted file. Passing null (Nothing in - VB) will use the path on each of the fileNames, if any. Passing - the empty string ("") will insert the item at the root path within the - archive. - - - - whether the entries in the zip archive will reflect the directory - hierarchy that is present in the various filenames. For example, if - includes two paths, - \Animalia\Chordata\Mammalia\Info.txt and - \Plantae\Magnoliophyta\Dicotyledon\Info.txt, then calling this method - with = false will - result in an exception because of a duplicate entry name, while - calling this method with = - true will result in the full direcory paths being included in - the entries added to the ZipFile. - - - - - - Adds or updates a set of files to the ZipFile, using the specified - directory path in the archive. - - - - - - Any files that already exist in the archive are updated. Any files that - don't yet exist in the archive are added. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to each - ZipEntry added. - - - - - The names of the files to add or update. Each string should refer to a - file in the filesystem. The name of the file may be a relative path or a - fully-qualified path. - - - - Specifies a directory path to use to override any path in the file name. - This path may, or may not, correspond to a real directory in the current - filesystem. If the files within the zip are later extracted, this is the - path used for the extracted file. Passing null (Nothing in - VB) will use the path on each of the fileNames, if any. Passing - the empty string ("") will insert the item at the root path within the - archive. - - - - - - - Adds or Updates a File in a Zip file archive. - - - - - This method adds a file to a zip archive, or, if the file already exists - in the zip archive, this method Updates the content of that given filename - in the zip archive. The UpdateFile method might more accurately be - called "AddOrUpdateFile". - - - - Upon success, there is no way for the application to learn whether the file - was added versus updated. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - This example shows how to Update an existing entry in a zipfile. The first - call to UpdateFile adds the file to the newly-created zip archive. The - second call to UpdateFile updates the content for that file in the zip - archive. - - - using (ZipFile zip1 = new ZipFile()) - { - // UpdateFile might more accurately be called "AddOrUpdateFile" - zip1.UpdateFile("MyDocuments\\Readme.txt"); - zip1.UpdateFile("CustomerList.csv"); - zip1.Comment = "This zip archive has been created."; - zip1.Save("Content.zip"); - } - - using (ZipFile zip2 = ZipFile.Read("Content.zip")) - { - zip2.UpdateFile("Updates\\Readme.txt"); - zip2.Comment = "This zip archive has been updated: The Readme.txt file has been changed."; - zip2.Save(); - } - - - - Using zip1 As New ZipFile - ' UpdateFile might more accurately be called "AddOrUpdateFile" - zip1.UpdateFile("MyDocuments\Readme.txt") - zip1.UpdateFile("CustomerList.csv") - zip1.Comment = "This zip archive has been created." - zip1.Save("Content.zip") - End Using - - Using zip2 As ZipFile = ZipFile.Read("Content.zip") - zip2.UpdateFile("Updates\Readme.txt") - zip2.Comment = "This zip archive has been updated: The Readme.txt file has been changed." - zip2.Save - End Using - - - - - - - - - The name of the file to add or update. It should refer to a file in the - filesystem. The name of the file may be a relative path or a - fully-qualified path. - - - - The ZipEntry corresponding to the File that was added or updated. - - - - - Adds or Updates a File in a Zip file archive. - - - - - This method adds a file to a zip archive, or, if the file already exists - in the zip archive, this method Updates the content of that given filename - in the zip archive. - - - - This version of the method allows the caller to explicitly specify the - directory path to be used in the archive. The entry to be added or - updated is found by using the specified directory path, combined with the - basename of the specified filename. - - - - Upon success, there is no way for the application to learn if the file was - added versus updated. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - - - - The name of the file to add or update. It should refer to a file in the - filesystem. The name of the file may be a relative path or a - fully-qualified path. - - - - Specifies a directory path to use to override any path in the - fileName. This path may, or may not, correspond to a real - directory in the current filesystem. If the files within the zip are - later extracted, this is the path used for the extracted file. Passing - null (Nothing in VB) will use the path on the - fileName, if any. Passing the empty string ("") will insert the - item at the root path within the archive. - - - - The ZipEntry corresponding to the File that was added or updated. - - - - - Add or update a directory in a zip archive. - - - - If the specified directory does not exist in the archive, then this method - is equivalent to calling AddDirectory(). If the specified - directory already exists in the archive, then this method updates any - existing entries, and adds any new entries. Any entries that are in the - zip archive but not in the specified directory, are left alone. In other - words, the contents of the zip file will be a union of the previous - contents and the new files. - - - - - - - - The path to the directory to be added to the zip archive, or updated in - the zip archive. - - - - The ZipEntry corresponding to the Directory that was added or updated. - - - - - Add or update a directory in the zip archive at the specified root - directory in the archive. - - - - If the specified directory does not exist in the archive, then this method - is equivalent to calling AddDirectory(). If the specified - directory already exists in the archive, then this method updates any - existing entries, and adds any new entries. Any entries that are in the - zip archive but not in the specified directory, are left alone. In other - words, the contents of the zip file will be a union of the previous - contents and the new files. - - - - - - - - The path to the directory to be added to the zip archive, or updated - in the zip archive. - - - - Specifies a directory path to use to override any path in the - directoryName. This path may, or may not, correspond to a real - directory in the current filesystem. If the files within the zip are - later extracted, this is the path used for the extracted file. Passing - null (Nothing in VB) will use the path on the - directoryName, if any. Passing the empty string ("") will insert - the item at the root path within the archive. - - - - The ZipEntry corresponding to the Directory that was added or updated. - - - - - Add or update a file or directory in the zip archive. - - - - - This is useful when the application is not sure or does not care if the - item to be added is a file or directory, and does not know or does not - care if the item already exists in the ZipFile. Calling this method - is equivalent to calling RemoveEntry() if an entry by the same name - already exists, followed calling by AddItem(). - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - - - - the path to the file or directory to be added or updated. - - - - - Add or update a file or directory. - - - - - This method is useful when the application is not sure or does not care if - the item to be added is a file or directory, and does not know or does not - care if the item already exists in the ZipFile. Calling this method - is equivalent to calling RemoveEntry(), if an entry by that name - exists, and then calling AddItem(). - - - - This version of the method allows the caller to explicitly specify the - directory path to be used for the item being added to the archive. The - entry or entries that are added or updated will use the specified - DirectoryPathInArchive. Extracting the entry from the archive will - result in a file stored in that directory path. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - - - - The path for the File or Directory to be added or updated. - - - Specifies a directory path to use to override any path in the - itemName. This path may, or may not, correspond to a real - directory in the current filesystem. If the files within the zip are - later extracted, this is the path used for the extracted file. Passing - null (Nothing in VB) will use the path on the - itemName, if any. Passing the empty string ("") will insert the - item at the root path within the archive. - - - - - Adds a named entry into the zip archive, taking content for the entry - from a string. - - - - Calling this method creates an entry using the given fileName and - directory path within the archive. There is no need for a file by the - given name to exist in the filesystem; the name is used within the zip - archive only. The content for the entry is encoded using the default text - encoding for the machine. - - - - The content of the file, should it be extracted from the zip. - - - - The name, including any path, to use for the entry within the archive. - - - The ZipEntry added. - - - - This example shows how to add an entry to the zipfile, using a string as - content for that entry. - - - string Content = "This string will be the content of the Readme.txt file in the zip archive."; - using (ZipFile zip1 = new ZipFile()) - { - zip1.AddFile("MyDocuments\\Resume.doc", "files"); - zip1.AddEntry("Readme.txt", Content); - zip1.Comment = "This zip file was created at " + System.DateTime.Now.ToString("G"); - zip1.Save("Content.zip"); - } - - - - Public Sub Run() - Dim Content As String = "This string will be the content of the Readme.txt file in the zip archive." - Using zip1 As ZipFile = New ZipFile - zip1.AddEntry("Readme.txt", Content) - zip1.AddFile("MyDocuments\Resume.doc", "files") - zip1.Comment = ("This zip file was created at " & DateTime.Now.ToString("G")) - zip1.Save("Content.zip") - End Using - End Sub - - - - - - Adds a named entry into the zip archive, taking content for the entry - from a string, and using the specified text encoding. - - - - - - Calling this method creates an entry using the given fileName and - directory path within the archive. There is no need for a file by the - given name to exist in the filesystem; the name is used within the zip - archive only. - - - - The content for the entry, a string value, is encoded using the given - text encoding. A BOM (byte-order-mark) is emitted into the file, if the - Encoding parameter is set for that. - - - - Most Encoding classes support a constructor that accepts a boolean, - indicating whether to emit a BOM or not. For example see . - - - - - - The name, including any path, to use within the archive for the entry. - - - - The content of the file, should it be extracted from the zip. - - - - The text encoding to use when encoding the string. Be aware: This is - distinct from the text encoding used to encode the fileName, as specified - in . - - - The ZipEntry added. - - - - - Create an entry in the ZipFile using the given Stream - as input. The entry will have the given filename. - - - - - - The application should provide an open, readable stream; in this case it - will be read during the call to or one of - its overloads. - - - - The passed stream will be read from its current position. If - necessary, callers should set the position in the stream before - calling AddEntry(). This might be appropriate when using this method - with a MemoryStream, for example. - - - - In cases where a large number of streams will be added to the - ZipFile, the application may wish to avoid maintaining all of the - streams open simultaneously. To handle this situation, the application - should use the - overload. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - - This example adds a single entry to a ZipFile via a Stream. - - - - String zipToCreate = "Content.zip"; - String fileNameInArchive = "Content-From-Stream.bin"; - using (System.IO.Stream streamToRead = MyStreamOpener()) - { - using (ZipFile zip = new ZipFile()) - { - ZipEntry entry= zip.AddEntry(fileNameInArchive, streamToRead); - zip.AddFile("Readme.txt"); - zip.Save(zipToCreate); // the stream is read implicitly here - } - } - - - - Dim zipToCreate As String = "Content.zip" - Dim fileNameInArchive As String = "Content-From-Stream.bin" - Using streamToRead as System.IO.Stream = MyStreamOpener() - Using zip As ZipFile = New ZipFile() - Dim entry as ZipEntry = zip.AddEntry(fileNameInArchive, streamToRead) - zip.AddFile("Readme.txt") - zip.Save(zipToCreate) '' the stream is read implicitly, here - End Using - End Using - - - - - - - The name, including any path, which is shown in the zip file for the added - entry. - - - The input stream from which to grab content for the file - - The ZipEntry added. - - - - Add a ZipEntry for which content is written directly by the application. - - - - - When the application needs to write the zip entry data, use this - method to add the ZipEntry. For example, in the case that the - application wishes to write the XML representation of a DataSet into - a ZipEntry, the application can use this method to do so. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - About progress events: When using the WriteDelegate, DotNetZip does - not issue any SaveProgress events with EventType = - Saving_EntryBytesRead. (This is because it is the - application's code that runs in WriteDelegate - there's no way for - DotNetZip to know when to issue a EntryBytesRead event.) - Applications that want to update a progress bar or similar status - indicator should do so from within the WriteDelegate - itself. DotNetZip will issue the other SaveProgress events, - including - Saving_Started, - - Saving_BeforeWriteEntry, and - Saving_AfterWriteEntry. - - - - Note: When you use PKZip encryption, it's normally necessary to - compute the CRC of the content to be encrypted, before compressing or - encrypting it. Therefore, when using PKZip encryption with a - WriteDelegate, the WriteDelegate CAN BE called twice: once to compute - the CRC, and the second time to potentially compress and - encrypt. Surprising, but true. This is because PKWARE specified that - the encryption initialization data depends on the CRC. - If this happens, for each call of the delegate, your - application must stream the same entry data in its entirety. If your - application writes different data during the second call, it will - result in a corrupt zip file. - - - - The double-read behavior happens with all types of entries, not only - those that use WriteDelegate. It happens if you add an entry from a - filesystem file, or using a string, or a stream, or an opener/closer - pair. But in those cases, DotNetZip takes care of reading twice; in - the case of the WriteDelegate, the application code gets invoked - twice. Be aware. - - - - As you can imagine, this can cause performance problems for large - streams, and it can lead to correctness problems when you use a - WriteDelegate. This is a pretty big pitfall. There are two - ways to avoid it. First, and most preferred: don't use PKZIP - encryption. If you use the WinZip AES encryption, this problem - doesn't occur, because the encryption protocol doesn't require the CRC - up front. Second: if you do choose to use PKZIP encryption, write out - to a non-seekable stream (like standard output, or the - Response.OutputStream in an ASP.NET application). In this case, - DotNetZip will use an alternative encryption protocol that does not - rely on the CRC of the content. This also implies setting bit 3 in - the zip entry, which still presents problems for some zip tools. - - - - In the future I may modify DotNetZip to *always* use bit 3 when PKZIP - encryption is in use. This seems like a win overall, but there will - be some work involved. If you feel strongly about it, visit the - DotNetZip forums and vote up the Workitem - tracking this issue. - - - - - the name of the entry to add - the delegate which will write the entry content - the ZipEntry added - - - - This example shows an application filling a DataSet, then saving the - contents of that DataSet as XML, into a ZipEntry in a ZipFile, using an - anonymous delegate in C#. The DataSet XML is never saved to a disk file. - - - var c1= new System.Data.SqlClient.SqlConnection(connstring1); - var da = new System.Data.SqlClient.SqlDataAdapter() - { - SelectCommand= new System.Data.SqlClient.SqlCommand(strSelect, c1) - }; - - DataSet ds1 = new DataSet(); - da.Fill(ds1, "Invoices"); - - using(Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile()) - { - zip.AddEntry(zipEntryName, (name,stream) => ds1.WriteXml(stream) ); - zip.Save(zipFileName); - } - - - - - - This example uses an anonymous method in C# as the WriteDelegate to provide - the data for the ZipEntry. The example is a bit contrived - the - AddFile() method is a simpler way to insert the contents of a file - into an entry in a zip file. On the other hand, if there is some sort of - processing or transformation of the file contents required before writing, - the application could use the WriteDelegate to do it, in this way. - - - using (var input = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite )) - { - using(Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile()) - { - zip.AddEntry(zipEntryName, (name,output) => - { - byte[] buffer = new byte[BufferSize]; - int n; - while ((n = input.Read(buffer, 0, buffer.Length)) != 0) - { - // could transform the data here... - output.Write(buffer, 0, n); - // could update a progress bar here - } - }); - - zip.Save(zipFileName); - } - } - - - - - - This example uses a named delegate in VB to write data for the given - ZipEntry (VB9 does not have anonymous delegates). The example here is a bit - contrived - a simpler way to add the contents of a file to a ZipEntry is to - simply use the appropriate AddFile() method. The key scenario for - which the WriteDelegate makes sense is saving a DataSet, in XML - format, to the zip file. The DataSet can write XML to a stream, and the - WriteDelegate is the perfect place to write into the zip file. There may be - other data structures that can write to a stream, but cannot be read as a - stream. The WriteDelegate would be appropriate for those cases as - well. - - - Private Sub WriteEntry (ByVal name As String, ByVal output As Stream) - Using input As FileStream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) - Dim n As Integer = -1 - Dim buffer As Byte() = New Byte(BufferSize){} - Do While n <> 0 - n = input.Read(buffer, 0, buffer.Length) - output.Write(buffer, 0, n) - Loop - End Using - End Sub - - Public Sub Run() - Using zip = New ZipFile - zip.AddEntry(zipEntryName, New WriteDelegate(AddressOf WriteEntry)) - zip.Save(zipFileName) - End Using - End Sub - - - - - - Add an entry, for which the application will provide a stream - containing the entry data, on a just-in-time basis. - - - - - In cases where the application wishes to open the stream that - holds the content for the ZipEntry, on a just-in-time basis, the - application can use this method. The application provides an - opener delegate that will be called by the DotNetZip library to - obtain a readable stream that can be read to get the bytes for - the given entry. Typically, this delegate opens a stream. - Optionally, the application can provide a closer delegate as - well, which will be called by DotNetZip when all bytes have been - read from the entry. - - - - These delegates are called from within the scope of the call to - ZipFile.Save(). - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - - This example uses anonymous methods in C# to open and close the - source stream for the content for a zip entry. - - - using(Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile()) - { - zip.AddEntry(zipEntryName, - (name) => File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite ), - (name, stream) => stream.Close() - ); - - zip.Save(zipFileName); - } - - - - - - - This example uses delegates in VB.NET to open and close the - the source stream for the content for a zip entry. VB 9.0 lacks - support for "Sub" lambda expressions, and so the CloseDelegate must - be an actual, named Sub. - - - - Function MyStreamOpener(ByVal entryName As String) As Stream - '' This simply opens a file. You probably want to do somethinig - '' more involved here: open a stream to read from a database, - '' open a stream on an HTTP connection, and so on. - Return File.OpenRead(entryName) - End Function - - Sub MyStreamCloser(entryName As String, stream As Stream) - stream.Close() - End Sub - - Public Sub Run() - Dim dirToZip As String = "fodder" - Dim zipFileToCreate As String = "Archive.zip" - Dim opener As OpenDelegate = AddressOf MyStreamOpener - Dim closer As CloseDelegate = AddressOf MyStreamCloser - Dim numFilestoAdd As Int32 = 4 - Using zip As ZipFile = New ZipFile - Dim i As Integer - For i = 0 To numFilesToAdd - 1 - zip.AddEntry(String.Format("content-{0:000}.txt"), opener, closer) - Next i - zip.Save(zipFileToCreate) - End Using - End Sub - - - - - the name of the entry to add - - the delegate that will be invoked by ZipFile.Save() to get the - readable stream for the given entry. ZipFile.Save() will call - read on this stream to obtain the data for the entry. This data - will then be compressed and written to the newly created zip - file. - - - the delegate that will be invoked to close the stream. This may - be null (Nothing in VB), in which case no call is makde to close - the stream. - - the ZipEntry added - - - - - Updates the given entry in the ZipFile, using the given - string as content for the ZipEntry. - - - - - - Calling this method is equivalent to removing the ZipEntry for - the given file name and directory path, if it exists, and then calling - . See the documentation for - that method for further explanation. The string content is encoded - using the default encoding for the machine. This encoding is distinct - from the encoding used for the filename itself. See - . - - - - - - The name, including any path, to use within the archive for the entry. - - - - The content of the file, should it be extracted from the zip. - - - The ZipEntry added. - - - - - Updates the given entry in the ZipFile, using the given string as - content for the ZipEntry. - - - - Calling this method is equivalent to removing the ZipEntry for the - given file name and directory path, if it exists, and then calling . See the - documentation for that method for further explanation. - - - - The name, including any path, to use within the archive for the entry. - - - - The content of the file, should it be extracted from the zip. - - - - The text encoding to use when encoding the string. Be aware: This is - distinct from the text encoding used to encode the filename. See . - - - The ZipEntry added. - - - - - Updates the given entry in the ZipFile, using the given delegate - as the source for content for the ZipEntry. - - - - Calling this method is equivalent to removing the ZipEntry for the - given file name and directory path, if it exists, and then calling . See the - documentation for that method for further explanation. - - - - The name, including any path, to use within the archive for the entry. - - - the delegate which will write the entry content. - - The ZipEntry added. - - - - - Updates the given entry in the ZipFile, using the given delegates - to open and close the stream that provides the content for the ZipEntry. - - - - Calling this method is equivalent to removing the ZipEntry for the - given file name and directory path, if it exists, and then calling . See the - documentation for that method for further explanation. - - - - The name, including any path, to use within the archive for the entry. - - - - the delegate that will be invoked to open the stream - - - the delegate that will be invoked to close the stream - - - The ZipEntry added or updated. - - - - - Updates the given entry in the ZipFile, using the given stream as - input, and the given filename and given directory Path. - - - - - Calling the method is equivalent to calling RemoveEntry() if an - entry by the same name already exists, and then calling AddEntry() - with the given fileName and stream. - - - - The stream must be open and readable during the call to - ZipFile.Save. You can dispense the stream on a just-in-time basis - using the property. Check the - documentation of that property for more information. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to the - ZipEntry added. - - - - - - - - - The name, including any path, to use within the archive for the entry. - - - The input stream from which to read file data. - The ZipEntry added. - - - - Add an entry into the zip archive using the given filename and - directory path within the archive, and the given content for the - file. No file is created in the filesystem. - - - The data to use for the entry. - - - The name, including any path, to use within the archive for the entry. - - - The ZipEntry added. - - - - Updates the given entry in the ZipFile, using the given byte - array as content for the entry. - - - - Calling this method is equivalent to removing the ZipEntry - for the given filename and directory path, if it exists, and then - calling . See the - documentation for that method for further explanation. - - - - The name, including any path, to use within the archive for the entry. - - - The content to use for the ZipEntry. - - The ZipEntry added. - - - - - Adds the contents of a filesystem directory to a Zip file archive. - - - - - - The name of the directory may be a relative path or a fully-qualified - path. Any files within the named directory are added to the archive. Any - subdirectories within the named directory are also added to the archive, - recursively. - - - - Top-level entries in the named directory will appear as top-level entries - in the zip archive. Entries in subdirectories in the named directory will - result in entries in subdirectories in the zip archive. - - - - If you want the entries to appear in a containing directory in the zip - archive itself, then you should call the AddDirectory() overload that - allows you to explicitly specify a directory path for use in the archive. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to each - ZipEntry added. - - - - - - - - - - This method has 2 overloads. - - The name of the directory to add. - The ZipEntry added. - - - - Adds the contents of a filesystem directory to a Zip file archive, - overriding the path to be used for entries in the archive. - - - - - The name of the directory may be a relative path or a fully-qualified - path. The add operation is recursive, so that any files or subdirectories - within the name directory are also added to the archive. - - - - Top-level entries in the named directory will appear as top-level entries - in the zip archive. Entries in subdirectories in the named directory will - result in entries in subdirectories in the zip archive. - - - - For ZipFile properties including , , , , , - , and , their - respective values at the time of this call will be applied to each - ZipEntry added. - - - - - - - In this code, calling the ZipUp() method with a value of "c:\reports" for - the directory parameter will result in a zip file structure in which all - entries are contained in a toplevel "reports" directory. - - - - public void ZipUp(string targetZip, string directory) - { - using (var zip = new ZipFile()) - { - zip.AddDirectory(directory, System.IO.Path.GetFileName(directory)); - zip.Save(targetZip); - } - } - - - - - - - - The name of the directory to add. - - - Specifies a directory path to use to override any path in the - DirectoryName. This path may, or may not, correspond to a real directory - in the current filesystem. If the zip is later extracted, this is the - path used for the extracted file or directory. Passing null - (Nothing in VB) or the empty string ("") will insert the items at - the root path within the archive. - - - The ZipEntry added. - - - - Creates a directory in the zip archive. - - - - - - Use this when you want to create a directory in the archive but there is - no corresponding filesystem representation for that directory. - - - - You will probably not need to do this in your code. One of the only times - you will want to do this is if you want an empty directory in the zip - archive. The reason: if you add a file to a zip archive that is stored - within a multi-level directory, all of the directory tree is implicitly - created in the zip archive. - - - - - - The name of the directory to create in the archive. - - The ZipEntry added. - - - - Checks a zip file to see if its directory is consistent. - - - - - - In cases of data error, the directory within a zip file can get out - of synch with the entries in the zip file. This method checks the - given zip file and returns true if this has occurred. - - - This method may take a long time to run for large zip files. - - - This method is not supported in the Reduced version of DotNetZip. - - - - Developers using COM can use the ComHelper.CheckZip(String) - method. - - - - - The filename to of the zip file to check. - - true if the named zip file checks OK. Otherwise, false. - - - - - - - Checks a zip file to see if its directory is consistent, - and optionally fixes the directory if necessary. - - - - - - In cases of data error, the directory within a zip file can get out of - synch with the entries in the zip file. This method checks the given - zip file, and returns true if this has occurred. It also optionally - fixes the zipfile, saving the fixed copy in Name_Fixed.zip. - - - - This method may take a long time to run for large zip files. It - will take even longer if the file actually needs to be fixed, and if - fixIfNecessary is true. - - - - This method is not supported in the Reduced version of DotNetZip. - - - - - The filename to of the zip file to check. - - If true, the method will fix the zip file if - necessary. - - - a TextWriter in which messages generated while checking will be written. - - - true if the named zip is OK; false if the file needs to be fixed. - - - - - - - Rewrite the directory within a zipfile. - - - - - - In cases of data error, the directory in a zip file can get out of - synch with the entries in the zip file. This method attempts to fix - the zip file if this has occurred. - - - This can take a long time for large zip files. - - This won't work if the zip file uses a non-standard - code page - neither IBM437 nor UTF-8. - - - This method is not supported in the Reduced or Compact Framework - versions of DotNetZip. - - - - Developers using COM can use the ComHelper.FixZipDirectory(String) - method. - - - - - The filename to of the zip file to fix. - - - - - - - Verify the password on a zip file. - - - - - Keep in mind that passwords in zipfiles are applied to - zip entries, not to the entire zip file. So testing a - zipfile for a particular password doesn't work in the - general case. On the other hand, it's often the case - that a single password will be used on all entries in a - zip file. This method works for that case. - - - There is no way to check a password without doing the - decryption. So this code decrypts and extracts the given - zipfile into - - - - The filename to of the zip file to fix. - - The password to check. - - a bool indicating whether the password matches. - - - - Provides a human-readable string with information about the ZipFile. - - - - - The information string contains 10 lines or so, about each ZipEntry, - describing whether encryption is in use, the compressed and uncompressed - length of the entry, the offset of the entry, and so on. As a result the - information string can be very long for zip files that contain many - entries. - - - This information is mostly useful for diagnostic purposes. - - - - - - Indicates whether to perform a full scan of the zip file when reading it. - - - - - - You almost never want to use this property. - - - - When reading a zip file, if this flag is true (True in - VB), the entire zip archive will be scanned and searched for entries. - For large archives, this can take a very, long time. The much more - efficient default behavior is to read the zip directory, which is - stored at the end of the zip file. But, in some cases the directory is - corrupted and you need to perform a full scan of the zip file to - determine the contents of the zip file. This property lets you do - that, when necessary. - - - - This flag is effective only when calling . Normally you would read a ZipFile with the - static ZipFile.Read - method. But you can't set the FullScan property on the - ZipFile instance when you use a static factory method like - ZipFile.Read. - - - - - - - This example shows how to read a zip file using the full scan approach, - and then save it, thereby producing a corrected zip file. - - - using (var zip = new ZipFile()) - { - zip.FullScan = true; - zip.Initialize(zipFileName); - zip.Save(newName); - } - - - - Using zip As New ZipFile - zip.FullScan = True - zip.Initialize(zipFileName) - zip.Save(newName) - End Using - - - - - - - Whether to sort the ZipEntries before saving the file. - - - - The default is false. If you have a large number of zip entries, the sort - alone can consume significant time. - - - - - using (var zip = new ZipFile()) - { - zip.AddFiles(filesToAdd); - zip.SortEntriesBeforeSaving = true; - zip.Save(name); - } - - - - Using zip As New ZipFile - zip.AddFiles(filesToAdd) - zip.SortEntriesBeforeSaving = True - zip.Save(name) - End Using - - - - - - - Indicates whether NTFS Reparse Points, like junctions, should be - traversed during calls to AddDirectory(). - - - - By default, calls to AddDirectory() will traverse NTFS reparse - points, like mounted volumes, and directory junctions. An example - of a junction is the "My Music" directory in Windows Vista. In some - cases you may not want DotNetZip to traverse those directories. In - that case, set this property to false. - - - - - using (var zip = new ZipFile()) - { - zip.AddDirectoryWillTraverseReparsePoints = false; - zip.AddDirectory(dirToZip,"fodder"); - zip.Save(zipFileToCreate); - } - - - - - - Size of the IO buffer used while saving. - - - - - - First, let me say that you really don't need to bother with this. It is - here to allow for optimizations that you probably won't make! It will work - fine if you don't set or get this property at all. Ok? - - - - Now that we have that out of the way, the fine print: This - property affects the size of the buffer that is used for I/O for each - entry contained in the zip file. When a file is read in to be compressed, - it uses a buffer given by the size here. When you update a zip file, the - data for unmodified entries is copied from the first zip file to the - other, through a buffer given by the size here. - - - - Changing the buffer size affects a few things: first, for larger buffer - sizes, the memory used by the ZipFile, obviously, will be larger - during I/O operations. This may make operations faster for very much - larger files. Last, for any given entry, when you use a larger buffer - there will be fewer progress events during I/O operations, because there's - one progress event generated for each time the buffer is filled and then - emptied. - - - - The default buffer size is 8k. Increasing the buffer size may speed - things up as you compress larger files. But there are no hard-and-fast - rules here, eh? You won't know til you test it. And there will be a - limit where ever larger buffers actually slow things down. So as I said - in the beginning, it's probably best if you don't set or get this property - at all. - - - - - - This example shows how you might set a large buffer size for efficiency when - dealing with zip entries that are larger than 1gb. - - using (ZipFile zip = new ZipFile()) - { - zip.SaveProgress += this.zip1_SaveProgress; - zip.AddDirectory(directoryToZip, ""); - zip.UseZip64WhenSaving = Zip64Option.Always; - zip.BufferSize = 65536*8; // 65536 * 8 = 512k - zip.Save(ZipFileToCreate); - } - - - - - - Size of the work buffer to use for the ZLIB codec during compression. - - - - - When doing ZLIB or Deflate compression, the library fills a buffer, - then passes it to the compressor for compression. Then the library - reads out the compressed bytes. This happens repeatedly until there - is no more uncompressed data to compress. This property sets the - size of the buffer that will be used for chunk-wise compression. In - order for the setting to take effect, your application needs to set - this property before calling one of the ZipFile.Save() - overloads. - - - Setting this affects the performance and memory efficiency of - compression and decompression. For larger files, setting this to a - larger size may improve compression performance, but the exact - numbers vary depending on available memory, the size of the streams - you are compressing, and a bunch of other variables. I don't have - good firm recommendations on how to set it. You'll have to test it - yourself. Or just leave it alone and accept the default. - - - - - - Indicates whether extracted files should keep their paths as - stored in the zip archive. - - - - - This property affects Extraction. It is not used when creating zip - archives. - - - - With this property set to false, the default, extracting entries - from a zip file will create files in the filesystem that have the full - path associated to the entry within the zip file. With this property set - to true, extracting entries from the zip file results in files - with no path: the folders are "flattened." - - - - An example: suppose the zip file contains entries /directory1/file1.txt and - /directory2/file2.txt. With FlattenFoldersOnExtract set to false, - the files created will be \directory1\file1.txt and \directory2\file2.txt. - With the property set to true, the files created are file1.txt and file2.txt. - - - - - - - The compression strategy to use for all entries. - - - - Set the Strategy used by the ZLIB-compatible compressor, when - compressing entries using the DEFLATE method. Different compression - strategies work better on different sorts of data. The strategy - parameter can affect the compression ratio and the speed of - compression but not the correctness of the compresssion. For more - information see Ionic.Zlib.CompressionStrategy. - - - - - The name of the ZipFile, on disk. - - - - - - When the ZipFile instance was created by reading an archive using - one of the ZipFile.Read methods, this property represents the name - of the zip file that was read. When the ZipFile instance was - created by using the no-argument constructor, this value is null - (Nothing in VB). - - - - If you use the no-argument constructor, and you then explicitly set this - property, when you call , this name will - specify the name of the zip file created. Doing so is equivalent to - calling . When instantiating a - ZipFile by reading from a stream or byte array, the Name - property remains null. When saving to a stream, the Name - property is implicitly set to null. - - - - - - Sets the compression level to be used for entries subsequently added to - the zip archive. - - - - - Varying the compression level used on entries can affect the - size-vs-speed tradeoff when compression and decompressing data streams - or files. - - - - As with some other properties on the ZipFile class, like , , and , setting this property on a ZipFile - instance will cause the specified CompressionLevel to be used on all - items that are subsequently added to the - ZipFile instance. If you set this property after you have added - items to the ZipFile, but before you have called Save(), - those items will not use the specified compression level. - - - - If you do not set this property, the default compression level is used, - which normally gives a good balance of compression efficiency and - compression speed. In some tests, using BestCompression can - double the time it takes to compress, while delivering just a small - increase in compression efficiency. This behavior will vary with the - type of data you compress. If you are in doubt, just leave this setting - alone, and accept the default. - - - - - - The compression method for the zipfile. - - - - By default, the compression method is CompressionMethod.Deflate. - - - - - - - A comment attached to the zip archive. - - - - - - This property is read/write. It allows the application to specify a - comment for the ZipFile, or read the comment for the - ZipFile. After setting this property, changes are only made - permanent when you call a Save() method. - - - - According to PKWARE's - zip specification, the comment is not encrypted, even if there is a - password set on the zip file. - - - - The specification does not describe how to indicate the encoding used - on a comment string. Many "compliant" zip tools and libraries use - IBM437 as the code page for comments; DotNetZip, too, follows that - practice. On the other hand, there are situations where you want a - Comment to be encoded with something else, for example using code page - 950 "Big-5 Chinese". To fill that need, DotNetZip will encode the - comment following the same procedure it follows for encoding - filenames: (a) if is - Never, it uses the default encoding (IBM437). (b) if is Always, it always uses the - alternate encoding (). (c) if is AsNecessary, it uses the - alternate encoding only if the default encoding is not sufficient for - encoding the comment - in other words if decoding the result does not - produce the original string. This decision is taken at the time of - the call to ZipFile.Save(). - - - - When creating a zip archive using this library, it is possible to change - the value of between each - entry you add, and between adding entries and the call to - Save(). Don't do this. It will likely result in a zip file that is - not readable by any tool or application. For best interoperability, leave - alone, or specify it only - once, before adding any entries to the ZipFile instance. - - - - - - - Specifies whether the Creation, Access, and Modified times for entries - added to the zip file will be emitted in “Windows format” - when the zip archive is saved. - - - - - An application creating a zip archive can use this flag to explicitly - specify that the file times for the entries should or should not be stored - in the zip archive in the format used by Windows. By default this flag is - true, meaning the Windows-format times are stored in the zip - archive. - - - - When adding an entry from a file or directory, the Creation (), Access (), and Modified () times for the given entry are - automatically set from the filesystem values. When adding an entry from a - stream or string, all three values are implicitly set to - DateTime.Now. Applications can also explicitly set those times by - calling . - - - - PKWARE's - zip specification describes multiple ways to format these times in a - zip file. One is the format Windows applications normally use: 100ns ticks - since January 1, 1601 UTC. The other is a format Unix applications typically - use: seconds since January 1, 1970 UTC. Each format can be stored in an - "extra field" in the zip entry when saving the zip archive. The former - uses an extra field with a Header Id of 0x000A, while the latter uses a - header ID of 0x5455, although you probably don't need to know that. - - - - Not all tools and libraries can interpret these fields. Windows - compressed folders is one that can read the Windows Format timestamps, - while I believe the Infozip - tools can read the Unix format timestamps. Some tools and libraries - may be able to read only one or the other. DotNetZip can read or write - times in either or both formats. - - - - The times stored are taken from , , and . - - - - The value set here applies to all entries subsequently added to the - ZipFile. - - - - This property is not mutually exclusive of the property. It is possible and - legal and valid to produce a zip file that contains timestamps encoded in - the Unix format as well as in the Windows format, in addition to the LastModified time attached to each - entry in the archive, a time that is always stored in "DOS format". And, - notwithstanding the names PKWare uses for these time formats, any of them - can be read and written by any computer, on any operating system. But, - there are no guarantees that a program running on Mac or Linux will - gracefully handle a zip file with "Windows" formatted times, or that an - application that does not use DotNetZip but runs on Windows will be able to - handle file times in Unix format. - - - - When in doubt, test. Sorry, I haven't got a complete list of tools and - which sort of timestamps they can use and will tolerate. If you get any - good information and would like to pass it on, please do so and I will - include that information in this documentation. - - - - - This example shows how to save a zip file that contains file timestamps - in a format normally used by Unix. - - using (var zip = new ZipFile()) - { - // produce a zip file the Mac will like - zip.EmitTimesInWindowsFormatWhenSaving = false; - zip.EmitTimesInUnixFormatWhenSaving = true; - zip.AddDirectory(directoryToZip, "files"); - zip.Save(outputFile); - } - - - - Using zip As New ZipFile - '' produce a zip file the Mac will like - zip.EmitTimesInWindowsFormatWhenSaving = False - zip.EmitTimesInUnixFormatWhenSaving = True - zip.AddDirectory(directoryToZip, "files") - zip.Save(outputFile) - End Using - - - - - - - - - Specifies whether the Creation, Access, and Modified times - for entries added to the zip file will be emitted in "Unix(tm) - format" when the zip archive is saved. - - - - - An application creating a zip archive can use this flag to explicitly - specify that the file times for the entries should or should not be stored - in the zip archive in the format used by Unix. By default this flag is - false, meaning the Unix-format times are not stored in the zip - archive. - - - - When adding an entry from a file or directory, the Creation (), Access (), and Modified () times for the given entry are - automatically set from the filesystem values. When adding an entry from a - stream or string, all three values are implicitly set to DateTime.Now. - Applications can also explicitly set those times by calling . - - - - PKWARE's - zip specification describes multiple ways to format these times in a - zip file. One is the format Windows applications normally use: 100ns ticks - since January 1, 1601 UTC. The other is a format Unix applications - typically use: seconds since January 1, 1970 UTC. Each format can be - stored in an "extra field" in the zip entry when saving the zip - archive. The former uses an extra field with a Header Id of 0x000A, while - the latter uses a header ID of 0x5455, although you probably don't need to - know that. - - - - Not all tools and libraries can interpret these fields. Windows - compressed folders is one that can read the Windows Format timestamps, - while I believe the Infozip - tools can read the Unix format timestamps. Some tools and libraries may be - able to read only one or the other. DotNetZip can read or write times in - either or both formats. - - - - The times stored are taken from , , and . - - - - This property is not mutually exclusive of the property. It is possible and - legal and valid to produce a zip file that contains timestamps encoded in - the Unix format as well as in the Windows format, in addition to the LastModified time attached to each - entry in the zip archive, a time that is always stored in "DOS - format". And, notwithstanding the names PKWare uses for these time - formats, any of them can be read and written by any computer, on any - operating system. But, there are no guarantees that a program running on - Mac or Linux will gracefully handle a zip file with "Windows" formatted - times, or that an application that does not use DotNetZip but runs on - Windows will be able to handle file times in Unix format. - - - - When in doubt, test. Sorry, I haven't got a complete list of tools and - which sort of timestamps they can use and will tolerate. If you get any - good information and would like to pass it on, please do so and I will - include that information in this documentation. - - - - - - - - - Indicates whether verbose output is sent to the during AddXxx() and - ReadXxx() operations. - - - - This is a synthetic property. It returns true if the is non-null. - - - - - Returns true if an entry by the given name exists in the ZipFile. - - - the name of the entry to find - true if an entry with the given name exists; otherwise false. - - - - - Indicates whether to perform case-sensitive matching on the filename when - retrieving entries in the zipfile via the string-based indexer. - - - - The default value is false, which means don't do case-sensitive - matching. In other words, retrieving zip["ReadMe.Txt"] is the same as - zip["readme.txt"]. It really makes sense to set this to true only - if you are not running on Windows, which has case-insensitive - filenames. But since this library is not built for non-Windows platforms, - in most cases you should just leave this property alone. - - - - - Indicates whether to ignore duplicate files (report only the first entry) - when loading a zipfile. - - - - The default value is false, which will try to make all files - available (duplicates will have a "copy" suffix appended to their name). - Setting this to true prior to using Initialize to read a - zipfile will prevent this and instead just ignore the duplicates. - - - - - Indicates whether to encode entry filenames and entry comments using Unicode - (UTF-8). - - - - - The - PKWare zip specification provides for encoding file names and file - comments in either the IBM437 code page, or in UTF-8. This flag selects - the encoding according to that specification. By default, this flag is - false, and filenames and comments are encoded into the zip file in the - IBM437 codepage. Setting this flag to true will specify that filenames - and comments that cannot be encoded with IBM437 will be encoded with - UTF-8. - - - - Zip files created with strict adherence to the PKWare specification with - respect to UTF-8 encoding can contain entries with filenames containing - any combination of Unicode characters, including the full range of - characters from Chinese, Latin, Hebrew, Greek, Cyrillic, and many other - alphabets. However, because at this time, the UTF-8 portion of the PKWare - specification is not broadly supported by other zip libraries and - utilities, such zip files may not be readable by your favorite zip tool or - archiver. In other words, interoperability will decrease if you set this - flag to true. - - - - In particular, Zip files created with strict adherence to the PKWare - specification with respect to UTF-8 encoding will not work well with - Explorer in Windows XP or Windows Vista, because Windows compressed - folders, as far as I know, do not support UTF-8 in zip files. Vista can - read the zip files, but shows the filenames incorrectly. Unpacking from - Windows Vista Explorer will result in filenames that have rubbish - characters in place of the high-order UTF-8 bytes. - - - - Also, zip files that use UTF-8 encoding will not work well with Java - applications that use the java.util.zip classes, as of v5.0 of the Java - runtime. The Java runtime does not correctly implement the PKWare - specification in this regard. - - - - As a result, we have the unfortunate situation that "correct" behavior by - the DotNetZip library with regard to Unicode encoding of filenames during - zip creation will result in zip files that are readable by strictly - compliant and current tools (for example the most recent release of the - commercial WinZip tool); but these zip files will not be readable by - various other tools or libraries, including Windows Explorer. - - - - The DotNetZip library can read and write zip files with UTF8-encoded - entries, according to the PKware spec. If you use DotNetZip for both - creating and reading the zip file, and you use UTF-8, there will be no - loss of information in the filenames. For example, using a self-extractor - created by this library will allow you to unpack files correctly with no - loss of information in the filenames. - - - - If you do not set this flag, it will remain false. If this flag is false, - your ZipFile will encode all filenames and comments using the - IBM437 codepage. This can cause "loss of information" on some filenames, - but the resulting zipfile will be more interoperable with other - utilities. As an example of the loss of information, diacritics can be - lost. The o-tilde character will be down-coded to plain o. The c with a - cedilla (Unicode 0xE7) used in Portugese will be downcoded to a c. - Likewise, the O-stroke character (Unicode 248), used in Danish and - Norwegian, will be down-coded to plain o. Chinese characters cannot be - represented in codepage IBM437; when using the default encoding, Chinese - characters in filenames will be represented as ?. These are all examples - of "information loss". - - - - The loss of information associated to the use of the IBM437 encoding is - inconvenient, and can also lead to runtime errors. For example, using - IBM437, any sequence of 4 Chinese characters will be encoded as ????. If - your application creates a ZipFile, then adds two files, each with - names of four Chinese characters each, this will result in a duplicate - filename exception. In the case where you add a single file with a name - containing four Chinese characters, calling Extract() on the entry that - has question marks in the filename will result in an exception, because - the question mark is not legal for use within filenames on Windows. These - are just a few examples of the problems associated to loss of information. - - - - This flag is independent of the encoding of the content within the entries - in the zip file. Think of the zip file as a container - it supports an - encoding. Within the container are other "containers" - the file entries - themselves. The encoding within those entries is independent of the - encoding of the zip archive container for those entries. - - - - Rather than specify the encoding in a binary fashion using this flag, an - application can specify an arbitrary encoding via the property. Setting the encoding - explicitly when creating zip archives will result in non-compliant zip - files that, curiously, are fairly interoperable. The challenge is, the - PKWare specification does not provide for a way to specify that an entry - in a zip archive uses a code page that is neither IBM437 nor UTF-8. - Therefore if you set the encoding explicitly when creating a zip archive, - you must take care upon reading the zip archive to use the same code page. - If you get it wrong, the behavior is undefined and may result in incorrect - filenames, exceptions, stomach upset, hair loss, and acne. - - - - - - - Specify whether to use ZIP64 extensions when saving a zip archive. - - - - - - When creating a zip file, the default value for the property is . is - safest, in the sense that you will not get an Exception if a pre-ZIP64 - limit is exceeded. - - - - You may set the property at any time before calling Save(). - - - - When reading a zip file via the Zipfile.Read() method, DotNetZip - will properly read ZIP64-endowed zip archives, regardless of the value of - this property. DotNetZip will always read ZIP64 archives. This property - governs only whether DotNetZip will write them. Therefore, when updating - archives, be careful about setting this property after reading an archive - that may use ZIP64 extensions. - - - - An interesting question is, if you have set this property to - AsNecessary, and then successfully saved, does the resulting - archive use ZIP64 extensions or not? To learn this, check the property, after calling Save(). - - - - Have you thought about - donating? - - - - - - - - Indicates whether the archive requires ZIP64 extensions. - - - - - - This property is null (or Nothing in VB) if the archive has - not been saved, and there are fewer than 65334 ZipEntry items - contained in the archive. - - - - The Value is true if any of the following four conditions holds: - the uncompressed size of any entry is larger than 0xFFFFFFFF; the - compressed size of any entry is larger than 0xFFFFFFFF; the relative - offset of any entry within the zip archive is larger than 0xFFFFFFFF; or - there are more than 65534 entries in the archive. (0xFFFFFFFF = - 4,294,967,295). The result may not be known until a Save() is attempted - on the zip archive. The Value of this - property may be set only AFTER one of the Save() methods has been called. - - - - If none of the four conditions holds, and the archive has been saved, then - the Value is false. - - - - A Value of false does not indicate that the zip archive, as saved, - does not use ZIP64. It merely indicates that ZIP64 is not required. An - archive may use ZIP64 even when not required if the property is set to , or if the property is set to and the output stream was not - seekable. Use the property to determine if - the most recent Save() method resulted in an archive that utilized - the ZIP64 extensions. - - - - - - - - - Indicates whether the most recent Save() operation used ZIP64 extensions. - - - - - The use of ZIP64 extensions within an archive is not always necessary, and - for interoperability concerns, it may be desired to NOT use ZIP64 if - possible. The property can be - set to use ZIP64 extensions only when necessary. In those cases, - Sometimes applications want to know whether a Save() actually used ZIP64 - extensions. Applications can query this read-only property to learn - whether ZIP64 has been used in a just-saved ZipFile. - - - - The value is null (or Nothing in VB) if the archive has not - been saved. - - - - Non-null values (HasValue is true) indicate whether ZIP64 - extensions were used during the most recent Save() operation. The - ZIP64 extensions may have been used as required by any particular entry - because of its uncompressed or compressed size, or because the archive is - larger than 4294967295 bytes, or because there are more than 65534 entries - in the archive, or because the UseZip64WhenSaving property was set - to , or because the - UseZip64WhenSaving property was set to and the output stream was not seekable. - The value of this property does not indicate the reason the ZIP64 - extensions were used. - - - - - - - - - Indicates whether the most recent Read() operation read a zip file that uses - ZIP64 extensions. - - - - This property will return null (Nothing in VB) if you've added an entry after reading - the zip file. - - - - - The text encoding to use when writing new entries to the ZipFile, - for those entries that cannot be encoded with the default (IBM437) - encoding; or, the text encoding that was used when reading the entries - from the ZipFile. - - - - - In its - zip specification, PKWare describes two options for encoding - filenames and comments: using IBM437 or UTF-8. But, some archiving tools - or libraries do not follow the specification, and instead encode - characters using the system default code page. For example, WinRAR when - run on a machine in Shanghai may encode filenames with the Big-5 Chinese - (950) code page. This behavior is contrary to the Zip specification, but - it occurs anyway. - - - - When using DotNetZip to write zip archives that will be read by one of - these other archivers, set this property to specify the code page to use - when encoding the and for each ZipEntry in the zip file, for - values that cannot be encoded with the default codepage for zip files, - IBM437. This is why this property is "provisional". In all cases, IBM437 - is used where possible, in other words, where no loss of data would - result. It is possible, therefore, to have a given entry with a - Comment encoded in IBM437 and a FileName encoded with the - specified "provisional" codepage. - - - - Be aware that a zip file created after you've explicitly set the property to a value other than - IBM437 may not be compliant to the PKWare specification, and may not be - readable by compliant archivers. On the other hand, many (most?) - archivers are non-compliant and can read zip files created in arbitrary - code pages. The trick is to use or specify the proper codepage when - reading the zip. - - - - When creating a zip archive using this library, it is possible to change - the value of between each - entry you add, and between adding entries and the call to - Save(). Don't do this. It will likely result in a zipfile that is - not readable. For best interoperability, either leave alone, or specify it only once, - before adding any entries to the ZipFile instance. There is one - exception to this recommendation, described later. - - - - When using an arbitrary, non-UTF8 code page for encoding, there is no - standard way for the creator application - whether DotNetZip, WinZip, - WinRar, or something else - to formally specify in the zip file which - codepage has been used for the entries. As a result, readers of zip files - are not able to inspect the zip file and determine the codepage that was - used for the entries contained within it. It is left to the application - or user to determine the necessary codepage when reading zip files encoded - this way. In other words, if you explicitly specify the codepage when you - create the zipfile, you must explicitly specify the same codepage when - reading the zipfile. - - - - The way you specify the code page to use when reading a zip file varies - depending on the tool or library you use to read the zip. In DotNetZip, - you use a ZipFile.Read() method that accepts an encoding parameter. It - isn't possible with Windows Explorer, as far as I know, to specify an - explicit codepage to use when reading a zip. If you use an incorrect - codepage when reading a zipfile, you will get entries with filenames that - are incorrect, and the incorrect filenames may even contain characters - that are not legal for use within filenames in Windows. Extracting entries - with illegal characters in the filenames will lead to exceptions. It's too - bad, but this is just the way things are with code pages in zip - files. Caveat Emptor. - - - - Example: Suppose you create a zipfile that contains entries with - filenames that have Danish characters. If you use equal to "iso-8859-1" (cp 28591), - the filenames will be correctly encoded in the zip. But, to read that - zipfile correctly, you have to specify the same codepage at the time you - read it. If try to read that zip file with Windows Explorer or another - application that is not flexible with respect to the codepage used to - decode filenames in zipfiles, you will get a filename like "Inf�.txt". - - - - When using DotNetZip to read a zip archive, and the zip archive uses an - arbitrary code page, you must specify the encoding to use before or when - the Zipfile is READ. This means you must use a ZipFile.Read() - method that allows you to specify a System.Text.Encoding parameter. Setting - the ProvisionalAlternateEncoding property after your application has read in - the zip archive will not affect the entry names of entries that have already - been read in. - - - - And now, the exception to the rule described above. One strategy for - specifying the code page for a given zip file is to describe the code page - in a human-readable form in the Zip comment. For example, the comment may - read "Entries in this archive are encoded in the Big5 code page". For - maximum interoperability, the zip comment in this case should be encoded - in the default, IBM437 code page. In this case, the zip comment is - encoded using a different page than the filenames. To do this, Specify - ProvisionalAlternateEncoding to your desired region-specific code - page, once before adding any entries, and then reset - ProvisionalAlternateEncoding to IBM437 before setting the property and calling Save(). - - - - - This example shows how to read a zip file using the Big-5 Chinese code page - (950), and extract each entry in the zip file. For this code to work as - desired, the Zipfile must have been created using the big5 code page - (CP950). This is typical, for example, when using WinRar on a machine with - CP950 set as the default code page. In that case, the names of entries - within the Zip archive will be stored in that code page, and reading the zip - archive must be done using that code page. If the application did not use - the correct code page in ZipFile.Read(), then names of entries within the - zip archive would not be correctly retrieved. - - using (var zip = ZipFile.Read(zipFileName, System.Text.Encoding.GetEncoding("big5"))) - { - // retrieve and extract an entry using a name encoded with CP950 - zip[MyDesiredEntry].Extract("unpack"); - } - - - - Using zip As ZipFile = ZipFile.Read(ZipToExtract, System.Text.Encoding.GetEncoding("big5")) - ' retrieve and extract an entry using a name encoded with CP950 - zip(MyDesiredEntry).Extract("unpack") - End Using - - - - DefaultEncoding - - - - A Text Encoding to use when encoding the filenames and comments for - all the ZipEntry items, during a ZipFile.Save() operation. - - - - Whether the encoding specified here is used during the save depends - on . - - - - - - A flag that tells if and when this instance should apply - AlternateEncoding to encode the filenames and comments associated to - of ZipEntry objects contained within this instance. - - - - - Gets or sets the TextWriter to which status messages are delivered - for the instance. - - - - If the TextWriter is set to a non-null value, then verbose output is sent - to the TextWriter during Add, Read, Save and - Extract operations. Typically, console applications might use - Console.Out and graphical or headless applications might use a - System.IO.StringWriter. The output of this is suitable for viewing - by humans. - - - - - In this example, a console application instantiates a ZipFile, then - sets the StatusMessageTextWriter to Console.Out. At that - point, all verbose status messages for that ZipFile are sent to the - console. - - - - using (ZipFile zip= ZipFile.Read(FilePath)) - { - zip.StatusMessageTextWriter= System.Console.Out; - // messages are sent to the console during extraction - zip.ExtractAll(); - } - - - - Using zip As ZipFile = ZipFile.Read(FilePath) - zip.StatusMessageTextWriter= System.Console.Out - 'Status Messages will be sent to the console during extraction - zip.ExtractAll() - End Using - - - - In this example, a Windows Forms application instantiates a - ZipFile, then sets the StatusMessageTextWriter to a - StringWriter. At that point, all verbose status messages for that - ZipFile are sent to the StringWriter. - - - - var sw = new System.IO.StringWriter(); - using (ZipFile zip= ZipFile.Read(FilePath)) - { - zip.StatusMessageTextWriter= sw; - zip.ExtractAll(); - } - Console.WriteLine("{0}", sw.ToString()); - - - - Dim sw as New System.IO.StringWriter - Using zip As ZipFile = ZipFile.Read(FilePath) - zip.StatusMessageTextWriter= sw - zip.ExtractAll() - End Using - 'Status Messages are now available in sw - - - - - - - Gets or sets the name for the folder to store the temporary file - this library writes when saving a zip archive. - - - - - This library will create a temporary file when saving a Zip archive to a - file. This file is written when calling one of the Save() methods - that does not save to a stream, or one of the SaveSelfExtractor() - methods. - - - - By default, the library will create the temporary file in the directory - specified for the file itself, via the property or via - the method. - - - - Setting this property allows applications to override this default - behavior, so that the library will create the temporary file in the - specified folder. For example, to have the library create the temporary - file in the current working directory, regardless where the ZipFile - is saved, specfy ".". To revert to the default behavior, set this - property to null (Nothing in VB). - - - - When setting the property to a non-null value, the folder specified must - exist; if it does not an exception is thrown. The application should have - write and delete permissions on the folder. The permissions are not - explicitly checked ahead of time; if the application does not have the - appropriate rights, an exception will be thrown at the time Save() - is called. - - - - There is no temporary file created when reading a zip archive. When - saving to a Stream, there is no temporary file created. For example, if - the application is an ASP.NET application and calls Save() - specifying the Response.OutputStream as the output stream, there is - no temporary file created. - - - - - Thrown when setting the property if the directory does not exist. - - - - - - Sets the password to be used on the ZipFile instance. - - - - - - When writing a zip archive, this password is applied to the entries, not - to the zip archive itself. It applies to any ZipEntry subsequently - added to the ZipFile, using one of the AddFile, - AddDirectory, AddEntry, or AddItem methods, etc. - When reading a zip archive, this property applies to any entry - subsequently extracted from the ZipFile using one of the Extract - methods on the ZipFile class. - - - - When writing a zip archive, keep this in mind: though the password is set - on the ZipFile object, according to the Zip spec, the "directory" of the - archive - in other words the list of entries or files contained in the archive - is - not encrypted with the password, or protected in any way. If you set the - Password property, the password actually applies to individual entries - that are added to the archive, subsequent to the setting of this property. - The list of filenames in the archive that is eventually created will - appear in clear text, but the contents of the individual files are - encrypted. This is how Zip encryption works. - - - - One simple way around this limitation is to simply double-wrap sensitive - filenames: Store the files in a zip file, and then store that zip file - within a second, "outer" zip file. If you apply a password to the outer - zip file, then readers will be able to see that the outer zip file - contains an inner zip file. But readers will not be able to read the - directory or file list of the inner zip file. - - - - If you set the password on the ZipFile, and then add a set of files - to the archive, then each entry is encrypted with that password. You may - also want to change the password between adding different entries. If you - set the password, add an entry, then set the password to null - (Nothing in VB), and add another entry, the first entry is - encrypted and the second is not. If you call AddFile(), then set - the Password property, then call ZipFile.Save, the file - added will not be password-protected, and no warning will be generated. - - - - When setting the Password, you may also want to explicitly set the property, to specify how to encrypt the entries added - to the ZipFile. If you set the Password to a non-null value and do not - set , then PKZip 2.0 ("Weak") encryption is used. - This encryption is relatively weak but is very interoperable. If you set - the password to a null value (Nothing in VB), Encryption is - reset to None. - - - - All of the preceding applies to writing zip archives, in other words when - you use one of the Save methods. To use this property when reading or an - existing ZipFile, do the following: set the Password property on the - ZipFile, then call one of the Extract() overloads on the . In this case, the entry is extracted using the - Password that is specified on the ZipFile instance. If you - have not set the Password property, then the password is - null, and the entry is extracted with no password. - - - - If you set the Password property on the ZipFile, then call - Extract() an entry that has not been encrypted with a password, the - password is not used for that entry, and the ZipEntry is extracted - as normal. In other words, the password is used only if necessary. - - - - The class also has a Password property. It takes precedence - over this property on the ZipFile. Typically, you would use the - per-entry Password when most entries in the zip archive use one password, - and a few entries use a different password. If all entries in the zip - file use the same password, then it is simpler to just set this property - on the ZipFile itself, whether creating a zip archive or extracting - a zip archive. - - - - - - - This example creates a zip file, using password protection for the - entries, and then extracts the entries from the zip file. When creating - the zip file, the Readme.txt file is not protected with a password, but - the other two are password-protected as they are saved. During extraction, - each file is extracted with the appropriate password. - - - // create a file with encryption - using (ZipFile zip = new ZipFile()) - { - zip.AddFile("ReadMe.txt"); - zip.Password= "!Secret1"; - zip.AddFile("MapToTheSite-7440-N49th.png"); - zip.AddFile("2008-Regional-Sales-Report.pdf"); - zip.Save("EncryptedArchive.zip"); - } - - // extract entries that use encryption - using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) - { - zip.Password= "!Secret1"; - zip.ExtractAll("extractDir"); - } - - - - - Using zip As New ZipFile - zip.AddFile("ReadMe.txt") - zip.Password = "123456!" - zip.AddFile("MapToTheSite-7440-N49th.png") - zip.Password= "!Secret1"; - zip.AddFile("2008-Regional-Sales-Report.pdf") - zip.Save("EncryptedArchive.zip") - End Using - - - ' extract entries that use encryption - Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) - zip.Password= "!Secret1" - zip.ExtractAll("extractDir") - End Using - - - - - - ZipFile.Encryption - ZipEntry.Password - - - - The action the library should take when extracting a file that already - exists. - - - - - This property affects the behavior of the Extract methods (one of the - Extract() or ExtractWithPassword() overloads), when - extraction would would overwrite an existing filesystem file. If you do - not set this property, the library throws an exception when extracting an - entry would overwrite an existing file. - - - - This property has no effect when extracting to a stream, or when the file - to be extracted does not already exist. - - - - - - - The action the library should take when an error is encountered while - opening or reading files as they are saved into a zip archive. - - - - - Errors can occur as a file is being saved to the zip archive. For - example, the File.Open may fail, or a File.Read may fail, because of - lock conflicts or other reasons. - - - - The first problem might occur after having called AddDirectory() on a - directory that contains a Clipper .dbf file; the file is locked by - Clipper and cannot be opened for read by another process. An example of - the second problem might occur when trying to zip a .pst file that is in - use by Microsoft Outlook. Outlook locks a range on the file, which allows - other processes to open the file, but not read it in its entirety. - - - - This property tells DotNetZip what you would like to do in the case of - these errors. The primary options are: ZipErrorAction.Throw to - throw an exception (this is the default behavior if you don't set this - property); ZipErrorAction.Skip to Skip the file for which there - was an error and continue saving; ZipErrorAction.Retry to Retry - the entry that caused the problem; or - ZipErrorAction.InvokeErrorEvent to invoke an event handler. - - - - This property is implicitly set to ZipErrorAction.InvokeErrorEvent - if you add a handler to the event. If you set - this property to something other than - ZipErrorAction.InvokeErrorEvent, then the ZipError - event is implicitly cleared. What it means is you can set one or the - other (or neither), depending on what you want, but you never need to set - both. - - - - As with some other properties on the ZipFile class, like , , and , setting this property on a ZipFile - instance will cause the specified ZipErrorAction to be used on all - items that are subsequently added to the - ZipFile instance. If you set this property after you have added - items to the ZipFile, but before you have called Save(), - those items will not use the specified error handling action. - - - - If you want to handle any errors that occur with any entry in the zip - file in the same way, then set this property once, before adding any - entries to the zip archive. - - - - If you set this property to ZipErrorAction.Skip and you'd like to - learn which files may have been skipped after a Save(), you can - set the on the ZipFile before - calling Save(). A message will be emitted into that writer for - each skipped file, if any. - - - - - - This example shows how to tell DotNetZip to skip any files for which an - error is generated during the Save(). - - Public Sub SaveZipFile() - Dim SourceFolder As String = "fodder" - Dim DestFile As String = "eHandler.zip" - Dim sw as New StringWriter - Using zipArchive As ZipFile = New ZipFile - ' Tell DotNetZip to skip any files for which it encounters an error - zipArchive.ZipErrorAction = ZipErrorAction.Skip - zipArchive.StatusMessageTextWriter = sw - zipArchive.AddDirectory(SourceFolder) - zipArchive.Save(DestFile) - End Using - ' examine sw here to see any messages - End Sub - - - - - - - - - - The Encryption to use for entries added to the ZipFile. - - - - - Set this when creating a zip archive, or when updating a zip archive. The - specified Encryption is applied to the entries subsequently added to the - ZipFile instance. Applications do not need to set the - Encryption property when reading or extracting a zip archive. - - - - If you set this to something other than EncryptionAlgorithm.None, you - will also need to set the . - - - - As with some other properties on the ZipFile class, like and , setting this - property on a ZipFile instance will cause the specified - EncryptionAlgorithm to be used on all items - that are subsequently added to the ZipFile instance. In other - words, if you set this property after you have added items to the - ZipFile, but before you have called Save(), those items will - not be encrypted or protected with a password in the resulting zip - archive. To get a zip archive with encrypted entries, set this property, - along with the property, before calling - AddFile, AddItem, or AddDirectory (etc.) on the - ZipFile instance. - - - - If you read a ZipFile, you can modify the Encryption on an - encrypted entry, only by setting the Encryption property on the - ZipEntry itself. Setting the Encryption property on the - ZipFile, once it has been created via a call to - ZipFile.Read(), does not affect entries that were previously read. - - - - For example, suppose you read a ZipFile, and there is an encrypted - entry. Setting the Encryption property on that ZipFile and - then calling Save() on the ZipFile does not update the - Encryption used for the entries in the archive. Neither is an - exception thrown. Instead, what happens during the Save() is that - all previously existing entries are copied through to the new zip archive, - with whatever encryption and password that was used when originally - creating the zip archive. Upon re-reading that archive, to extract - entries, applications should use the original password or passwords, if - any. - - - - Suppose an application reads a ZipFile, and there is an encrypted - entry. Setting the Encryption property on that ZipFile and - then adding new entries (via AddFile(), AddEntry(), etc) - and then calling Save() on the ZipFile does not update the - Encryption on any of the entries that had previously been in the - ZipFile. The Encryption property applies only to the - newly-added entries. - - - - - - - This example creates a zip archive that uses encryption, and then extracts - entries from the archive. When creating the zip archive, the ReadMe.txt - file is zipped without using a password or encryption. The other files - use encryption. - - - - // Create a zip archive with AES Encryption. - using (ZipFile zip = new ZipFile()) - { - zip.AddFile("ReadMe.txt"); - zip.Encryption= EncryptionAlgorithm.WinZipAes256; - zip.Password= "Top.Secret.No.Peeking!"; - zip.AddFile("7440-N49th.png"); - zip.AddFile("2008-Regional-Sales-Report.pdf"); - zip.Save("EncryptedArchive.zip"); - } - - // Extract a zip archive that uses AES Encryption. - // You do not need to specify the algorithm during extraction. - using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) - { - zip.Password= "Top.Secret.No.Peeking!"; - zip.ExtractAll("extractDirectory"); - } - - - - ' Create a zip that uses Encryption. - Using zip As New ZipFile() - zip.Encryption= EncryptionAlgorithm.WinZipAes256 - zip.Password= "Top.Secret.No.Peeking!" - zip.AddFile("ReadMe.txt") - zip.AddFile("7440-N49th.png") - zip.AddFile("2008-Regional-Sales-Report.pdf") - zip.Save("EncryptedArchive.zip") - End Using - - ' Extract a zip archive that uses AES Encryption. - ' You do not need to specify the algorithm during extraction. - Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) - zip.Password= "Top.Secret.No.Peeking!" - zip.ExtractAll("extractDirectory") - End Using - - - - - ZipFile.Password - ZipEntry.Encryption - - - - A callback that allows the application to specify the compression level - to use for entries subsequently added to the zip archive. - - - - - - With this callback, the DotNetZip library allows the application to - determine whether compression will be used, at the time of the - Save. This may be useful if the application wants to favor - speed over size, and wants to defer the decision until the time of - Save. - - - - Typically applications set the property on - the ZipFile or on each ZipEntry to determine the level of - compression used. This is done at the time the entry is added to the - ZipFile. Setting the property to - Ionic.Zlib.CompressionLevel.None means no compression will be used. - - - - This callback allows the application to defer the decision on the - CompressionLevel to use, until the time of the call to - ZipFile.Save(). The callback is invoked once per ZipEntry, - at the time the data for the entry is being written out as part of a - Save() operation. The application can use whatever criteria it - likes in determining the level to return. For example, an application may - wish that no .mp3 files should be compressed, because they are already - compressed and the extra compression is not worth the CPU time incurred, - and so can return None for all .mp3 entries. - - - - The library determines whether compression will be attempted for an entry - this way: If the entry is a zero length file, or a directory, no - compression is used. Otherwise, if this callback is set, it is invoked - and the CompressionLevel is set to the return value. If this - callback has not been set, then the previously set value for - CompressionLevel is used. - - - - - - - The maximum size of an output segment, when saving a split Zip file. - - - - Make sure you do not read from this field if you've set the value using - - - - Set this to a non-zero value before calling or to specify that the ZipFile should be saved as a - split archive, also sometimes called a spanned archive. Some also - call them multi-file archives. - - - - A split zip archive is saved in a set of discrete filesystem files, - rather than in a single file. This is handy when transmitting the - archive in email or some other mechanism that has a limit to the size of - each file. The first file in a split archive will be named - basename.z01, the second will be named basename.z02, and - so on. The final file is named basename.zip. According to the zip - specification from PKWare, the minimum value is 65536, for a 64k segment - size. The maximum number of segments allows in a split archive is 99. - - - - The value of this property determines the maximum size of a split - segment when writing a split archive. For example, suppose you have a - ZipFile that would save to a single file of 200k. If you set the - MaxOutputSegmentSize to 65536 before calling Save(), you - will get four distinct output files. On the other hand if you set this - property to 256k, then you will get a single-file archive for that - ZipFile. - - - - The size of each split output file will be as large as possible, up to - the maximum size set here. The zip specification requires that some data - fields in a zip archive may not span a split boundary, and an output - segment may be smaller than the maximum if necessary to avoid that - problem. Also, obviously the final segment of the archive may be smaller - than the maximum segment size. Segments will never be larger than the - value set with this property. - - - - You can save a split Zip file only when saving to a regular filesystem - file. It's not possible to save a split zip file as a self-extracting - archive, nor is it possible to save a split zip file to a stream. When - saving to a SFX or to a Stream, this property is ignored. - - - - About interoperability: Split or spanned zip files produced by DotNetZip - can be read by WinZip or PKZip, and vice-versa. Segmented zip files may - not be readable by other tools, if those other tools don't support zip - spanning or splitting. When in doubt, test. I don't believe Windows - Explorer can extract a split archive. - - - - This property has no effect when reading a split archive. You can read - a split archive in the normal way with DotNetZip. - - - - When saving a zip file, if you want a regular zip file rather than a - split zip file, don't set this property, or set it to Zero. - - - - If you read a split archive, with and - then subsequently call ZipFile.Save(), unless you set this - property before calling Save(), you will get a normal, - single-file archive. - - - - - - - - The maximum size of an output segment, when saving a split Zip file. - - - - If you set this value, make sure you do not accidently use in your code - - - - Set this to a non-zero value before calling or to specify that the ZipFile should be saved as a - split archive, also sometimes called a spanned archive. Some also - call them multi-file archives. - - - - A split zip archive is saved in a set of discrete filesystem files, - rather than in a single file. This is handy when transmitting the - archive in email or some other mechanism that has a limit to the size of - each file. The first file in a split archive will be named - basename.z01, the second will be named basename.z02, and - so on. The final file is named basename.zip. According to the zip - specification from PKWare, the minimum value is 65536, for a 64k segment - size. The maximum number of segments allows in a split archive is 99. - - - - The value of this property determines the maximum size of a split - segment when writing a split archive. For example, suppose you have a - ZipFile that would save to a single file of 200k. If you set the - MaxOutputSegmentSize to 65536 before calling Save(), you - will get four distinct output files. On the other hand if you set this - property to 256k, then you will get a single-file archive for that - ZipFile. - - - - The size of each split output file will be as large as possible, up to - the maximum size set here. The zip specification requires that some data - fields in a zip archive may not span a split boundary, and an output - segment may be smaller than the maximum if necessary to avoid that - problem. Also, obviously the final segment of the archive may be smaller - than the maximum segment size. Segments will never be larger than the - value set with this property. - - - - You can save a split Zip file only when saving to a regular filesystem - file. It's not possible to save a split zip file as a self-extracting - archive, nor is it possible to save a split zip file to a stream. When - saving to a SFX or to a Stream, this property is ignored. - - - - About interoperability: Split or spanned zip files produced by DotNetZip - can be read by WinZip or PKZip, and vice-versa. Segmented zip files may - not be readable by other tools, if those other tools don't support zip - spanning or splitting. When in doubt, test. I don't believe Windows - Explorer can extract a split archive. - - - - This property has no effect when reading a split archive. You can read - a split archive in the normal way with DotNetZip. - - - - When saving a zip file, if you want a regular zip file rather than a - split zip file, don't set this property, or set it to Zero. - - - - If you read a split archive, with and - then subsequently call ZipFile.Save(), unless you set this - property before calling Save(), you will get a normal, - single-file archive. - - - - - - - - Returns the number of segments used in the most recent Save() operation. - - - - This is normally zero, unless you have set the property. If you have set , and then you save a file, after the call to - Save() completes, you can read this value to learn the number of segments that - were created. - - - If you call Save("Archive.zip"), and it creates 5 segments, then you - will have filesystem files named Archive.z01, Archive.z02, Archive.z03, - Archive.z04, and Archive.zip, and the value of this property will be 5. - - - - - - - The size threshold for an entry, above which a parallel deflate is used. - - - - - - DotNetZip will use multiple threads to compress any ZipEntry, - if the entry is larger than the given size. Zero means "always - use parallel deflate", while -1 means "never use parallel - deflate". The default value for this property is 512k. Aside - from the special values of 0 and 1, the minimum value is 65536. - - - - If the entry size cannot be known before compression, as with a - read-forward stream, then Parallel deflate will never be - performed, unless the value of this property is zero. - - - - A parallel deflate operations will speed up the compression of - large files, on computers with multiple CPUs or multiple CPU - cores. For files above 1mb, on a dual core or dual-cpu (2p) - machine, the time required to compress the file can be 70% of the - single-threaded deflate. For very large files on 4p machines the - compression can be done in 30% of the normal time. The downside - is that parallel deflate consumes extra memory during the deflate, - and the deflation is not as effective. - - - - Parallel deflate tends to yield slightly less compression when - compared to as single-threaded deflate; this is because the original - data stream is split into multiple independent buffers, each of which - is compressed in parallel. But because they are treated - independently, there is no opportunity to share compression - dictionaries. For that reason, a deflated stream may be slightly - larger when compressed using parallel deflate, as compared to a - traditional single-threaded deflate. Sometimes the increase over the - normal deflate is as much as 5% of the total compressed size. For - larger files it can be as small as 0.1%. - - - - Multi-threaded compression does not give as much an advantage when - using Encryption. This is primarily because encryption tends to slow - down the entire pipeline. Also, multi-threaded compression gives less - of an advantage when using lower compression levels, for example . You may have to - perform some tests to determine the best approach for your situation. - - - - - - - - - - The maximum number of buffer pairs to use when performing - parallel compression. - - - - - This property sets an upper limit on the number of memory - buffer pairs to create when performing parallel - compression. The implementation of the parallel - compression stream allocates multiple buffers to - facilitate parallel compression. As each buffer fills up, - the stream uses - ThreadPool.QueueUserWorkItem() to compress those - buffers in a background threadpool thread. After a buffer - is compressed, it is re-ordered and written to the output - stream. - - - - A higher number of buffer pairs enables a higher degree of - parallelism, which tends to increase the speed of compression on - multi-cpu computers. On the other hand, a higher number of buffer - pairs also implies a larger memory consumption, more active worker - threads, and a higher cpu utilization for any compression. This - property enables the application to limit its memory consumption and - CPU utilization behavior depending on requirements. - - - - For each compression "task" that occurs in parallel, there are 2 - buffers allocated: one for input and one for output. This property - sets a limit for the number of pairs. The total amount of storage - space allocated for buffering will then be (N*S*2), where N is the - number of buffer pairs, S is the size of each buffer (). By default, DotNetZip allocates 4 buffer - pairs per CPU core, so if your machine has 4 cores, and you retain - the default buffer size of 128k, then the - ParallelDeflateOutputStream will use 4 * 4 * 2 * 128kb of buffer - memory in total, or 4mb, in blocks of 128kb. If you then set this - property to 8, then the number will be 8 * 2 * 128kb of buffer - memory, or 2mb. - - - - CPU utilization will also go up with additional buffers, because a - larger number of buffer pairs allows a larger number of background - threads to compress in parallel. If you find that parallel - compression is consuming too much memory or CPU, you can adjust this - value downward. - - - - The default value is 16. Different values may deliver better or - worse results, depending on your priorities and the dynamic - performance characteristics of your storage and compute resources. - - - - This property is not the number of buffer pairs to use; it is an - upper limit. An illustration: Suppose you have an application that - uses the default value of this property (which is 16), and it runs - on a machine with 2 CPU cores. In that case, DotNetZip will allocate - 4 buffer pairs per CPU core, for a total of 8 pairs. The upper - limit specified by this property has no effect. - - - - The application can set this value at any time - before calling ZipFile.Save(). - - - - - - - - Provides a string representation of the instance. - a string representation of the instance. - - - - Returns the version number on the DotNetZip assembly. - - - - - This property is exposed as a convenience. Callers could also get the - version value by retrieving GetName().Version on the - System.Reflection.Assembly object pointing to the DotNetZip - assembly. But sometimes it is not clear which assembly is being loaded. - This property makes it clear. - - - This static property is primarily useful for diagnostic purposes. - - - - - - Creates a new ZipFile instance, using the specified filename. - - - - - Applications can use this constructor to create a new ZipFile for writing, - or to slurp in an existing zip archive for read and update purposes. - - - - To create a new zip archive, an application can call this constructor, - passing the name of a file that does not exist. The name may be a fully - qualified path. Then the application can add directories or files to the - ZipFile via AddDirectory(), AddFile(), AddItem() - and then write the zip archive to the disk by calling Save(). The - zip file is not actually opened and written to the disk until the - application calls ZipFile.Save(). At that point the new zip file - with the given name is created. - - - - If you won't know the name of the Zipfile until the time you call - ZipFile.Save(), or if you plan to save to a stream (which has no - name), then you should use the no-argument constructor. - - - - The application can also call this constructor to read an existing zip - archive. passing the name of a valid zip file that does exist. But, it's - better form to use the static method, - passing the name of the zip file, because using ZipFile.Read() in - your code communicates very clearly what you are doing. In either case, - the file is then read into the ZipFile instance. The app can then - enumerate the entries or can modify the zip file, for example adding - entries, removing entries, changing comments, and so on. - - - - One advantage to this parameterized constructor: it allows applications to - use the same code to add items to a zip archive, regardless of whether the - zip file exists. - - - - Instances of the ZipFile class are not multi-thread safe. You may - not party on a single instance with multiple threads. You may have - multiple threads that each use a distinct ZipFile instance, or you - can synchronize multi-thread access to a single instance. - - - - By the way, since DotNetZip is so easy to use, don't you think you should - donate $5 or $10? - - - - - - Thrown if name refers to an existing file that is not a valid zip file. - - - - This example shows how to create a zipfile, and add a few files into it. - - String ZipFileToCreate = "archive1.zip"; - String DirectoryToZip = "c:\\reports"; - using (ZipFile zip = new ZipFile()) - { - // Store all files found in the top level directory, into the zip archive. - String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); - zip.AddFiles(filenames, "files"); - zip.Save(ZipFileToCreate); - } - - - - Dim ZipFileToCreate As String = "archive1.zip" - Dim DirectoryToZip As String = "c:\reports" - Using zip As ZipFile = New ZipFile() - Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) - zip.AddFiles(filenames, "files") - zip.Save(ZipFileToCreate) - End Using - - - - The filename to use for the new zip archive. - - - - - Creates a new ZipFile instance, using the specified name for the - filename, and the specified Encoding. - - - - - See the documentation on the ZipFile - constructor that accepts a single string argument for basic - information on all the ZipFile constructors. - - - - The Encoding is used as the default alternate encoding for entries with - filenames or comments that cannot be encoded with the IBM437 code page. - This is equivalent to setting the property on the ZipFile - instance after construction. - - - - Instances of the ZipFile class are not multi-thread safe. You may - not party on a single instance with multiple threads. You may have - multiple threads that each use a distinct ZipFile instance, or you - can synchronize multi-thread access to a single instance. - - - - - - Thrown if name refers to an existing file that is not a valid zip file. - - - The filename to use for the new zip archive. - The Encoding is used as the default alternate - encoding for entries with filenames or comments that cannot be encoded - with the IBM437 code page. - - - - Create a zip file, without specifying a target filename or stream to save to. - - - - - See the documentation on the ZipFile - constructor that accepts a single string argument for basic - information on all the ZipFile constructors. - - - - After instantiating with this constructor and adding entries to the - archive, the application should call or - to save to a file or a - stream, respectively. The application can also set the - property and then call the no-argument method. (This - is the preferred approach for applications that use the library through - COM interop.) If you call the no-argument method - without having set the Name of the ZipFile, either through - the parameterized constructor or through the explicit property , the - Save() will throw, because there is no place to save the file. - - - Instances of the ZipFile class are not multi-thread safe. You may - have multiple threads that each use a distinct ZipFile instance, or - you can synchronize multi-thread access to a single instance. - - - - - This example creates a Zip archive called Backup.zip, containing all the files - in the directory DirectoryToZip. Files within subdirectories are not zipped up. - - using (ZipFile zip = new ZipFile()) - { - // Store all files found in the top level directory, into the zip archive. - // note: this code does not recurse subdirectories! - String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); - zip.AddFiles(filenames, "files"); - zip.Save("Backup.zip"); - } - - - - Using zip As New ZipFile - ' Store all files found in the top level directory, into the zip archive. - ' note: this code does not recurse subdirectories! - Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) - zip.AddFiles(filenames, "files") - zip.Save("Backup.zip") - End Using - - - - - - Create a zip file, specifying a text Encoding, but without specifying a - target filename or stream to save to. - - - - - See the documentation on the ZipFile - constructor that accepts a single string argument for basic - information on all the ZipFile constructors. - - - - - - The Encoding is used as the default alternate encoding for entries with - filenames or comments that cannot be encoded with the IBM437 code page. - - - - - Creates a new ZipFile instance, using the specified name for the - filename, and the specified status message writer. - - - - - See the documentation on the ZipFile - constructor that accepts a single string argument for basic - information on all the ZipFile constructors. - - - - This version of the constructor allows the caller to pass in a TextWriter, - to which verbose messages will be written during extraction or creation of - the zip archive. A console application may wish to pass - System.Console.Out to get messages on the Console. A graphical or headless - application may wish to capture the messages in a different - TextWriter, for example, a StringWriter, and then display - the messages in a TextBox, or generate an audit log of ZipFile operations. - - - - To encrypt the data for the files added to the ZipFile instance, - set the Password property after creating the ZipFile instance. - - - - Instances of the ZipFile class are not multi-thread safe. You may - not party on a single instance with multiple threads. You may have - multiple threads that each use a distinct ZipFile instance, or you - can synchronize multi-thread access to a single instance. - - - - - - Thrown if name refers to an existing file that is not a valid zip file. - - - - - using (ZipFile zip = new ZipFile("Backup.zip", Console.Out)) - { - // Store all files found in the top level directory, into the zip archive. - // note: this code does not recurse subdirectories! - // Status messages will be written to Console.Out - String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); - zip.AddFiles(filenames); - zip.Save(); - } - - - - Using zip As New ZipFile("Backup.zip", Console.Out) - ' Store all files found in the top level directory, into the zip archive. - ' note: this code does not recurse subdirectories! - ' Status messages will be written to Console.Out - Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) - zip.AddFiles(filenames) - zip.Save() - End Using - - - - The filename to use for the new zip archive. - A TextWriter to use for writing - verbose status messages. - - - - Creates a new ZipFile instance, using the specified name for the - filename, the specified status message writer, and the specified Encoding. - - - - - This constructor works like the ZipFile - constructor that accepts a single string argument. See that - reference for detail on what this constructor does. - - - - This version of the constructor allows the caller to pass in a - TextWriter, and an Encoding. The TextWriter will collect - verbose messages that are generated by the library during extraction or - creation of the zip archive. A console application may wish to pass - System.Console.Out to get messages on the Console. A graphical or - headless application may wish to capture the messages in a different - TextWriter, for example, a StringWriter, and then display - the messages in a TextBox, or generate an audit log of - ZipFile operations. - - - - The Encoding is used as the default alternate encoding for entries - with filenames or comments that cannot be encoded with the IBM437 code - page. This is a equivalent to setting the property on the ZipFile - instance after construction. - - - - To encrypt the data for the files added to the ZipFile instance, - set the Password property after creating the ZipFile - instance. - - - - Instances of the ZipFile class are not multi-thread safe. You may - not party on a single instance with multiple threads. You may have - multiple threads that each use a distinct ZipFile instance, or you - can synchronize multi-thread access to a single instance. - - - - - - Thrown if fileName refers to an existing file that is not a valid zip file. - - - The filename to use for the new zip archive. - A TextWriter to use for writing verbose - status messages. - - The Encoding is used as the default alternate encoding for entries with - filenames or comments that cannot be encoded with the IBM437 code page. - - - - - Initialize a ZipFile instance by reading in a zip file. - - - - - - This method is primarily useful from COM Automation environments, when - reading or extracting zip files. In COM, it is not possible to invoke - parameterized constructors for a class. A COM Automation application can - update a zip file by using the default (no argument) - constructor, then calling Initialize() to read the contents - of an on-disk zip archive into the ZipFile instance. - - - - .NET applications are encouraged to use the ZipFile.Read() methods - for better clarity. - - - - the name of the existing zip file to read in. - - - - This is an integer indexer into the Zip archive. - - - - - This property is read-only. - - - - Internally, the ZipEntry instances that belong to the - ZipFile are stored in a Dictionary. When you use this - indexer the first time, it creates a read-only - List<ZipEntry> from the Dictionary.Values Collection. - If at any time you modify the set of entries in the ZipFile, - either by adding an entry, removing an entry, or renaming an - entry, a new List will be created, and the numeric indexes for the - remaining entries may be different. - - - - This means you cannot rename any ZipEntry from - inside an enumeration of the zip file. - - - - The index value. - - - - - - The ZipEntry within the Zip archive at the specified index. If the - entry does not exist in the archive, this indexer throws. - - - - - - This is a name-based indexer into the Zip archive. - - - - - This property is read-only. - - - - The property on the ZipFile - determines whether retrieval via this indexer is done via case-sensitive - comparisons. By default, retrieval is not case sensitive. This makes - sense on Windows, in which filesystems are not case sensitive. - - - - Regardless of case-sensitivity, it is not always the case that - this[value].FileName == value. In other words, the FileName - property of the ZipEntry retrieved with this indexer, may or may - not be equal to the index value. - - - - This is because DotNetZip performs a normalization of filenames passed to - this indexer, before attempting to retrieve the item. That normalization - includes: removal of a volume letter and colon, swapping backward slashes - for forward slashes. So, zip["dir1\\entry1.txt"].FileName == - "dir1/entry.txt". - - - - Directory entries in the zip file may be retrieved via this indexer only - with names that have a trailing slash. DotNetZip automatically appends a - trailing slash to the names of any directory entries added to a zip. - - - - - - This example extracts only the entries in a zip file that are .txt files. - - using (ZipFile zip = ZipFile.Read("PackedDocuments.zip")) - { - foreach (string s1 in zip.EntryFilenames) - { - if (s1.EndsWith(".txt")) - zip[s1].Extract("textfiles"); - } - } - - - Using zip As ZipFile = ZipFile.Read("PackedDocuments.zip") - Dim s1 As String - For Each s1 In zip.EntryFilenames - If s1.EndsWith(".txt") Then - zip(s1).Extract("textfiles") - End If - Next - End Using - - - - - - Thrown if the caller attempts to assign a non-null value to the indexer. - - - - The name of the file, including any directory path, to retrieve from the - zip. The filename match is not case-sensitive by default; you can use the - property to change this behavior. The - pathname can use forward-slashes or backward slashes. - - - - The ZipEntry within the Zip archive, given by the specified - filename. If the named entry does not exist in the archive, this indexer - returns null (Nothing in VB). - - - - - - The list of filenames for the entries contained within the zip archive. - - - - According to the ZIP specification, the names of the entries use forward - slashes in pathnames. If you are scanning through the list, you may have - to swap forward slashes for backslashes. - - - - - - This example shows one way to test if a filename is already contained - within a zip archive. - - String zipFileToRead= "PackedDocuments.zip"; - string candidate = "DatedMaterial.xps"; - using (ZipFile zip = new ZipFile(zipFileToRead)) - { - if (zip.EntryFilenames.Contains(candidate)) - Console.WriteLine("The file '{0}' exists in the zip archive '{1}'", - candidate, - zipFileName); - else - Console.WriteLine("The file, '{0}', does not exist in the zip archive '{1}'", - candidate, - zipFileName); - Console.WriteLine(); - } - - - Dim zipFileToRead As String = "PackedDocuments.zip" - Dim candidate As String = "DatedMaterial.xps" - Using zip As ZipFile.Read(ZipFileToRead) - If zip.EntryFilenames.Contains(candidate) Then - Console.WriteLine("The file '{0}' exists in the zip archive '{1}'", _ - candidate, _ - zipFileName) - Else - Console.WriteLine("The file, '{0}', does not exist in the zip archive '{1}'", _ - candidate, _ - zipFileName) - End If - Console.WriteLine - End Using - - - - - The list of strings for the filenames contained within the Zip archive. - - - - - - Returns the readonly collection of entries in the Zip archive. - - - - - - If there are no entries in the current ZipFile, the value returned is a - non-null zero-element collection. If there are entries in the zip file, - the elements are returned in no particular order. - - - This is the implied enumerator on the ZipFile class. If you use a - ZipFile instance in a context that expects an enumerator, you will - get this collection. - - - - - - - Returns a readonly collection of entries in the Zip archive, sorted by FileName. - - - - If there are no entries in the current ZipFile, the value returned - is a non-null zero-element collection. If there are entries in the zip - file, the elements are returned sorted by the name of the entry. - - - - - This example fills a Windows Forms ListView with the entries in a zip file. - - - using (ZipFile zip = ZipFile.Read(zipFile)) - { - foreach (ZipEntry entry in zip.EntriesSorted) - { - ListViewItem item = new ListViewItem(n.ToString()); - n++; - string[] subitems = new string[] { - entry.FileName.Replace("/","\\"), - entry.LastModified.ToString("yyyy-MM-dd HH:mm:ss"), - entry.UncompressedSize.ToString(), - String.Format("{0,5:F0}%", entry.CompressionRatio), - entry.CompressedSize.ToString(), - (entry.UsesEncryption) ? "Y" : "N", - String.Format("{0:X8}", entry.Crc)}; - - foreach (String s in subitems) - { - ListViewItem.ListViewSubItem subitem = new ListViewItem.ListViewSubItem(); - subitem.Text = s; - item.SubItems.Add(subitem); - } - - this.listView1.Items.Add(item); - } - } - - - - - - - - Returns the number of entries in the Zip archive. - - - - - Removes the given ZipEntry from the zip archive. - - - - - After calling RemoveEntry, the application must call Save to - make the changes permanent. - - - - - Thrown if the specified ZipEntry does not exist in the ZipFile. - - - - In this example, all entries in the zip archive dating from before - December 31st, 2007, are removed from the archive. This is actually much - easier if you use the RemoveSelectedEntries method. But I needed an - example for RemoveEntry, so here it is. - - String ZipFileToRead = "ArchiveToModify.zip"; - System.DateTime Threshold = new System.DateTime(2007,12,31); - using (ZipFile zip = ZipFile.Read(ZipFileToRead)) - { - var EntriesToRemove = new System.Collections.Generic.List<ZipEntry>(); - foreach (ZipEntry e in zip) - { - if (e.LastModified < Threshold) - { - // We cannot remove the entry from the list, within the context of - // an enumeration of said list. - // So we add the doomed entry to a list to be removed later. - EntriesToRemove.Add(e); - } - } - - // actually remove the doomed entries. - foreach (ZipEntry zombie in EntriesToRemove) - zip.RemoveEntry(zombie); - - zip.Comment= String.Format("This zip archive was updated at {0}.", - System.DateTime.Now.ToString("G")); - - // save with a different name - zip.Save("Archive-Updated.zip"); - } - - - - Dim ZipFileToRead As String = "ArchiveToModify.zip" - Dim Threshold As New DateTime(2007, 12, 31) - Using zip As ZipFile = ZipFile.Read(ZipFileToRead) - Dim EntriesToRemove As New System.Collections.Generic.List(Of ZipEntry) - Dim e As ZipEntry - For Each e In zip - If (e.LastModified < Threshold) Then - ' We cannot remove the entry from the list, within the context of - ' an enumeration of said list. - ' So we add the doomed entry to a list to be removed later. - EntriesToRemove.Add(e) - End If - Next - - ' actually remove the doomed entries. - Dim zombie As ZipEntry - For Each zombie In EntriesToRemove - zip.RemoveEntry(zombie) - Next - zip.Comment = String.Format("This zip archive was updated at {0}.", DateTime.Now.ToString("G")) - 'save as a different name - zip.Save("Archive-Updated.zip") - End Using - - - - - The ZipEntry to remove from the zip. - - - - - - - - Removes the ZipEntry with the given filename from the zip archive. - - - - - After calling RemoveEntry, the application must call Save to - make the changes permanent. - - - - - - Thrown if the ZipFile is not updatable. - - - - Thrown if a ZipEntry with the specified filename does not exist in - the ZipFile. - - - - - This example shows one way to remove an entry with a given filename from - an existing zip archive. - - - String zipFileToRead= "PackedDocuments.zip"; - string candidate = "DatedMaterial.xps"; - using (ZipFile zip = ZipFile.Read(zipFileToRead)) - { - if (zip.EntryFilenames.Contains(candidate)) - { - zip.RemoveEntry(candidate); - zip.Comment= String.Format("The file '{0}' has been removed from this archive.", - Candidate); - zip.Save(); - } - } - - - Dim zipFileToRead As String = "PackedDocuments.zip" - Dim candidate As String = "DatedMaterial.xps" - Using zip As ZipFile = ZipFile.Read(zipFileToRead) - If zip.EntryFilenames.Contains(candidate) Then - zip.RemoveEntry(candidate) - zip.Comment = String.Format("The file '{0}' has been removed from this archive.", Candidate) - zip.Save - End If - End Using - - - - - The name of the file, including any directory path, to remove from the zip. - The filename match is not case-sensitive by default; you can use the - CaseSensitiveRetrieval property to change this behavior. The - pathname can use forward-slashes or backward slashes. - - - - - - Closes the read and write streams associated - to the ZipFile, if necessary. - - - - The Dispose() method is generally employed implicitly, via a using(..) {..} - statement. (Using...End Using in VB) If you do not employ a using - statement, insure that your application calls Dispose() explicitly. For - example, in a Powershell application, or an application that uses the COM - interop interface, you must call Dispose() explicitly. - - - - This example extracts an entry selected by name, from the Zip file to the - Console. - - using (ZipFile zip = ZipFile.Read(zipfile)) - { - foreach (ZipEntry e in zip) - { - if (WantThisEntry(e.FileName)) - zip.Extract(e.FileName, Console.OpenStandardOutput()); - } - } // Dispose() is called implicitly here. - - - - Using zip As ZipFile = ZipFile.Read(zipfile) - Dim e As ZipEntry - For Each e In zip - If WantThisEntry(e.FileName) Then - zip.Extract(e.FileName, Console.OpenStandardOutput()) - End If - Next - End Using ' Dispose is implicity called here - - - - - - Disposes any managed resources, if the flag is set, then marks the - instance disposed. This method is typically not called explicitly from - application code. - - - - Applications should call the no-arg Dispose method. - - - - indicates whether the method should dispose streams or not. - - - - - Default size of the buffer used for IO. - - - - - An event handler invoked when a Save() starts, before and after each - entry has been written to the archive, when a Save() completes, and - during other Save events. - - - - - Depending on the particular event, different properties on the parameter are set. The following - table summarizes the available EventTypes and the conditions under - which this event handler is invoked with a - SaveProgressEventArgs with the given EventType. - - - - - value of EntryType - Meaning and conditions - - - - ZipProgressEventType.Saving_Started - Fired when ZipFile.Save() begins. - - - - - ZipProgressEventType.Saving_BeforeSaveEntry - - Fired within ZipFile.Save(), just before writing data for each - particular entry. - - - - - ZipProgressEventType.Saving_AfterSaveEntry - - Fired within ZipFile.Save(), just after having finished writing data - for each particular entry. - - - - - ZipProgressEventType.Saving_Completed - Fired when ZipFile.Save() has completed. - - - - - ZipProgressEventType.Saving_AfterSaveTempArchive - - Fired after the temporary file has been created. This happens only - when saving to a disk file. This event will not be invoked when - saving to a stream. - - - - - ZipProgressEventType.Saving_BeforeRenameTempArchive - - Fired just before renaming the temporary file to the permanent - location. This happens only when saving to a disk file. This event - will not be invoked when saving to a stream. - - - - - ZipProgressEventType.Saving_AfterRenameTempArchive - - Fired just after renaming the temporary file to the permanent - location. This happens only when saving to a disk file. This event - will not be invoked when saving to a stream. - - - - - ZipProgressEventType.Saving_AfterCompileSelfExtractor - - Fired after a self-extracting archive has finished compiling. This - EventType is used only within SaveSelfExtractor(). - - - - - ZipProgressEventType.Saving_BytesRead - - Set during the save of a particular entry, to update progress of the - Save(). When this EventType is set, the BytesTransferred is the - number of bytes that have been read from the source stream. The - TotalBytesToTransfer is the number of bytes in the uncompressed - file. - - - - - - - - - This example uses an anonymous method to handle the - SaveProgress event, by updating a progress bar. - - - progressBar1.Value = 0; - progressBar1.Max = listbox1.Items.Count; - using (ZipFile zip = new ZipFile()) - { - // listbox1 contains a list of filenames - zip.AddFiles(listbox1.Items); - - // do the progress bar: - zip.SaveProgress += (sender, e) => { - if (e.EventType == ZipProgressEventType.Saving_BeforeWriteEntry) { - progressBar1.PerformStep(); - } - }; - - zip.Save(fs); - } - - - - - This example uses a named method as the - SaveProgress event handler, to update the user, in a - console-based application. - - - static bool justHadByteUpdate= false; - public static void SaveProgress(object sender, SaveProgressEventArgs e) - { - if (e.EventType == ZipProgressEventType.Saving_Started) - Console.WriteLine("Saving: {0}", e.ArchiveName); - - else if (e.EventType == ZipProgressEventType.Saving_Completed) - { - justHadByteUpdate= false; - Console.WriteLine(); - Console.WriteLine("Done: {0}", e.ArchiveName); - } - - else if (e.EventType == ZipProgressEventType.Saving_BeforeWriteEntry) - { - if (justHadByteUpdate) - Console.WriteLine(); - Console.WriteLine(" Writing: {0} ({1}/{2})", - e.CurrentEntry.FileName, e.EntriesSaved, e.EntriesTotal); - justHadByteUpdate= false; - } - - else if (e.EventType == ZipProgressEventType.Saving_EntryBytesRead) - { - if (justHadByteUpdate) - Console.SetCursorPosition(0, Console.CursorTop); - Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, e.TotalBytesToTransfer, - e.BytesTransferred / (0.01 * e.TotalBytesToTransfer )); - justHadByteUpdate= true; - } - } - - public static ZipUp(string targetZip, string directory) - { - using (var zip = new ZipFile()) { - zip.SaveProgress += SaveProgress; - zip.AddDirectory(directory); - zip.Save(targetZip); - } - } - - - - - Public Sub ZipUp(ByVal targetZip As String, ByVal directory As String) - Using zip As ZipFile = New ZipFile - AddHandler zip.SaveProgress, AddressOf MySaveProgress - zip.AddDirectory(directory) - zip.Save(targetZip) - End Using - End Sub - - Private Shared justHadByteUpdate As Boolean = False - - Public Shared Sub MySaveProgress(ByVal sender As Object, ByVal e As SaveProgressEventArgs) - If (e.EventType Is ZipProgressEventType.Saving_Started) Then - Console.WriteLine("Saving: {0}", e.ArchiveName) - - ElseIf (e.EventType Is ZipProgressEventType.Saving_Completed) Then - justHadByteUpdate = False - Console.WriteLine - Console.WriteLine("Done: {0}", e.ArchiveName) - - ElseIf (e.EventType Is ZipProgressEventType.Saving_BeforeWriteEntry) Then - If justHadByteUpdate Then - Console.WriteLine - End If - Console.WriteLine(" Writing: {0} ({1}/{2})", e.CurrentEntry.FileName, e.EntriesSaved, e.EntriesTotal) - justHadByteUpdate = False - - ElseIf (e.EventType Is ZipProgressEventType.Saving_EntryBytesRead) Then - If justHadByteUpdate Then - Console.SetCursorPosition(0, Console.CursorTop) - End If - Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, _ - e.TotalBytesToTransfer, _ - (CDbl(e.BytesTransferred) / (0.01 * e.TotalBytesToTransfer))) - justHadByteUpdate = True - End If - End Sub - - - - - - This is a more complete example of using the SaveProgress - events in a Windows Forms application, with a - Thread object. - - - delegate void SaveEntryProgress(SaveProgressEventArgs e); - delegate void ButtonClick(object sender, EventArgs e); - - public class WorkerOptions - { - public string ZipName; - public string Folder; - public string Encoding; - public string Comment; - public int ZipFlavor; - public Zip64Option Zip64; - } - - private int _progress2MaxFactor; - private bool _saveCanceled; - private long _totalBytesBeforeCompress; - private long _totalBytesAfterCompress; - private Thread _workerThread; - - - private void btnZipup_Click(object sender, EventArgs e) - { - KickoffZipup(); - } - - private void btnCancel_Click(object sender, EventArgs e) - { - if (this.lblStatus.InvokeRequired) - { - this.lblStatus.Invoke(new ButtonClick(this.btnCancel_Click), new object[] { sender, e }); - } - else - { - _saveCanceled = true; - lblStatus.Text = "Canceled..."; - ResetState(); - } - } - - private void KickoffZipup() - { - _folderName = tbDirName.Text; - - if (_folderName == null || _folderName == "") return; - if (this.tbZipName.Text == null || this.tbZipName.Text == "") return; - - // check for existence of the zip file: - if (System.IO.File.Exists(this.tbZipName.Text)) - { - var dlgResult = MessageBox.Show(String.Format("The file you have specified ({0}) already exists." + - " Do you want to overwrite this file?", this.tbZipName.Text), - "Confirmation is Required", MessageBoxButtons.YesNo, MessageBoxIcon.Question); - if (dlgResult != DialogResult.Yes) return; - System.IO.File.Delete(this.tbZipName.Text); - } - - _saveCanceled = false; - _nFilesCompleted = 0; - _totalBytesAfterCompress = 0; - _totalBytesBeforeCompress = 0; - this.btnOk.Enabled = false; - this.btnOk.Text = "Zipping..."; - this.btnCancel.Enabled = true; - lblStatus.Text = "Zipping..."; - - var options = new WorkerOptions - { - ZipName = this.tbZipName.Text, - Folder = _folderName, - Encoding = "ibm437" - }; - - if (this.comboBox1.SelectedIndex != 0) - { - options.Encoding = this.comboBox1.SelectedItem.ToString(); - } - - if (this.radioFlavorSfxCmd.Checked) - options.ZipFlavor = 2; - else if (this.radioFlavorSfxGui.Checked) - options.ZipFlavor = 1; - else options.ZipFlavor = 0; - - if (this.radioZip64AsNecessary.Checked) - options.Zip64 = Zip64Option.AsNecessary; - else if (this.radioZip64Always.Checked) - options.Zip64 = Zip64Option.Always; - else options.Zip64 = Zip64Option.Never; - - options.Comment = String.Format("Encoding:{0} || Flavor:{1} || ZIP64:{2}\r\nCreated at {3} || {4}\r\n", - options.Encoding, - FlavorToString(options.ZipFlavor), - options.Zip64.ToString(), - System.DateTime.Now.ToString("yyyy-MMM-dd HH:mm:ss"), - this.Text); - - if (this.tbComment.Text != TB_COMMENT_NOTE) - options.Comment += this.tbComment.Text; - - _workerThread = new Thread(this.DoSave); - _workerThread.Name = "Zip Saver thread"; - _workerThread.Start(options); - this.Cursor = Cursors.WaitCursor; - } - - - private void DoSave(Object p) - { - WorkerOptions options = p as WorkerOptions; - try - { - using (var zip1 = new ZipFile()) - { - zip1.ProvisionalAlternateEncoding = System.Text.Encoding.GetEncoding(options.Encoding); - zip1.Comment = options.Comment; - zip1.AddDirectory(options.Folder); - _entriesToZip = zip1.EntryFileNames.Count; - SetProgressBars(); - zip1.SaveProgress += this.zip1_SaveProgress; - - zip1.UseZip64WhenSaving = options.Zip64; - - if (options.ZipFlavor == 1) - zip1.SaveSelfExtractor(options.ZipName, SelfExtractorFlavor.WinFormsApplication); - else if (options.ZipFlavor == 2) - zip1.SaveSelfExtractor(options.ZipName, SelfExtractorFlavor.ConsoleApplication); - else - zip1.Save(options.ZipName); - } - } - catch (System.Exception exc1) - { - MessageBox.Show(String.Format("Exception while zipping: {0}", exc1.Message)); - btnCancel_Click(null, null); - } - } - - - - void zip1_SaveProgress(object sender, SaveProgressEventArgs e) - { - switch (e.EventType) - { - case ZipProgressEventType.Saving_AfterWriteEntry: - StepArchiveProgress(e); - break; - case ZipProgressEventType.Saving_EntryBytesRead: - StepEntryProgress(e); - break; - case ZipProgressEventType.Saving_Completed: - SaveCompleted(); - break; - case ZipProgressEventType.Saving_AfterSaveTempArchive: - // this event only occurs when saving an SFX file - TempArchiveSaved(); - break; - } - if (_saveCanceled) - e.Cancel = true; - } - - - - private void StepArchiveProgress(SaveProgressEventArgs e) - { - if (this.progressBar1.InvokeRequired) - { - this.progressBar1.Invoke(new SaveEntryProgress(this.StepArchiveProgress), new object[] { e }); - } - else - { - if (!_saveCanceled) - { - _nFilesCompleted++; - this.progressBar1.PerformStep(); - _totalBytesAfterCompress += e.CurrentEntry.CompressedSize; - _totalBytesBeforeCompress += e.CurrentEntry.UncompressedSize; - - // reset the progress bar for the entry: - this.progressBar2.Value = this.progressBar2.Maximum = 1; - - this.Update(); - } - } - } - - - private void StepEntryProgress(SaveProgressEventArgs e) - { - if (this.progressBar2.InvokeRequired) - { - this.progressBar2.Invoke(new SaveEntryProgress(this.StepEntryProgress), new object[] { e }); - } - else - { - if (!_saveCanceled) - { - if (this.progressBar2.Maximum == 1) - { - // reset - Int64 max = e.TotalBytesToTransfer; - _progress2MaxFactor = 0; - while (max > System.Int32.MaxValue) - { - max /= 2; - _progress2MaxFactor++; - } - this.progressBar2.Maximum = (int)max; - lblStatus.Text = String.Format("{0} of {1} files...({2})", - _nFilesCompleted + 1, _entriesToZip, e.CurrentEntry.FileName); - } - - int xferred = e.BytesTransferred >> _progress2MaxFactor; - - this.progressBar2.Value = (xferred >= this.progressBar2.Maximum) - ? this.progressBar2.Maximum - : xferred; - - this.Update(); - } - } - } - - private void SaveCompleted() - { - if (this.lblStatus.InvokeRequired) - { - this.lblStatus.Invoke(new MethodInvoker(this.SaveCompleted)); - } - else - { - lblStatus.Text = String.Format("Done, Compressed {0} files, {1:N0}% of original.", - _nFilesCompleted, (100.00 * _totalBytesAfterCompress) / _totalBytesBeforeCompress); - ResetState(); - } - } - - private void ResetState() - { - this.btnCancel.Enabled = false; - this.btnOk.Enabled = true; - this.btnOk.Text = "Zip it!"; - this.progressBar1.Value = 0; - this.progressBar2.Value = 0; - this.Cursor = Cursors.Default; - if (!_workerThread.IsAlive) - _workerThread.Join(); - } - - - - - - - - - - - An event handler invoked before, during, and after the reading of a zip archive. - - - - - Depending on the particular event being signaled, different properties on the - parameter are set. The following table - summarizes the available EventTypes and the conditions under which this - event handler is invoked with a ReadProgressEventArgs with the given EventType. - - - - - value of EntryType - Meaning and conditions - - - - ZipProgressEventType.Reading_Started - Fired just as ZipFile.Read() begins. Meaningful properties: ArchiveName. - - - - - ZipProgressEventType.Reading_Completed - Fired when ZipFile.Read() has completed. Meaningful properties: ArchiveName. - - - - - ZipProgressEventType.Reading_ArchiveBytesRead - Fired while reading, updates the number of bytes read for the entire archive. - Meaningful properties: ArchiveName, CurrentEntry, BytesTransferred, TotalBytesToTransfer. - - - - - ZipProgressEventType.Reading_BeforeReadEntry - Indicates an entry is about to be read from the archive. - Meaningful properties: ArchiveName, EntriesTotal. - - - - - ZipProgressEventType.Reading_AfterReadEntry - Indicates an entry has just been read from the archive. - Meaningful properties: ArchiveName, EntriesTotal, CurrentEntry. - - - - - - - - - - - - - An event handler invoked before, during, and after extraction of - entries in the zip archive. - - - - - Depending on the particular event, different properties on the parameter are set. The following - table summarizes the available EventTypes and the conditions under - which this event handler is invoked with a - ExtractProgressEventArgs with the given EventType. - - - - - value of EntryType - Meaning and conditions - - - - ZipProgressEventType.Extracting_BeforeExtractAll - - Set when ExtractAll() begins. The ArchiveName, Overwrite, and - ExtractLocation properties are meaningful. - - - - ZipProgressEventType.Extracting_AfterExtractAll - - Set when ExtractAll() has completed. The ArchiveName, Overwrite, - and ExtractLocation properties are meaningful. - - - - - ZipProgressEventType.Extracting_BeforeExtractEntry - - Set when an Extract() on an entry in the ZipFile has begun. - Properties that are meaningful: ArchiveName, EntriesTotal, - CurrentEntry, Overwrite, ExtractLocation, EntriesExtracted. - - - - - ZipProgressEventType.Extracting_AfterExtractEntry - - Set when an Extract() on an entry in the ZipFile has completed. - Properties that are meaningful: ArchiveName, EntriesTotal, - CurrentEntry, Overwrite, ExtractLocation, EntriesExtracted. - - - - - ZipProgressEventType.Extracting_EntryBytesWritten - - Set within a call to Extract() on an entry in the ZipFile, as data - is extracted for the entry. Properties that are meaningful: - ArchiveName, CurrentEntry, BytesTransferred, TotalBytesToTransfer. - - - - - ZipProgressEventType.Extracting_ExtractEntryWouldOverwrite - - Set within a call to Extract() on an entry in the ZipFile, when the - extraction would overwrite an existing file. This event type is used - only when ExtractExistingFileAction on the ZipFile or - ZipEntry is set to InvokeExtractProgressEvent. - - - - - - - - - - private static bool justHadByteUpdate = false; - public static void ExtractProgress(object sender, ExtractProgressEventArgs e) - { - if(e.EventType == ZipProgressEventType.Extracting_EntryBytesWritten) - { - if (justHadByteUpdate) - Console.SetCursorPosition(0, Console.CursorTop); - - Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, e.TotalBytesToTransfer, - e.BytesTransferred / (0.01 * e.TotalBytesToTransfer )); - justHadByteUpdate = true; - } - else if(e.EventType == ZipProgressEventType.Extracting_BeforeExtractEntry) - { - if (justHadByteUpdate) - Console.WriteLine(); - Console.WriteLine("Extracting: {0}", e.CurrentEntry.FileName); - justHadByteUpdate= false; - } - } - - public static ExtractZip(string zipToExtract, string directory) - { - string TargetDirectory= "extract"; - using (var zip = ZipFile.Read(zipToExtract)) { - zip.ExtractProgress += ExtractProgress; - foreach (var e in zip1) - { - e.Extract(TargetDirectory, true); - } - } - } - - - - Public Shared Sub Main(ByVal args As String()) - Dim ZipToUnpack As String = "C1P3SML.zip" - Dim TargetDir As String = "ExtractTest_Extract" - Console.WriteLine("Extracting file {0} to {1}", ZipToUnpack, TargetDir) - Using zip1 As ZipFile = ZipFile.Read(ZipToUnpack) - AddHandler zip1.ExtractProgress, AddressOf MyExtractProgress - Dim e As ZipEntry - For Each e In zip1 - e.Extract(TargetDir, True) - Next - End Using - End Sub - - Private Shared justHadByteUpdate As Boolean = False - - Public Shared Sub MyExtractProgress(ByVal sender As Object, ByVal e As ExtractProgressEventArgs) - If (e.EventType = ZipProgressEventType.Extracting_EntryBytesWritten) Then - If ExtractTest.justHadByteUpdate Then - Console.SetCursorPosition(0, Console.CursorTop) - End If - Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, e.TotalBytesToTransfer, (CDbl(e.BytesTransferred) / (0.01 * e.TotalBytesToTransfer))) - ExtractTest.justHadByteUpdate = True - ElseIf (e.EventType = ZipProgressEventType.Extracting_BeforeExtractEntry) Then - If ExtractTest.justHadByteUpdate Then - Console.WriteLine - End If - Console.WriteLine("Extracting: {0}", e.CurrentEntry.FileName) - ExtractTest.justHadByteUpdate = False - End If - End Sub - - - - - - - - - - An event handler invoked before, during, and after Adding entries to a zip archive. - - - - Adding a large number of entries to a zip file can take a long - time. For example, when calling on a - directory that contains 50,000 files, it could take 3 minutes or so. - This event handler allws an application to track the progress of the Add - operation, and to optionally cancel a lengthy Add operation. - - - - - - int _numEntriesToAdd= 0; - int _numEntriesAdded= 0; - void AddProgressHandler(object sender, AddProgressEventArgs e) - { - switch (e.EventType) - { - case ZipProgressEventType.Adding_Started: - Console.WriteLine("Adding files to the zip..."); - break; - case ZipProgressEventType.Adding_AfterAddEntry: - _numEntriesAdded++; - Console.WriteLine(String.Format("Adding file {0}/{1} :: {2}", - _numEntriesAdded, _numEntriesToAdd, e.CurrentEntry.FileName)); - break; - case ZipProgressEventType.Adding_Completed: - Console.WriteLine("Added all files"); - break; - } - } - - void CreateTheZip() - { - using (ZipFile zip = new ZipFile()) - { - zip.AddProgress += AddProgressHandler; - zip.AddDirectory(System.IO.Path.GetFileName(DirToZip)); - zip.Save(ZipFileToCreate); - } - } - - - - - - Private Sub AddProgressHandler(ByVal sender As Object, ByVal e As AddProgressEventArgs) - Select Case e.EventType - Case ZipProgressEventType.Adding_Started - Console.WriteLine("Adding files to the zip...") - Exit Select - Case ZipProgressEventType.Adding_AfterAddEntry - Console.WriteLine(String.Format("Adding file {0}", e.CurrentEntry.FileName)) - Exit Select - Case ZipProgressEventType.Adding_Completed - Console.WriteLine("Added all files") - Exit Select - End Select - End Sub - - Sub CreateTheZip() - Using zip as ZipFile = New ZipFile - AddHandler zip.AddProgress, AddressOf AddProgressHandler - zip.AddDirectory(System.IO.Path.GetFileName(DirToZip)) - zip.Save(ZipFileToCreate); - End Using - End Sub - - - - - - - - - - - - An event that is raised when an error occurs during open or read of files - while saving a zip archive. - - - - - Errors can occur as a file is being saved to the zip archive. For - example, the File.Open may fail, or a File.Read may fail, because of - lock conflicts or other reasons. If you add a handler to this event, - you can handle such errors in your own code. If you don't add a - handler, the library will throw an exception if it encounters an I/O - error during a call to Save(). - - - - Setting a handler implicitly sets to - ZipErrorAction.InvokeErrorEvent. - - - - The handler you add applies to all items that are - subsequently added to the ZipFile instance. If you set this - property after you have added items to the ZipFile, but before you - have called Save(), errors that occur while saving those items - will not cause the error handler to be invoked. - - - - If you want to handle any errors that occur with any entry in the zip - file using the same error handler, then add your error handler once, - before adding any entries to the zip archive. - - - - In the error handler method, you need to set the property on the - ZipErrorEventArgs.CurrentEntry. This communicates back to - DotNetZip what you would like to do with this particular error. Within - an error handler, if you set the ZipEntry.ZipErrorAction property - on the ZipEntry to ZipErrorAction.InvokeErrorEvent or if - you don't set it at all, the library will throw the exception. (It is the - same as if you had set the ZipEntry.ZipErrorAction property on the - ZipEntry to ZipErrorAction.Throw.) If you set the - ZipErrorEventArgs.Cancel to true, the entire Save() will be - canceled. - - - - In the case that you use ZipErrorAction.Skip, implying that - you want to skip the entry for which there's been an error, DotNetZip - tries to seek backwards in the output stream, and truncate all bytes - written on behalf of that particular entry. This works only if the - output stream is seekable. It will not work, for example, when using - ASPNET's Response.OutputStream. - - - - - - - This example shows how to use an event handler to handle - errors during save of the zip file. - - - public static void MyZipError(object sender, ZipErrorEventArgs e) - { - Console.WriteLine("Error saving {0}...", e.FileName); - Console.WriteLine(" Exception: {0}", e.exception); - ZipEntry entry = e.CurrentEntry; - string response = null; - // Ask the user whether he wants to skip this error or not - do - { - Console.Write("Retry, Skip, Throw, or Cancel ? (R/S/T/C) "); - response = Console.ReadLine(); - Console.WriteLine(); - - } while (response != null && - response[0]!='S' && response[0]!='s' && - response[0]!='R' && response[0]!='r' && - response[0]!='T' && response[0]!='t' && - response[0]!='C' && response[0]!='c'); - - e.Cancel = (response[0]=='C' || response[0]=='c'); - - if (response[0]=='S' || response[0]=='s') - entry.ZipErrorAction = ZipErrorAction.Skip; - else if (response[0]=='R' || response[0]=='r') - entry.ZipErrorAction = ZipErrorAction.Retry; - else if (response[0]=='T' || response[0]=='t') - entry.ZipErrorAction = ZipErrorAction.Throw; - } - - public void SaveTheFile() - { - string directoryToZip = "fodder"; - string directoryInArchive = "files"; - string zipFileToCreate = "Archive.zip"; - using (var zip = new ZipFile()) - { - // set the event handler before adding any entries - zip.ZipError += MyZipError; - zip.AddDirectory(directoryToZip, directoryInArchive); - zip.Save(zipFileToCreate); - } - } - - - - Private Sub MyZipError(ByVal sender As Object, ByVal e As Ionic.Zip.ZipErrorEventArgs) - ' At this point, the application could prompt the user for an action to take. - ' But in this case, this application will simply automatically skip the file, in case of error. - Console.WriteLine("Zip Error, entry {0}", e.CurrentEntry.FileName) - Console.WriteLine(" Exception: {0}", e.exception) - ' set the desired ZipErrorAction on the CurrentEntry to communicate that to DotNetZip - e.CurrentEntry.ZipErrorAction = Zip.ZipErrorAction.Skip - End Sub - - Public Sub SaveTheFile() - Dim directoryToZip As String = "fodder" - Dim directoryInArchive As String = "files" - Dim zipFileToCreate as String = "Archive.zip" - Using zipArchive As ZipFile = New ZipFile - ' set the event handler before adding any entries - AddHandler zipArchive.ZipError, AddressOf MyZipError - zipArchive.AddDirectory(directoryToZip, directoryInArchive) - zipArchive.Save(zipFileToCreate) - End Using - End Sub - - - - - - - - - Extracts all of the items in the zip archive, to the specified path in the - filesystem. The path can be relative or fully-qualified. - - - - - This method will extract all entries in the ZipFile to the - specified path. - - - - If an extraction of a file from the zip archive would overwrite an - existing file in the filesystem, the action taken is dictated by the - ExtractExistingFile property, which overrides any setting you may have - made on individual ZipEntry instances. By default, if you have not - set that property on the ZipFile instance, the entry will not - be extracted, the existing file will not be overwritten and an - exception will be thrown. To change this, set the property, or use the - overload that allows you to - specify an ExtractExistingFileAction parameter. - - - - The action to take when an extract would overwrite an existing file - applies to all entries. If you want to set this on a per-entry basis, - then you must use one of the ZipEntry.Extract methods. - - - - This method will send verbose output messages to the , if it is set on the ZipFile - instance. - - - - You may wish to take advantage of the ExtractProgress event. - - - - About timestamps: When extracting a file entry from a zip archive, the - extracted file gets the last modified time of the entry as stored in - the archive. The archive may also store extended file timestamp - information, including last accessed and created times. If these are - present in the ZipEntry, then the extracted file will also get - these times. - - - - A Directory entry is somewhat different. It will get the times as - described for a file entry, but, if there are file entries in the zip - archive that, when extracted, appear in the just-created directory, - then when those file entries are extracted, the last modified and last - accessed times of the directory will change, as a side effect. The - result is that after an extraction of a directory and a number of - files within the directory, the last modified and last accessed - timestamps on the directory will reflect the time that the last file - was extracted into the directory, rather than the time stored in the - zip archive for the directory. - - - - To compensate, when extracting an archive with ExtractAll, - DotNetZip will extract all the file and directory entries as described - above, but it will then make a second pass on the directories, and - reset the times on the directories to reflect what is stored in the - zip archive. - - - - This compensation is performed only within the context of an - ExtractAll. If you call ZipEntry.Extract on a directory - entry, the timestamps on directory in the filesystem will reflect the - times stored in the zip. If you then call ZipEntry.Extract on - a file entry, which is extracted into the directory, the timestamps on - the directory will be updated to the current time. - - - - - This example extracts all the entries in a zip archive file, to the - specified target directory. The extraction will overwrite any - existing files silently. - - - String TargetDirectory= "unpack"; - using(ZipFile zip= ZipFile.Read(ZipFileToExtract)) - { - zip.ExtractExistingFile= ExtractExistingFileAction.OverwriteSilently; - zip.ExtractAll(TargetDirectory); - } - - - - Dim TargetDirectory As String = "unpack" - Using zip As ZipFile = ZipFile.Read(ZipFileToExtract) - zip.ExtractExistingFile= ExtractExistingFileAction.OverwriteSilently - zip.ExtractAll(TargetDirectory) - End Using - - - - - - - - The path to which the contents of the zipfile will be extracted. - The path can be relative or fully-qualified. - - - - - - Extracts all of the items in the zip archive, to the specified path in the - filesystem, using the specified behavior when extraction would overwrite an - existing file. - - - - - - This method will extract all entries in the ZipFile to the specified - path. For an extraction that would overwrite an existing file, the behavior - is dictated by , which overrides any - setting you may have made on individual ZipEntry instances. - - - - The action to take when an extract would overwrite an existing file - applies to all entries. If you want to set this on a per-entry basis, - then you must use or one of the similar methods. - - - - Calling this method is equivalent to setting the property and then calling . - - - - This method will send verbose output messages to the - , if it is set on the ZipFile instance. - - - - - This example extracts all the entries in a zip archive file, to the - specified target directory. It does not overwrite any existing files. - - String TargetDirectory= "c:\\unpack"; - using(ZipFile zip= ZipFile.Read(ZipFileToExtract)) - { - zip.ExtractAll(TargetDirectory, ExtractExistingFileAction.DontOverwrite); - } - - - - Dim TargetDirectory As String = "c:\unpack" - Using zip As ZipFile = ZipFile.Read(ZipFileToExtract) - zip.ExtractAll(TargetDirectory, ExtractExistingFileAction.DontOverwrite) - End Using - - - - - The path to which the contents of the zipfile will be extracted. - The path can be relative or fully-qualified. - - - - The action to take if extraction would overwrite an existing file. - - - - - - Reads a zip file archive and returns the instance. - - - - - The stream is read using the default System.Text.Encoding, which is the - IBM437 codepage. - - - - - Thrown if the ZipFile cannot be read. The implementation of this method - relies on System.IO.File.OpenRead, which can throw a variety of exceptions, - including specific exceptions if a file is not found, an unauthorized access - exception, exceptions for poorly formatted filenames, and so on. - - - - The name of the zip archive to open. This can be a fully-qualified or relative - pathname. - - - . - - The instance read from the zip archive. - - - - - Reads a zip file archive from the named filesystem file using the - specified options. - - - - - This version of the Read() method allows the caller to pass - in a TextWriter an Encoding, via an instance of the - ReadOptions class. The ZipFile is read in using the - specified encoding for entries where UTF-8 encoding is not - explicitly specified. - - - - - - - This example shows how to read a zip file using the Big-5 Chinese - code page (950), and extract each entry in the zip file, while - sending status messages out to the Console. - - - - For this code to work as intended, the zipfile must have been - created using the big5 code page (CP950). This is typical, for - example, when using WinRar on a machine with CP950 set as the - default code page. In that case, the names of entries within the - Zip archive will be stored in that code page, and reading the zip - archive must be done using that code page. If the application did - not use the correct code page in ZipFile.Read(), then names of - entries within the zip archive would not be correctly retrieved. - - - - string zipToExtract = "MyArchive.zip"; - string extractDirectory = "extract"; - var options = new ReadOptions - { - StatusMessageWriter = System.Console.Out, - Encoding = System.Text.Encoding.GetEncoding(950) - }; - using (ZipFile zip = ZipFile.Read(zipToExtract, options)) - { - foreach (ZipEntry e in zip) - { - e.Extract(extractDirectory); - } - } - - - - - Dim zipToExtract as String = "MyArchive.zip" - Dim extractDirectory as String = "extract" - Dim options as New ReadOptions - options.Encoding = System.Text.Encoding.GetEncoding(950) - options.StatusMessageWriter = System.Console.Out - Using zip As ZipFile = ZipFile.Read(zipToExtract, options) - Dim e As ZipEntry - For Each e In zip - e.Extract(extractDirectory) - Next - End Using - - - - - - - - This example shows how to read a zip file using the default - code page, to remove entries that have a modified date before a given threshold, - sending status messages out to a StringWriter. - - - - var options = new ReadOptions - { - StatusMessageWriter = new System.IO.StringWriter() - }; - using (ZipFile zip = ZipFile.Read("PackedDocuments.zip", options)) - { - var Threshold = new DateTime(2007,7,4); - // We cannot remove the entry from the list, within the context of - // an enumeration of said list. - // So we add the doomed entry to a list to be removed later. - // pass 1: mark the entries for removal - var MarkedEntries = new System.Collections.Generic.List<ZipEntry>(); - foreach (ZipEntry e in zip) - { - if (e.LastModified < Threshold) - MarkedEntries.Add(e); - } - // pass 2: actually remove the entry. - foreach (ZipEntry zombie in MarkedEntries) - zip.RemoveEntry(zombie); - zip.Comment = "This archive has been updated."; - zip.Save(); - } - // can now use contents of sw, eg store in an audit log - - - - Dim options as New ReadOptions - options.StatusMessageWriter = New System.IO.StringWriter - Using zip As ZipFile = ZipFile.Read("PackedDocuments.zip", options) - Dim Threshold As New DateTime(2007, 7, 4) - ' We cannot remove the entry from the list, within the context of - ' an enumeration of said list. - ' So we add the doomed entry to a list to be removed later. - ' pass 1: mark the entries for removal - Dim MarkedEntries As New System.Collections.Generic.List(Of ZipEntry) - Dim e As ZipEntry - For Each e In zip - If (e.LastModified < Threshold) Then - MarkedEntries.Add(e) - End If - Next - ' pass 2: actually remove the entry. - Dim zombie As ZipEntry - For Each zombie In MarkedEntries - zip.RemoveEntry(zombie) - Next - zip.Comment = "This archive has been updated." - zip.Save - End Using - ' can now use contents of sw, eg store in an audit log - - - - - Thrown if the zipfile cannot be read. The implementation of - this method relies on System.IO.File.OpenRead, which - can throw a variety of exceptions, including specific - exceptions if a file is not found, an unauthorized access - exception, exceptions for poorly formatted filenames, and so - on. - - - - The name of the zip archive to open. - This can be a fully-qualified or relative pathname. - - - - The set of options to use when reading the zip file. - - - The ZipFile instance read from the zip archive. - - - - - - - Reads a zip file archive using the specified text encoding, the specified - TextWriter for status messages, and the specified ReadProgress event handler, - and returns the instance. - - - - The name of the zip archive to open. - This can be a fully-qualified or relative pathname. - - - - An event handler for Read operations. - - - - The System.IO.TextWriter to use for writing verbose status messages - during operations on the zip archive. A console application may wish to - pass System.Console.Out to get messages on the Console. A graphical - or headless application may wish to capture the messages in a different - TextWriter, such as a System.IO.StringWriter. - - - - The System.Text.Encoding to use when reading in the zip archive. Be - careful specifying the encoding. If the value you use here is not the same - as the Encoding used when the zip archive was created (possibly by a - different archiver) you will get unexpected results and possibly exceptions. - - - The instance read from the zip archive. - - - - - Reads a zip archive from a stream. - - - - - - When reading from a file, it's probably easier to just use - ZipFile.Read(String, ReadOptions). This - overload is useful when when the zip archive content is - available from an already-open stream. The stream must be - open and readable and seekable when calling this method. The - stream is left open when the reading is completed. - - - - Using this overload, the stream is read using the default - System.Text.Encoding, which is the IBM437 - codepage. If you want to specify the encoding to use when - reading the zipfile content, see - ZipFile.Read(Stream, ReadOptions). This - - - - Reading of zip content begins at the current position in the - stream. This means if you have a stream that concatenates - regular data and zip data, if you position the open, readable - stream at the start of the zip data, you will be able to read - the zip archive using this constructor, or any of the ZipFile - constructors that accept a as - input. Some examples of where this might be useful: the zip - content is concatenated at the end of a regular EXE file, as - some self-extracting archives do. (Note: SFX files produced - by DotNetZip do not work this way; they can be read as normal - ZIP files). Another example might be a stream being read from - a database, where the zip content is embedded within an - aggregate stream of data. - - - - - - - This example shows how to Read zip content from a stream, and - extract one entry into a different stream. In this example, - the filename "NameOfEntryInArchive.doc", refers only to the - name of the entry within the zip archive. A file by that - name is not created in the filesystem. The I/O is done - strictly with the given streams. - - - - using (ZipFile zip = ZipFile.Read(InputStream)) - { - zip.Extract("NameOfEntryInArchive.doc", OutputStream); - } - - - - Using zip as ZipFile = ZipFile.Read(InputStream) - zip.Extract("NameOfEntryInArchive.doc", OutputStream) - End Using - - - - the stream containing the zip data. - - The ZipFile instance read from the stream - - - - - Reads a zip file archive from the given stream using the - specified options. - - - - - - When reading from a file, it's probably easier to just use - ZipFile.Read(String, ReadOptions). This - overload is useful when when the zip archive content is - available from an already-open stream. The stream must be - open and readable and seekable when calling this method. The - stream is left open when the reading is completed. - - - - Reading of zip content begins at the current position in the - stream. This means if you have a stream that concatenates - regular data and zip data, if you position the open, readable - stream at the start of the zip data, you will be able to read - the zip archive using this constructor, or any of the ZipFile - constructors that accept a as - input. Some examples of where this might be useful: the zip - content is concatenated at the end of a regular EXE file, as - some self-extracting archives do. (Note: SFX files produced - by DotNetZip do not work this way; they can be read as normal - ZIP files). Another example might be a stream being read from - a database, where the zip content is embedded within an - aggregate stream of data. - - - - the stream containing the zip data. - - - The set of options to use when reading the zip file. - - - - Thrown if the zip archive cannot be read. - - - The ZipFile instance read from the stream. - - - - - - - Reads a zip archive from a stream, using the specified text Encoding, the - specified TextWriter for status messages, - and the specified ReadProgress event handler. - - - - - Reading of zip content begins at the current position in the stream. This - means if you have a stream that concatenates regular data and zip data, if - you position the open, readable stream at the start of the zip data, you - will be able to read the zip archive using this constructor, or any of the - ZipFile constructors that accept a as - input. Some examples of where this might be useful: the zip content is - concatenated at the end of a regular EXE file, as some self-extracting - archives do. (Note: SFX files produced by DotNetZip do not work this - way). Another example might be a stream being read from a database, where - the zip content is embedded within an aggregate stream of data. - - - - the stream containing the zip data. - - - The System.IO.TextWriter to which verbose status messages are written - during operations on the ZipFile. For example, in a console - application, System.Console.Out works, and will get a message for each entry - added to the ZipFile. If the TextWriter is null, no verbose messages - are written. - - - - The text encoding to use when reading entries that do not have the UTF-8 - encoding bit set. Be careful specifying the encoding. If the value you use - here is not the same as the Encoding used when the zip archive was created - (possibly by a different archiver) you will get unexpected results and - possibly exceptions. See the - property for more information. - - - - An event handler for Read operations. - - - an instance of ZipFile - - - - Checks the given file to see if it appears to be a valid zip file. - - - - - Calling this method is equivalent to calling with the testExtract parameter set to false. - - - - The file to check. - true if the file appears to be a zip file. - - - - Checks a file to see if it is a valid zip file. - - - - - This method opens the specified zip file, reads in the zip archive, - verifying the ZIP metadata as it reads. - - - - If everything succeeds, then the method returns true. If anything fails - - for example if an incorrect signature or CRC is found, indicating a - corrupt file, the the method returns false. This method also returns - false for a file that does not exist. - - - - If is true, as part of its check, this - method reads in the content for each entry, expands it, and checks CRCs. - This provides an additional check beyond verifying the zip header and - directory data. - - - - If is true, and if any of the zip entries - are protected with a password, this method will return false. If you want - to verify a ZipFile that has entries which are protected with a - password, you will need to do that manually. - - - - - The zip file to check. - true if the caller wants to extract each entry. - true if the file contains a valid zip file. - - - - Checks a stream to see if it contains a valid zip archive. - - - - - This method reads the zip archive contained in the specified stream, verifying - the ZIP metadata as it reads. If testExtract is true, this method also extracts - each entry in the archive, dumping all the bits into . - - - - If everything succeeds, then the method returns true. If anything fails - - for example if an incorrect signature or CRC is found, indicating a corrupt - file, the the method returns false. This method also returns false for a - file that does not exist. - - - - If testExtract is true, this method reads in the content for each - entry, expands it, and checks CRCs. This provides an additional check - beyond verifying the zip header data. - - - - If testExtract is true, and if any of the zip entries are protected - with a password, this method will return false. If you want to verify a - ZipFile that has entries which are protected with a password, you will need - to do that manually. - - - - - - The stream to check. - true if the caller wants to extract each entry. - true if the stream contains a valid zip archive. - - - - Delete file with retry on UnauthorizedAccessException. - - - - - When calling File.Delete() on a file that has been "recently" - created, the call sometimes fails with - UnauthorizedAccessException. This method simply retries the Delete 3 - times with a sleep between tries. - - - - the name of the file to be deleted - - - - Saves the Zip archive to a file, specified by the Name property of the - ZipFile. - - - - - The ZipFile instance is written to storage, typically a zip file - in a filesystem, only when the caller calls Save. In the typical - case, the Save operation writes the zip content to a temporary file, and - then renames the temporary file to the desired name. If necessary, this - method will delete a pre-existing file before the rename. - - - - The property is specified either explicitly, - or implicitly using one of the parameterized ZipFile constructors. For - COM Automation clients, the Name property must be set explicitly, - because COM Automation clients cannot call parameterized constructors. - - - - When using a filesystem file for the Zip output, it is possible to call - Save multiple times on the ZipFile instance. With each - call the zip content is re-written to the same output file. - - - - Data for entries that have been added to the ZipFile instance is - written to the output when the Save method is called. This means - that the input streams for those entries must be available at the time - the application calls Save. If, for example, the application - adds entries with AddEntry using a dynamically-allocated - MemoryStream, the memory stream must not have been disposed - before the call to Save. See the property for more discussion of the - availability requirements of the input stream for an entry, and an - approach for providing just-in-time stream lifecycle management. - - - - - - - - Thrown if you haven't specified a location or stream for saving the zip, - either in the constructor or by setting the Name property, or if you try - to save a regular zip archive to a filename with a .exe extension. - - - - Thrown if or is non-zero, and the number - of segments that would be generated for the spanned zip file during the - save operation exceeds 99. If this happens, you need to increase the - segment size. - - - - - - Save the file to a new zipfile, with the given name. - - - - - This method allows the application to explicitly specify the name of the zip - file when saving. Use this when creating a new zip file, or when - updating a zip archive. - - - - An application can also save a zip archive in several places by calling this - method multiple times in succession, with different filenames. - - - - The ZipFile instance is written to storage, typically a zip file in a - filesystem, only when the caller calls Save. The Save operation writes - the zip content to a temporary file, and then renames the temporary file - to the desired name. If necessary, this method will delete a pre-existing file - before the rename. - - - - - - Thrown if you specify a directory for the filename. - - - - The name of the zip archive to save to. Existing files will - be overwritten with great prejudice. - - - - This example shows how to create and Save a zip file. - - using (ZipFile zip = new ZipFile()) - { - zip.AddDirectory(@"c:\reports\January"); - zip.Save("January.zip"); - } - - - - Using zip As New ZipFile() - zip.AddDirectory("c:\reports\January") - zip.Save("January.zip") - End Using - - - - - - This example shows how to update a zip file. - - using (ZipFile zip = ZipFile.Read("ExistingArchive.zip")) - { - zip.AddFile("NewData.csv"); - zip.Save("UpdatedArchive.zip"); - } - - - - Using zip As ZipFile = ZipFile.Read("ExistingArchive.zip") - zip.AddFile("NewData.csv") - zip.Save("UpdatedArchive.zip") - End Using - - - - - - - Save the zip archive to the specified stream. - - - - - The ZipFile instance is written to storage - typically a zip file - in a filesystem, but using this overload, the storage can be anything - accessible via a writable stream - only when the caller calls Save. - - - - Use this method to save the zip content to a stream directly. A common - scenario is an ASP.NET application that dynamically generates a zip file - and allows the browser to download it. The application can call - Save(Response.OutputStream) to write a zipfile directly to the - output stream, without creating a zip file on the disk on the ASP.NET - server. - - - - Be careful when saving a file to a non-seekable stream, including - Response.OutputStream. When DotNetZip writes to a non-seekable - stream, the zip archive is formatted in such a way that may not be - compatible with all zip tools on all platforms. It's a perfectly legal - and compliant zip file, but some people have reported problems opening - files produced this way using the Mac OS archive utility. - - - - - - - This example saves the zipfile content into a MemoryStream, and - then gets the array of bytes from that MemoryStream. - - - using (var zip = new Ionic.Zip.ZipFile()) - { - zip.CompressionLevel= Ionic.Zlib.CompressionLevel.BestCompression; - zip.Password = "VerySecret."; - zip.Encryption = EncryptionAlgorithm.WinZipAes128; - zip.AddFile(sourceFileName); - MemoryStream output = new MemoryStream(); - zip.Save(output); - - byte[] zipbytes = output.ToArray(); - } - - - - - - This example shows a pitfall you should avoid. DO NOT read - from a stream, then try to save to the same stream. DO - NOT DO THIS: - - - - using (var fs = new FileStream(filename, FileMode.Open)) - { - using (var zip = Ionic.Zip.ZipFile.Read(inputStream)) - { - zip.AddEntry("Name1.txt", "this is the content"); - zip.Save(inputStream); // NO NO NO!! - } - } - - - - Better like this: - - - - using (var zip = Ionic.Zip.ZipFile.Read(filename)) - { - zip.AddEntry("Name1.txt", "this is the content"); - zip.Save(); // YES! - } - - - - - - The System.IO.Stream to write to. It must be - writable. If you created the ZipFile instance by calling - ZipFile.Read(), this stream must not be the same stream - you passed to ZipFile.Read(). - - - - - Adds to the ZipFile a set of files from the current working directory on - disk, that conform to the specified criteria. - - - - - This method selects files from the the current working directory matching - the specified criteria, and adds them to the ZipFile. - - - - Specify the criteria in statements of 3 elements: a noun, an operator, and - a value. Consider the string "name != *.doc" . The noun is "name". The - operator is "!=", implying "Not Equal". The value is "*.doc". That - criterion, in English, says "all files with a name that does not end in - the .doc extension." - - - - Supported nouns include "name" (or "filename") for the filename; "atime", - "mtime", and "ctime" for last access time, last modfied time, and created - time of the file, respectively; "attributes" (or "attrs") for the file - attributes; "size" (or "length") for the file length (uncompressed), and - "type" for the type of object, either a file or a directory. The - "attributes", "name" and "type" nouns both support = and != as operators. - The "size", "atime", "mtime", and "ctime" nouns support = and !=, and - >, >=, <, <= as well. The times are taken to be expressed in - local time. - - - - Specify values for the file attributes as a string with one or more of the - characters H,R,S,A,I,L in any order, implying file attributes of Hidden, - ReadOnly, System, Archive, NotContextIndexed, and ReparsePoint (symbolic - link) respectively. - - - - To specify a time, use YYYY-MM-DD-HH:mm:ss or YYYY/MM/DD-HH:mm:ss as the - format. If you omit the HH:mm:ss portion, it is assumed to be 00:00:00 - (midnight). - - - - The value for a size criterion is expressed in integer quantities of bytes, - kilobytes (use k or kb after the number), megabytes (m or mb), or gigabytes - (g or gb). - - - - The value for a name is a pattern to match against the filename, potentially - including wildcards. The pattern follows CMD.exe glob rules: * implies one - or more of any character, while ? implies one character. If the name - pattern contains any slashes, it is matched to the entire filename, - including the path; otherwise, it is matched against only the filename - without the path. This means a pattern of "*\*.*" matches all files one - directory level deep, while a pattern of "*.*" matches all files in all - directories. - - - - To specify a name pattern that includes spaces, use single quotes around the - pattern. A pattern of "'* *.*'" will match all files that have spaces in - the filename. The full criteria string for that would be "name = '* *.*'" . - - - - The value for a type criterion is either F (implying a file) or D (implying - a directory). - - - - Some examples: - - - - - criteria - Files retrieved - - - - name != *.xls - any file with an extension that is not .xls - - - - - name = *.mp3 - any file with a .mp3 extension. - - - - - *.mp3 - (same as above) any file with a .mp3 extension. - - - - - attributes = A - all files whose attributes include the Archive bit. - - - - - attributes != H - all files whose attributes do not include the Hidden bit. - - - - - mtime > 2009-01-01 - all files with a last modified time after January 1st, 2009. - - - - - size > 2gb - all files whose uncompressed size is greater than 2gb. - - - - - type = D - all directories in the filesystem. - - - - - - You can combine criteria with the conjunctions AND or OR. Using a string - like "name = *.txt AND size >= 100k" for the selectionCriteria retrieves - entries whose names end in .txt, and whose uncompressed size is greater than - or equal to 100 kilobytes. - - - - For more complex combinations of criteria, you can use parenthesis to group - clauses in the boolean logic. Without parenthesis, the precedence of the - criterion atoms is determined by order of appearance. Unlike the C# - language, the AND conjunction does not take precendence over the logical OR. - This is important only in strings that contain 3 or more criterion atoms. - In other words, "name = *.txt and size > 1000 or attributes = H" implies - "((name = *.txt AND size > 1000) OR attributes = H)" while "attributes = - H OR name = *.txt and size > 1000" evaluates to "((attributes = H OR name - = *.txt) AND size > 1000)". When in doubt, use parenthesis. - - - - Using time properties requires some extra care. If you want to retrieve all - entries that were last updated on 2009 February 14, specify a time range - like so:"mtime >= 2009-02-14 AND mtime < 2009-02-15". Read this to - say: all files updated after 12:00am on February 14th, until 12:00am on - February 15th. You can use the same bracketing approach to specify any time - period - a year, a month, a week, and so on. - - - - The syntax allows one special case: if you provide a string with no spaces, it is - treated as a pattern to match for the filename. Therefore a string like "*.xls" - will be equivalent to specifying "name = *.xls". - - - - There is no logic in this method that insures that the file inclusion - criteria are internally consistent. For example, it's possible to specify - criteria that says the file must have a size of less than 100 bytes, as well - as a size that is greater than 1000 bytes. Obviously no file will ever - satisfy such criteria, but this method does not detect such logical - inconsistencies. The caller is responsible for insuring the criteria are - sensible. - - - - Using this method, the file selection does not recurse into - subdirectories, and the full path of the selected files is included in the - entries added into the zip archive. If you don't like these behaviors, - see the other overloads of this method. - - - - - This example zips up all *.csv files in the current working directory. - - using (ZipFile zip = new ZipFile()) - { - // To just match on filename wildcards, - // use the shorthand form of the selectionCriteria string. - zip.AddSelectedFiles("*.csv"); - zip.Save(PathToZipArchive); - } - - - Using zip As ZipFile = New ZipFile() - zip.AddSelectedFiles("*.csv") - zip.Save(PathToZipArchive) - End Using - - - - The criteria for file selection - - - - Adds to the ZipFile a set of files from the disk that conform to the - specified criteria, optionally recursing into subdirectories. - - - - - This method selects files from the the current working directory matching - the specified criteria, and adds them to the ZipFile. If - recurseDirectories is true, files are also selected from - subdirectories, and the directory structure in the filesystem is - reproduced in the zip archive, rooted at the current working directory. - - - - Using this method, the full path of the selected files is included in the - entries added into the zip archive. If you don't want this behavior, use - one of the overloads of this method that allows the specification of a - directoryInArchive. - - - - For details on the syntax for the selectionCriteria parameter, see . - - - - - - - This example zips up all *.xml files in the current working directory, or any - subdirectory, that are larger than 1mb. - - - using (ZipFile zip = new ZipFile()) - { - // Use a compound expression in the selectionCriteria string. - zip.AddSelectedFiles("name = *.xml and size > 1024kb", true); - zip.Save(PathToZipArchive); - } - - - Using zip As ZipFile = New ZipFile() - ' Use a compound expression in the selectionCriteria string. - zip.AddSelectedFiles("name = *.xml and size > 1024kb", true) - zip.Save(PathToZipArchive) - End Using - - - - The criteria for file selection - - - If true, the file selection will recurse into subdirectories. - - - - - Adds to the ZipFile a set of files from a specified directory in the - filesystem, that conform to the specified criteria. - - - - - This method selects files that conform to the specified criteria, from the - the specified directory on disk, and adds them to the ZipFile. The search - does not recurse into subdirectores. - - - - Using this method, the full filesystem path of the files on disk is - reproduced on the entries added to the zip file. If you don't want this - behavior, use one of the other overloads of this method. - - - - For details on the syntax for the selectionCriteria parameter, see . - - - - - - - This example zips up all *.xml files larger than 1mb in the directory - given by "d:\rawdata". - - - using (ZipFile zip = new ZipFile()) - { - // Use a compound expression in the selectionCriteria string. - zip.AddSelectedFiles("name = *.xml and size > 1024kb", "d:\\rawdata"); - zip.Save(PathToZipArchive); - } - - - - Using zip As ZipFile = New ZipFile() - ' Use a compound expression in the selectionCriteria string. - zip.AddSelectedFiles("name = *.xml and size > 1024kb", "d:\rawdata) - zip.Save(PathToZipArchive) - End Using - - - - The criteria for file selection - - - The name of the directory on the disk from which to select files. - - - - - Adds to the ZipFile a set of files from the specified directory on disk, - that conform to the specified criteria. - - - - - - This method selects files from the the specified disk directory matching - the specified selection criteria, and adds them to the ZipFile. If - recurseDirectories is true, files are also selected from - subdirectories. - - - - The full directory structure in the filesystem is reproduced on the - entries added to the zip archive. If you don't want this behavior, use - one of the overloads of this method that allows the specification of a - directoryInArchive. - - - - For details on the syntax for the selectionCriteria parameter, see . - - - - - - This example zips up all *.csv files in the "files" directory, or any - subdirectory, that have been saved since 2009 February 14th. - - - using (ZipFile zip = new ZipFile()) - { - // Use a compound expression in the selectionCriteria string. - zip.AddSelectedFiles("name = *.csv and mtime > 2009-02-14", "files", true); - zip.Save(PathToZipArchive); - } - - - Using zip As ZipFile = New ZipFile() - ' Use a compound expression in the selectionCriteria string. - zip.AddSelectedFiles("name = *.csv and mtime > 2009-02-14", "files", true) - zip.Save(PathToZipArchive) - End Using - - - - - This example zips up all files in the current working - directory, and all its child directories, except those in - the excludethis subdirectory. - - Using Zip As ZipFile = New ZipFile(zipfile) - Zip.AddSelectedFfiles("name != 'excludethis\*.*'", datapath, True) - Zip.Save() - End Using - - - - The criteria for file selection - - - The filesystem path from which to select files. - - - - If true, the file selection will recurse into subdirectories. - - - - - Adds to the ZipFile a selection of files from the specified directory on - disk, that conform to the specified criteria, and using a specified root - path for entries added to the zip archive. - - - - - This method selects files from the specified disk directory matching the - specified selection criteria, and adds those files to the ZipFile, using - the specified directory path in the archive. The search does not recurse - into subdirectories. For details on the syntax for the selectionCriteria - parameter, see . - - - - - - - This example zips up all *.psd files in the "photos" directory that have - been saved since 2009 February 14th, and puts them all in a zip file, - using the directory name of "content" in the zip archive itself. When the - zip archive is unzipped, the folder containing the .psd files will be - named "content". - - - using (ZipFile zip = new ZipFile()) - { - // Use a compound expression in the selectionCriteria string. - zip.AddSelectedFiles("name = *.psd and mtime > 2009-02-14", "photos", "content"); - zip.Save(PathToZipArchive); - } - - - Using zip As ZipFile = New ZipFile - zip.AddSelectedFiles("name = *.psd and mtime > 2009-02-14", "photos", "content") - zip.Save(PathToZipArchive) - End Using - - - - - The criteria for selection of files to add to the ZipFile. - - - - The path to the directory in the filesystem from which to select files. - - - - Specifies a directory path to use to in place of the - directoryOnDisk. This path may, or may not, correspond to a real - directory in the current filesystem. If the files within the zip are - later extracted, this is the path used for the extracted file. Passing - null (nothing in VB) will use the path on the file name, if any; in other - words it would use directoryOnDisk, plus any subdirectory. Passing - the empty string ("") will insert the item at the root path within the - archive. - - - - - Adds to the ZipFile a selection of files from the specified directory on - disk, that conform to the specified criteria, optionally recursing through - subdirectories, and using a specified root path for entries added to the - zip archive. - - - - This method selects files from the specified disk directory that match the - specified selection criteria, and adds those files to the ZipFile, using - the specified directory path in the archive. If recurseDirectories - is true, files are also selected from subdirectories, and the directory - structure in the filesystem is reproduced in the zip archive, rooted at - the directory specified by directoryOnDisk. For details on the - syntax for the selectionCriteria parameter, see . - - - - - This example zips up all files that are NOT *.pst files, in the current - working directory and any subdirectories. - - - using (ZipFile zip = new ZipFile()) - { - zip.AddSelectedFiles("name != *.pst", SourceDirectory, "backup", true); - zip.Save(PathToZipArchive); - } - - - Using zip As ZipFile = New ZipFile - zip.AddSelectedFiles("name != *.pst", SourceDirectory, "backup", true) - zip.Save(PathToZipArchive) - End Using - - - - - The criteria for selection of files to add to the ZipFile. - - - - The path to the directory in the filesystem from which to select files. - - - - Specifies a directory path to use to in place of the - directoryOnDisk. This path may, or may not, correspond to a real - directory in the current filesystem. If the files within the zip are - later extracted, this is the path used for the extracted file. Passing - null (nothing in VB) will use the path on the file name, if any; in other - words it would use directoryOnDisk, plus any subdirectory. Passing - the empty string ("") will insert the item at the root path within the - archive. - - - - If true, the method also scans subdirectories for files matching the - criteria. - - - - - Updates the ZipFile with a selection of files from the disk that conform - to the specified criteria. - - - - This method selects files from the specified disk directory that match the - specified selection criteria, and Updates the ZipFile with those - files, using the specified directory path in the archive. If - recurseDirectories is true, files are also selected from - subdirectories, and the directory structure in the filesystem is - reproduced in the zip archive, rooted at the directory specified by - directoryOnDisk. For details on the syntax for the - selectionCriteria parameter, see . - - - - The criteria for selection of files to add to the ZipFile. - - - - The path to the directory in the filesystem from which to select files. - - - - Specifies a directory path to use to in place of the - directoryOnDisk. This path may, or may not, correspond to a - real directory in the current filesystem. If the files within the zip - are later extracted, this is the path used for the extracted file. - Passing null (nothing in VB) will use the path on the file name, if - any; in other words it would use directoryOnDisk, plus any - subdirectory. Passing the empty string ("") will insert the item at - the root path within the archive. - - - - If true, the method also scans subdirectories for files matching the criteria. - - - - - - - Retrieve entries from the zipfile by specified criteria. - - - - - This method allows callers to retrieve the collection of entries from the zipfile - that fit the specified criteria. The criteria are described in a string format, and - can include patterns for the filename; constraints on the size of the entry; - constraints on the last modified, created, or last accessed time for the file - described by the entry; or the attributes of the entry. - - - - For details on the syntax for the selectionCriteria parameter, see . - - - - This method is intended for use with a ZipFile that has been read from storage. - When creating a new ZipFile, this method will work only after the ZipArchive has - been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip - archive from storage.) Calling SelectEntries on a ZipFile that has not yet been - saved will deliver undefined results. - - - - - Thrown if selectionCriteria has an invalid syntax. - - - - This example selects all the PhotoShop files from within an archive, and extracts them - to the current working directory. - - using (ZipFile zip1 = ZipFile.Read(ZipFileName)) - { - var PhotoShopFiles = zip1.SelectEntries("*.psd"); - foreach (ZipEntry psd in PhotoShopFiles) - { - psd.Extract(); - } - } - - - Using zip1 As ZipFile = ZipFile.Read(ZipFileName) - Dim PhotoShopFiles as ICollection(Of ZipEntry) - PhotoShopFiles = zip1.SelectEntries("*.psd") - Dim psd As ZipEntry - For Each psd In PhotoShopFiles - psd.Extract - Next - End Using - - - the string that specifies which entries to select - a collection of ZipEntry objects that conform to the inclusion spec - - - - Retrieve entries from the zipfile by specified criteria. - - - - - This method allows callers to retrieve the collection of entries from the zipfile - that fit the specified criteria. The criteria are described in a string format, and - can include patterns for the filename; constraints on the size of the entry; - constraints on the last modified, created, or last accessed time for the file - described by the entry; or the attributes of the entry. - - - - For details on the syntax for the selectionCriteria parameter, see . - - - - This method is intended for use with a ZipFile that has been read from storage. - When creating a new ZipFile, this method will work only after the ZipArchive has - been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip - archive from storage.) Calling SelectEntries on a ZipFile that has not yet been - saved will deliver undefined results. - - - - - Thrown if selectionCriteria has an invalid syntax. - - - - - using (ZipFile zip1 = ZipFile.Read(ZipFileName)) - { - var UpdatedPhotoShopFiles = zip1.SelectEntries("*.psd", "UpdatedFiles"); - foreach (ZipEntry e in UpdatedPhotoShopFiles) - { - // prompt for extract here - if (WantExtract(e.FileName)) - e.Extract(); - } - } - - - Using zip1 As ZipFile = ZipFile.Read(ZipFileName) - Dim UpdatedPhotoShopFiles As ICollection(Of ZipEntry) = zip1.SelectEntries("*.psd", "UpdatedFiles") - Dim e As ZipEntry - For Each e In UpdatedPhotoShopFiles - ' prompt for extract here - If Me.WantExtract(e.FileName) Then - e.Extract - End If - Next - End Using - - - the string that specifies which entries to select - - - the directory in the archive from which to select entries. If null, then - all directories in the archive are used. - - - a collection of ZipEntry objects that conform to the inclusion spec - - - - Remove entries from the zipfile by specified criteria. - - - - - This method allows callers to remove the collection of entries from the zipfile - that fit the specified criteria. The criteria are described in a string format, and - can include patterns for the filename; constraints on the size of the entry; - constraints on the last modified, created, or last accessed time for the file - described by the entry; or the attributes of the entry. - - - - For details on the syntax for the selectionCriteria parameter, see . - - - - This method is intended for use with a ZipFile that has been read from storage. - When creating a new ZipFile, this method will work only after the ZipArchive has - been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip - archive from storage.) Calling SelectEntries on a ZipFile that has not yet been - saved will deliver undefined results. - - - - - Thrown if selectionCriteria has an invalid syntax. - - - - This example removes all entries in a zip file that were modified prior to January 1st, 2008. - - using (ZipFile zip1 = ZipFile.Read(ZipFileName)) - { - // remove all entries from prior to Jan 1, 2008 - zip1.RemoveEntries("mtime < 2008-01-01"); - // don't forget to save the archive! - zip1.Save(); - } - - - Using zip As ZipFile = ZipFile.Read(ZipFileName) - ' remove all entries from prior to Jan 1, 2008 - zip1.RemoveEntries("mtime < 2008-01-01") - ' do not forget to save the archive! - zip1.Save - End Using - - - the string that specifies which entries to select - the number of entries removed - - - - Remove entries from the zipfile by specified criteria, and within the specified - path in the archive. - - - - - This method allows callers to remove the collection of entries from the zipfile - that fit the specified criteria. The criteria are described in a string format, and - can include patterns for the filename; constraints on the size of the entry; - constraints on the last modified, created, or last accessed time for the file - described by the entry; or the attributes of the entry. - - - - For details on the syntax for the selectionCriteria parameter, see . - - - - This method is intended for use with a ZipFile that has been read from storage. - When creating a new ZipFile, this method will work only after the ZipArchive has - been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip - archive from storage.) Calling SelectEntries on a ZipFile that has not yet been - saved will deliver undefined results. - - - - - Thrown if selectionCriteria has an invalid syntax. - - - - - using (ZipFile zip1 = ZipFile.Read(ZipFileName)) - { - // remove all entries from prior to Jan 1, 2008 - zip1.RemoveEntries("mtime < 2008-01-01", "documents"); - // a call to ZipFile.Save will make the modifications permanent - zip1.Save(); - } - - - Using zip As ZipFile = ZipFile.Read(ZipFileName) - ' remove all entries from prior to Jan 1, 2008 - zip1.RemoveEntries("mtime < 2008-01-01", "documents") - ' a call to ZipFile.Save will make the modifications permanent - zip1.Save - End Using - - - - the string that specifies which entries to select - - the directory in the archive from which to select entries. If null, then - all directories in the archive are used. - - the number of entries removed - - - - Selects and Extracts a set of Entries from the ZipFile. - - - - - The entries are extracted into the current working directory. - - - - If any of the files to be extracted already exist, then the action taken is as - specified in the property on the - corresponding ZipEntry instance. By default, the action taken in this case is to - throw an exception. - - - - For information on the syntax of the selectionCriteria string, - see . - - - - - This example shows how extract all XML files modified after 15 January 2009. - - using (ZipFile zip = ZipFile.Read(zipArchiveName)) - { - zip.ExtractSelectedEntries("name = *.xml and mtime > 2009-01-15"); - } - - - the selection criteria for entries to extract. - - - - - - Selects and Extracts a set of Entries from the ZipFile. - - - - - The entries are extracted into the current working directory. When extraction would would - overwrite an existing filesystem file, the action taken is as specified in the - parameter. - - - - For information on the syntax of the string describing the entry selection criteria, - see . - - - - - This example shows how extract all XML files modified after 15 January 2009, - overwriting any existing files. - - using (ZipFile zip = ZipFile.Read(zipArchiveName)) - { - zip.ExtractSelectedEntries("name = *.xml and mtime > 2009-01-15", - ExtractExistingFileAction.OverwriteSilently); - } - - - - the selection criteria for entries to extract. - - - The action to take if extraction would overwrite an existing file. - - - - - Selects and Extracts a set of Entries from the ZipFile. - - - - - The entries are selected from the specified directory within the archive, and then - extracted into the current working directory. - - - - If any of the files to be extracted already exist, then the action taken is as - specified in the property on the - corresponding ZipEntry instance. By default, the action taken in this case is to - throw an exception. - - - - For information on the syntax of the string describing the entry selection criteria, - see . - - - - - This example shows how extract all XML files modified after 15 January 2009, - and writes them to the "unpack" directory. - - using (ZipFile zip = ZipFile.Read(zipArchiveName)) - { - zip.ExtractSelectedEntries("name = *.xml and mtime > 2009-01-15","unpack"); - } - - - - the selection criteria for entries to extract. - - - the directory in the archive from which to select entries. If null, then - all directories in the archive are used. - - - - - - - Selects and Extracts a set of Entries from the ZipFile. - - - - - The entries are extracted into the specified directory. If any of the files to be - extracted already exist, an exception will be thrown. - - - For information on the syntax of the string describing the entry selection criteria, - see . - - - - the selection criteria for entries to extract. - - - the directory in the archive from which to select entries. If null, then - all directories in the archive are used. - - - - the directory on the disk into which to extract. It will be created - if it does not exist. - - - - - Selects and Extracts a set of Entries from the ZipFile. - - - - - The entries are extracted into the specified directory. When extraction would would - overwrite an existing filesystem file, the action taken is as specified in the - parameter. - - - - For information on the syntax of the string describing the entry selection criteria, - see . - - - - - This example shows how extract all files with an XML extension or with a size larger than 100,000 bytes, - and puts them in the unpack directory. For any files that already exist in - that destination directory, they will not be overwritten. - - using (ZipFile zip = ZipFile.Read(zipArchiveName)) - { - zip.ExtractSelectedEntries("name = *.xml or size > 100000", - null, - "unpack", - ExtractExistingFileAction.DontOverwrite); - } - - - - the selection criteria for entries to extract. - - - The directory on the disk into which to extract. It will be created if it does not exist. - - - - The directory in the archive from which to select entries. If null, then - all directories in the archive are used. - - - - The action to take if extraction would overwrite an existing file. - - - - - - - - Static constructor for ZipFile - - - Code Pages 437 and 1252 for English are same - Code Page 1252 Windows Latin 1 (ANSI) - - Code Page 437 MS-DOS Latin US - - - - - - The default text encoding used in zip archives. It is numeric 437, also - known as IBM437. - - - - - - Generic IEnumerator support, for use of a ZipFile in an enumeration. - - - - You probably do not want to call GetEnumerator explicitly. Instead - it is implicitly called when you use a loop in C#, or a - For Each loop in VB.NET. - - - - This example reads a zipfile of a given name, then enumerates the - entries in that zip file, and displays the information about each - entry on the Console. - - using (ZipFile zip = ZipFile.Read(zipfile)) - { - bool header = true; - foreach (ZipEntry e in zip) - { - if (header) - { - System.Console.WriteLine("Zipfile: {0}", zip.Name); - System.Console.WriteLine("Version Needed: 0x{0:X2}", e.VersionNeeded); - System.Console.WriteLine("BitField: 0x{0:X2}", e.BitField); - System.Console.WriteLine("Compression Method: 0x{0:X2}", e.CompressionMethod); - System.Console.WriteLine("\n{1,-22} {2,-6} {3,4} {4,-8} {0}", - "Filename", "Modified", "Size", "Ratio", "Packed"); - System.Console.WriteLine(new System.String('-', 72)); - header = false; - } - - System.Console.WriteLine("{1,-22} {2,-6} {3,4:F0}% {4,-8} {0}", - e.FileName, - e.LastModified.ToString("yyyy-MM-dd HH:mm:ss"), - e.UncompressedSize, - e.CompressionRatio, - e.CompressedSize); - - e.Extract(); - } - } - - - - Dim ZipFileToExtract As String = "c:\foo.zip" - Using zip As ZipFile = ZipFile.Read(ZipFileToExtract) - Dim header As Boolean = True - Dim e As ZipEntry - For Each e In zip - If header Then - Console.WriteLine("Zipfile: {0}", zip.Name) - Console.WriteLine("Version Needed: 0x{0:X2}", e.VersionNeeded) - Console.WriteLine("BitField: 0x{0:X2}", e.BitField) - Console.WriteLine("Compression Method: 0x{0:X2}", e.CompressionMethod) - Console.WriteLine(ChrW(10) & "{1,-22} {2,-6} {3,4} {4,-8} {0}", _ - "Filename", "Modified", "Size", "Ratio", "Packed" ) - Console.WriteLine(New String("-"c, 72)) - header = False - End If - Console.WriteLine("{1,-22} {2,-6} {3,4:F0}% {4,-8} {0}", _ - e.FileName, _ - e.LastModified.ToString("yyyy-MM-dd HH:mm:ss"), _ - e.UncompressedSize, _ - e.CompressionRatio, _ - e.CompressedSize ) - e.Extract - Next - End Using - - - - A generic enumerator suitable for use within a foreach loop. - - - - An IEnumerator, for use of a ZipFile in a foreach construct. - - - - This method is included for COM support. An application generally does not call - this method directly. It is called implicitly by COM clients when enumerating - the entries in the ZipFile instance. In VBScript, this is done with a For Each - statement. In Javascript, this is done with new Enumerator(zipfile). - - - - The IEnumerator over the entries in the ZipFile. - - - - - Options for using ZIP64 extensions when saving zip archives. - - - - - - Designed many years ago, the original zip - specification from PKWARE allowed for 32-bit quantities for the - compressed and uncompressed sizes of zip entries, as well as a 32-bit quantity - for specifying the length of the zip archive itself, and a maximum of 65535 - entries. These limits are now regularly exceeded in many backup and archival - scenarios. Recently, PKWare added extensions to the original zip spec, called - "ZIP64 extensions", to raise those limitations. This property governs whether - DotNetZip will use those extensions when writing zip archives. The use of - these extensions is optional and explicit in DotNetZip because, despite the - status of ZIP64 as a bona fide standard, many other zip tools and libraries do - not support ZIP64, and therefore a zip file with ZIP64 extensions may be - unreadable by some of those other tools. - - - - Set this property to to always use ZIP64 - extensions when saving, regardless of whether your zip archive needs it. - Suppose you add 5 files, each under 100k, to a ZipFile. If you specify Always - for this flag, you will get a ZIP64 archive, though the archive does not need - to use ZIP64 because none of the original zip limits had been exceeded. - - - - Set this property to to tell the DotNetZip - library to never use ZIP64 extensions. This is useful for maximum - compatibility and interoperability, at the expense of the capability of - handling large files or large archives. NB: Windows Explorer in Windows XP - and Windows Vista cannot currently extract files from a zip64 archive, so if - you want to guarantee that a zip archive produced by this library will work in - Windows Explorer, use Never. If you set this property to , and your application creates a zip that would - exceed one of the Zip limits, the library will throw an exception while saving - the zip file. - - - - Set this property to to tell the - DotNetZip library to use the ZIP64 extensions when required by the - entry. After the file is compressed, the original and compressed sizes are - checked, and if they exceed the limits described above, then zip64 can be - used. That is the general idea, but there is an additional wrinkle when saving - to a non-seekable device, like the ASP.NET Response.OutputStream, or - Console.Out. When using non-seekable streams for output, the entry - header - which indicates whether zip64 is in use - is emitted before it is - known if zip64 is necessary. It is only after all entries have been saved - that it can be known if ZIP64 will be required. On seekable output streams, - after saving all entries, the library can seek backward and re-emit the zip - file header to be consistent with the actual ZIP64 requirement. But using a - non-seekable output stream, the library cannot seek backward, so the header - can never be changed. In other words, the archive's use of ZIP64 extensions is - not alterable after the header is emitted. Therefore, when saving to - non-seekable streams, using is the same - as using : it will always produce a zip - archive that uses ZIP64 extensions. - - - - - - - The default behavior, which is "Never". - (For COM clients, this is a 0 (zero).) - - - - - Do not use ZIP64 extensions when writing zip archives. - (For COM clients, this is a 0 (zero).) - - - - - Use ZIP64 extensions when writing zip archives, as necessary. - For example, when a single entry exceeds 0xFFFFFFFF in size, or when the archive as a whole - exceeds 0xFFFFFFFF in size, or when there are more than 65535 entries in an archive. - (For COM clients, this is a 1.) - - - - - Always use ZIP64 extensions when writing zip archives, even when unnecessary. - (For COM clients, this is a 2.) - - - - - An enum representing the values on a three-way toggle switch - for various options in the library. This might be used to - specify whether to employ a particular text encoding, or to use - ZIP64 extensions, or some other option. - - - - - The default behavior. This is the same as "Never". - (For COM clients, this is a 0 (zero).) - - - - - Never use the associated option. - (For COM clients, this is a 0 (zero).) - - - - - Use the associated behavior "as necessary." - (For COM clients, this is a 1.) - - - - - Use the associated behavior Always, whether necessary or not. - (For COM clients, this is a 2.) - - - - - A class for collecting the various options that can be used when - Reading zip files for extraction or update. - - - - - When reading a zip file, there are several options an - application can set, to modify how the file is read, or what - the library does while reading. This class collects those - options into one container. - - - - Pass an instance of the ReadOptions class into the - ZipFile.Read() method. - - - . - . - - - - - An event handler for Read operations. When opening large zip - archives, you may want to display a progress bar or other - indicator of status progress while reading. This parameter - allows you to specify a ReadProgress Event Handler directly. - When you call Read(), the progress event is invoked as - necessary. - - - - - The System.IO.TextWriter to use for writing verbose status messages - during operations on the zip archive. A console application may wish to - pass System.Console.Out to get messages on the Console. A graphical - or headless application may wish to capture the messages in a different - TextWriter, such as a System.IO.StringWriter. - - - - - The System.Text.Encoding to use when reading in the zip archive. Be - careful specifying the encoding. If the value you use here is not the same - as the Encoding used when the zip archive was created (possibly by a - different archiver) you will get unexpected results and possibly exceptions. - - - - - - - - Provides a stream metaphor for reading zip files. - - - - - This class provides an alternative programming model for reading zip files to - the one enabled by the class. Use this when reading zip - files, as an alternative to the class, when you would - like to use a Stream class to read the file. - - - - Some application designs require a readable stream for input. This stream can - be used to read a zip file, and extract entries. - - - - Both the ZipInputStream class and the ZipFile class can be used - to read and extract zip files. Both of them support many of the common zip - features, including Unicode, different compression levels, and ZIP64. The - programming models differ. For example, when extracting entries via calls to - the GetNextEntry() and Read() methods on the - ZipInputStream class, the caller is responsible for creating the file, - writing the bytes into the file, setting the attributes on the file, and - setting the created, last modified, and last accessed timestamps on the - file. All of these things are done automatically by a call to ZipEntry.Extract(). For this reason, the - ZipInputStream is generally recommended for when your application wants - to extract the data, without storing that data into a file. - - - - Aside from the obvious differences in programming model, there are some - differences in capability between the ZipFile class and the - ZipInputStream class. - - - - - ZipFile can be used to create or update zip files, or read and - extract zip files. ZipInputStream can be used only to read and - extract zip files. If you want to use a stream to create zip files, check - out the . - - - - ZipInputStream cannot read segmented or spanned - zip files. - - - - ZipInputStream will not read Zip file comments. - - - - When reading larger files, ZipInputStream will always underperform - ZipFile. This is because the ZipInputStream does a full scan on the - zip file, while the ZipFile class reads the central directory of the - zip file. - - - - - - - - - Create a ZipInputStream, wrapping it around an existing stream. - - - - - - While the class is generally easier - to use, this class provides an alternative to those - applications that want to read from a zipfile directly, - using a . - - - - Both the ZipInputStream class and the ZipFile class can be used - to read and extract zip files. Both of them support many of the common zip - features, including Unicode, different compression levels, and ZIP64. The - programming models differ. For example, when extracting entries via calls to - the GetNextEntry() and Read() methods on the - ZipInputStream class, the caller is responsible for creating the file, - writing the bytes into the file, setting the attributes on the file, and - setting the created, last modified, and last accessed timestamps on the - file. All of these things are done automatically by a call to ZipEntry.Extract(). For this reason, the - ZipInputStream is generally recommended for when your application wants - to extract the data, without storing that data into a file. - - - - Aside from the obvious differences in programming model, there are some - differences in capability between the ZipFile class and the - ZipInputStream class. - - - - - ZipFile can be used to create or update zip files, or read and extract - zip files. ZipInputStream can be used only to read and extract zip - files. If you want to use a stream to create zip files, check out the . - - - - ZipInputStream cannot read segmented or spanned - zip files. - - - - ZipInputStream will not read Zip file comments. - - - - When reading larger files, ZipInputStream will always underperform - ZipFile. This is because the ZipInputStream does a full scan on the - zip file, while the ZipFile class reads the central directory of the - zip file. - - - - - - - - The stream to read. It must be readable. This stream will be closed at - the time the ZipInputStream is closed. - - - - - This example shows how to read a zip file, and extract entries, using the - ZipInputStream class. - - - private void Unzip() - { - byte[] buffer= new byte[2048]; - int n; - using (var raw = File.Open(inputFileName, FileMode.Open, FileAccess.Read)) - { - using (var input= new ZipInputStream(raw)) - { - ZipEntry e; - while (( e = input.GetNextEntry()) != null) - { - if (e.IsDirectory) continue; - string outputPath = Path.Combine(extractDir, e.FileName); - using (var output = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite)) - { - while ((n= input.Read(buffer, 0, buffer.Length)) > 0) - { - output.Write(buffer,0,n); - } - } - } - } - } - } - - - - Private Sub UnZip() - Dim inputFileName As String = "MyArchive.zip" - Dim extractDir As String = "extract" - Dim buffer As Byte() = New Byte(2048) {} - Using raw As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read) - Using input As ZipInputStream = New ZipInputStream(raw) - Dim e As ZipEntry - Do While (Not e = input.GetNextEntry Is Nothing) - If Not e.IsDirectory Then - Using output As FileStream = File.Open(Path.Combine(extractDir, e.FileName), _ - FileMode.Create, FileAccess.ReadWrite) - Dim n As Integer - Do While (n = input.Read(buffer, 0, buffer.Length) > 0) - output.Write(buffer, 0, n) - Loop - End Using - End If - Loop - End Using - End Using - End Sub - - - - - - Create a ZipInputStream, given the name of an existing zip file. - - - - - - This constructor opens a FileStream for the given zipfile, and - wraps a ZipInputStream around that. See the documentation for the - constructor for full details. - - - - While the class is generally easier - to use, this class provides an alternative to those - applications that want to read from a zipfile directly, - using a . - - - - - - The name of the filesystem file to read. - - - - - This example shows how to read a zip file, and extract entries, using the - ZipInputStream class. - - - private void Unzip() - { - byte[] buffer= new byte[2048]; - int n; - using (var input= new ZipInputStream(inputFileName)) - { - ZipEntry e; - while (( e = input.GetNextEntry()) != null) - { - if (e.IsDirectory) continue; - string outputPath = Path.Combine(extractDir, e.FileName); - using (var output = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite)) - { - while ((n= input.Read(buffer, 0, buffer.Length)) > 0) - { - output.Write(buffer,0,n); - } - } - } - } - } - - - - Private Sub UnZip() - Dim inputFileName As String = "MyArchive.zip" - Dim extractDir As String = "extract" - Dim buffer As Byte() = New Byte(2048) {} - Using input As ZipInputStream = New ZipInputStream(inputFileName) - Dim e As ZipEntry - Do While (Not e = input.GetNextEntry Is Nothing) - If Not e.IsDirectory Then - Using output As FileStream = File.Open(Path.Combine(extractDir, e.FileName), _ - FileMode.Create, FileAccess.ReadWrite) - Dim n As Integer - Do While (n = input.Read(buffer, 0, buffer.Length) > 0) - output.Write(buffer, 0, n) - Loop - End Using - End If - Loop - End Using - End Sub - - - - - - Create a ZipInputStream, explicitly specifying whether to - keep the underlying stream open. - - - - See the documentation for the ZipInputStream(Stream) - constructor for a discussion of the class, and an example of how to use the class. - - - - The stream to read from. It must be readable. - - - - true if the application would like the stream - to remain open after the ZipInputStream has been closed. - - - - Provides a string representation of the instance. - - - This can be useful for debugging purposes. - - - a string representation of the instance. - - - - The text encoding to use when reading entries into the zip archive, for - those entries whose filenames or comments cannot be encoded with the - default (IBM437) encoding. - - - - - In its - zip specification, PKWare describes two options for encoding - filenames and comments: using IBM437 or UTF-8. But, some archiving tools - or libraries do not follow the specification, and instead encode - characters using the system default code page. For example, WinRAR when - run on a machine in Shanghai may encode filenames with the Big-5 Chinese - (950) code page. This behavior is contrary to the Zip specification, but - it occurs anyway. - - - - When using DotNetZip to read zip archives that use something other than - UTF-8 or IBM437, set this property to specify the code page to use when - reading encoded filenames and comments for each ZipEntry in the zip - file. - - - - This property is "provisional". When the entry in the zip archive is not - explicitly marked as using UTF-8, then IBM437 is used to decode filenames - and comments. If a loss of data would result from using IBM436 - - specifically when encoding and decoding is not reflexive - the codepage - specified here is used. It is possible, therefore, to have a given entry - with a Comment encoded in IBM437 and a FileName encoded with - the specified "provisional" codepage. - - - - When a zip file uses an arbitrary, non-UTF8 code page for encoding, there - is no standard way for the reader application - whether DotNetZip, WinZip, - WinRar, or something else - to know which codepage has been used for the - entries. Readers of zip files are not able to inspect the zip file and - determine the codepage that was used for the entries contained within it. - It is left to the application or user to determine the necessary codepage - when reading zip files encoded this way. If you use an incorrect codepage - when reading a zipfile, you will get entries with filenames that are - incorrect, and the incorrect filenames may even contain characters that - are not legal for use within filenames in Windows. Extracting entries with - illegal characters in the filenames will lead to exceptions. It's too bad, - but this is just the way things are with code pages in zip files. Caveat - Emptor. - - - - - - - Size of the work buffer to use for the ZLIB codec during decompression. - - - - Setting this affects the performance and memory efficiency of compression - and decompression. For larger files, setting this to a larger size may - improve performance, but the exact numbers vary depending on available - memory, and a bunch of other variables. I don't have good firm - recommendations on how to set it. You'll have to test it yourself. Or - just leave it alone and accept the default. - - - - - Sets the password to be used on the ZipInputStream instance. - - - - - - When reading a zip archive, this password is used to read and decrypt the - entries that are encrypted within the zip file. When entries within a zip - file use different passwords, set the appropriate password for the entry - before the first call to Read() for each entry. - - - - When reading an entry that is not encrypted, the value of this property is - ignored. - - - - - - - This example uses the ZipInputStream to read and extract entries from a - zip file, using a potentially different password for each entry. - - - byte[] buffer= new byte[2048]; - int n; - using (var raw = File.Open(_inputFileName, FileMode.Open, FileAccess.Read )) - { - using (var input= new ZipInputStream(raw)) - { - ZipEntry e; - while (( e = input.GetNextEntry()) != null) - { - input.Password = PasswordForEntry(e.FileName); - if (e.IsDirectory) continue; - string outputPath = Path.Combine(_extractDir, e.FileName); - using (var output = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite)) - { - while ((n= input.Read(buffer,0,buffer.Length)) > 0) - { - output.Write(buffer,0,n); - } - } - } - } - } - - - - - - - Read the data from the stream into the buffer. - - - - - The data for the zipentry will be decrypted and uncompressed, as - necessary, before being copied into the buffer. - - - - You must set the property before calling - Read() the first time for an encrypted entry. To determine if an - entry is encrypted and requires a password, check the ZipEntry.Encryption property. - - - - The buffer to hold the data read from the stream. - the offset within the buffer to copy the first byte read. - the number of bytes to read. - the number of bytes read, after decryption and decompression. - - - - Read the next entry from the zip file. - - - - - Call this method just before calling , - to position the pointer in the zip file to the next entry that can be - read. Subsequent calls to Read(), will decrypt and decompress the - data in the zip file, until Read() returns 0. - - - - Each time you call GetNextEntry(), the pointer in the wrapped - stream is moved to the next entry in the zip file. If you call , and thus re-position the pointer within - the file, you will need to call GetNextEntry() again, to insure - that the file pointer is positioned at the beginning of a zip entry. - - - - This method returns the ZipEntry. Using a stream approach, you will - read the raw bytes for an entry in a zip file via calls to Read(). - Alternatively, you can extract an entry into a file, or a stream, by - calling , or one of its siblings. - - - - - - The ZipEntry read. Returns null (or Nothing in VB) if there are no more - entries in the zip file. - - - - - - Dispose the stream. - - - - - This method disposes the ZipInputStream. It may also close the - underlying stream, depending on which constructor was used. - - - - Typically the application will call Dispose() implicitly, via - a using statement in C#, or a Using statement in VB. - - - - Application code won't call this code directly. This method may - be invoked in two distinct scenarios. If disposing == true, the - method has been called directly or indirectly by a user's code, - for example via the public Dispose() method. In this case, both - managed and unmanaged resources can be referenced and disposed. - If disposing == false, the method has been called by the runtime - from inside the object finalizer and this method should not - reference other objects; in that case only unmanaged resources - must be referenced or disposed. - - - - - true if the Dispose method was invoked by user code. - - - - - Always returns true. - - - - - Returns the value of CanSeek for the underlying (wrapped) stream. - - - - - Always returns false. - - - - - Returns the length of the underlying stream. - - - - - Gets or sets the position of the underlying stream. - - - Setting the position is equivalent to calling Seek(value, SeekOrigin.Begin). - - - - - This is a no-op. - - - - - This method always throws a NotSupportedException. - - ignored - ignored - ignored - - - - This method seeks in the underlying stream. - - - - - Call this method if you want to seek around within the zip file for random access. - - - - Applications can intermix calls to Seek() with calls to . After a call to Seek(), - GetNextEntry() will get the next ZipEntry that falls after - the current position in the input stream. You're on your own for finding - out just where to seek in the stream, to get to the various entries. - - - - - the offset point to seek to - the reference point from which to seek - The new position - - - - This method always throws a NotSupportedException. - - ignored - - - - Provides a stream metaphor for generating zip files. - - - - - This class writes zip files, as defined in the specification - for zip files described by PKWare. The compression for this - implementation is provided by a managed-code version of Zlib, included with - DotNetZip in the classes in the Ionic.Zlib namespace. - - - - This class provides an alternative programming model to the one enabled by the - class. Use this when creating zip files, as an - alternative to the class, when you would like to use a - Stream type to write the zip file. - - - - Both the ZipOutputStream class and the ZipFile class can be used - to create zip files. Both of them support many of the common zip features, - including Unicode, different compression levels, and ZIP64. They provide - very similar performance when creating zip files. - - - - The ZipFile class is generally easier to use than - ZipOutputStream and should be considered a higher-level interface. For - example, when creating a zip file via calls to the PutNextEntry() and - Write() methods on the ZipOutputStream class, the caller is - responsible for opening the file, reading the bytes from the file, writing - those bytes into the ZipOutputStream, setting the attributes on the - ZipEntry, and setting the created, last modified, and last accessed - timestamps on the zip entry. All of these things are done automatically by a - call to ZipFile.AddFile(). - For this reason, the ZipOutputStream is generally recommended for use - only when your application emits arbitrary data, not necessarily data from a - filesystem file, directly into a zip file, and does so using a Stream - metaphor. - - - - Aside from the differences in programming model, there are other - differences in capability between the two classes. - - - - - ZipFile can be used to read and extract zip files, in addition to - creating zip files. ZipOutputStream cannot read zip files. If you want - to use a stream to read zip files, check out the class. - - - - ZipOutputStream does not support the creation of segmented or spanned - zip files. - - - - ZipOutputStream cannot produce a self-extracting archive. - - - - - Be aware that the ZipOutputStream class implements the interface. In order for - ZipOutputStream to produce a valid zip file, you use use it within - a using clause (Using in VB), or call the Dispose() method - explicitly. See the examples for how to employ a using clause. - - - - Also, a note regarding compression performance: On the desktop .NET - Framework, DotNetZip can use a multi-threaded compression implementation - that provides significant speed increases on large files, over 300k or so, - at the cost of increased memory use at runtime. (The output of the - compression is almost exactly the same size). But, the multi-threaded - approach incurs a performance hit on smaller files. There's no way for the - ZipOutputStream to know whether parallel compression will be beneficial, - because the ZipOutputStream does not know how much data you will write - through the stream. You may wish to set the property to zero, if you are compressing - large files through ZipOutputStream. This will cause parallel - compression to be used, always. - - - - - - Create a ZipOutputStream, wrapping an existing stream. - - - - - The class is generally easier to use when creating - zip files. The ZipOutputStream offers a different metaphor for creating a - zip file, based on the class. - - - - - - The stream to wrap. It must be writable. This stream will be closed at - the time the ZipOutputStream is closed. - - - - - This example shows how to create a zip file, using the - ZipOutputStream class. - - - private void Zipup() - { - if (filesToZip.Count == 0) - { - System.Console.WriteLine("Nothing to do."); - return; - } - - using (var raw = File.Open(_outputFileName, FileMode.Create, FileAccess.ReadWrite )) - { - using (var output= new ZipOutputStream(raw)) - { - output.Password = "VerySecret!"; - output.Encryption = EncryptionAlgorithm.WinZipAes256; - - foreach (string inputFileName in filesToZip) - { - System.Console.WriteLine("file: {0}", inputFileName); - - output.PutNextEntry(inputFileName); - using (var input = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Write )) - { - byte[] buffer= new byte[2048]; - int n; - while ((n= input.Read(buffer,0,buffer.Length)) > 0) - { - output.Write(buffer,0,n); - } - } - } - } - } - } - - - - Private Sub Zipup() - Dim outputFileName As String = "XmlData.zip" - Dim filesToZip As String() = Directory.GetFiles(".", "*.xml") - If (filesToZip.Length = 0) Then - Console.WriteLine("Nothing to do.") - Else - Using raw As FileStream = File.Open(outputFileName, FileMode.Create, FileAccess.ReadWrite) - Using output As ZipOutputStream = New ZipOutputStream(raw) - output.Password = "VerySecret!" - output.Encryption = EncryptionAlgorithm.WinZipAes256 - Dim inputFileName As String - For Each inputFileName In filesToZip - Console.WriteLine("file: {0}", inputFileName) - output.PutNextEntry(inputFileName) - Using input As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) - Dim n As Integer - Dim buffer As Byte() = New Byte(2048) {} - Do While (n = input.Read(buffer, 0, buffer.Length) > 0) - output.Write(buffer, 0, n) - Loop - End Using - Next - End Using - End Using - End If - End Sub - - - - - - Create a ZipOutputStream that writes to a filesystem file. - - - - The class is generally easier to use when creating - zip files. The ZipOutputStream offers a different metaphor for creating a - zip file, based on the class. - - - - The name of the zip file to create. - - - - - This example shows how to create a zip file, using the - ZipOutputStream class. - - - private void Zipup() - { - if (filesToZip.Count == 0) - { - System.Console.WriteLine("Nothing to do."); - return; - } - - using (var output= new ZipOutputStream(outputFileName)) - { - output.Password = "VerySecret!"; - output.Encryption = EncryptionAlgorithm.WinZipAes256; - - foreach (string inputFileName in filesToZip) - { - System.Console.WriteLine("file: {0}", inputFileName); - - output.PutNextEntry(inputFileName); - using (var input = File.Open(inputFileName, FileMode.Open, FileAccess.Read, - FileShare.Read | FileShare.Write )) - { - byte[] buffer= new byte[2048]; - int n; - while ((n= input.Read(buffer,0,buffer.Length)) > 0) - { - output.Write(buffer,0,n); - } - } - } - } - } - - - - Private Sub Zipup() - Dim outputFileName As String = "XmlData.zip" - Dim filesToZip As String() = Directory.GetFiles(".", "*.xml") - If (filesToZip.Length = 0) Then - Console.WriteLine("Nothing to do.") - Else - Using output As ZipOutputStream = New ZipOutputStream(outputFileName) - output.Password = "VerySecret!" - output.Encryption = EncryptionAlgorithm.WinZipAes256 - Dim inputFileName As String - For Each inputFileName In filesToZip - Console.WriteLine("file: {0}", inputFileName) - output.PutNextEntry(inputFileName) - Using input As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) - Dim n As Integer - Dim buffer As Byte() = New Byte(2048) {} - Do While (n = input.Read(buffer, 0, buffer.Length) > 0) - output.Write(buffer, 0, n) - Loop - End Using - Next - End Using - End If - End Sub - - - - - - Create a ZipOutputStream. - - - - See the documentation for the ZipOutputStream(Stream) - constructor for an example. - - - - The stream to wrap. It must be writable. - - - - true if the application would like the stream - to remain open after the ZipOutputStream has been closed. - - - - Provides a string representation of the instance. - - - This can be useful for debugging purposes. - - - a string representation of the instance. - - - - Sets the password to be used on the ZipOutputStream instance. - - - - - - When writing a zip archive, this password is applied to the entries, not - to the zip archive itself. It applies to any ZipEntry subsequently - written to the ZipOutputStream. - - - - Using a password does not encrypt or protect the "directory" of the - archive - the list of entries contained in the archive. If you set the - Password property, the password actually applies to individual - entries that are added to the archive, subsequent to the setting of this - property. The list of filenames in the archive that is eventually created - will appear in clear text, but the contents of the individual files are - encrypted. This is how Zip encryption works. - - - - If you set this property, and then add a set of entries to the archive via - calls to PutNextEntry, then each entry is encrypted with that - password. You may also want to change the password between adding - different entries. If you set the password, add an entry, then set the - password to null (Nothing in VB), and add another entry, the - first entry is encrypted and the second is not. - - - - When setting the Password, you may also want to explicitly set the property, to specify how to encrypt the entries added - to the ZipFile. If you set the Password to a non-null value and do not - set , then PKZip 2.0 ("Weak") encryption is used. - This encryption is relatively weak but is very interoperable. If - you set the password to a null value (Nothing in VB), - Encryption is reset to None. - - - - Special case: if you wrap a ZipOutputStream around a non-seekable stream, - and use encryption, and emit an entry of zero bytes, the Close() or - PutNextEntry() following the entry will throw an exception. - - - - - - - The Encryption to use for entries added to the ZipOutputStream. - - - - - The specified Encryption is applied to the entries subsequently - written to the ZipOutputStream instance. - - - - If you set this to something other than - EncryptionAlgorithm.None, you will also need to set the - to a non-null, non-empty value in - order to actually get encryption on the entry. - - - - - ZipOutputStream.Password - ZipEntry.Encryption - - - - Size of the work buffer to use for the ZLIB codec during compression. - - - - Setting this may affect performance. For larger files, setting this to a - larger size may improve performance, but I'm not sure. Sorry, I don't - currently have good recommendations on how to set it. You can test it if - you like. - - - - - The compression strategy to use for all entries. - - - - Set the Strategy used by the ZLIB-compatible compressor, when compressing - data for the entries in the zip archive. Different compression strategies - work better on different sorts of data. The strategy parameter can affect - the compression ratio and the speed of compression but not the correctness - of the compresssion. For more information see . - - - - - The type of timestamp attached to the ZipEntry. - - - - Set this in order to specify the kind of timestamp that should be emitted - into the zip file for each entry. - - - - - Sets the compression level to be used for entries subsequently added to - the zip archive. - - - - - Varying the compression level used on entries can affect the - size-vs-speed tradeoff when compression and decompressing data streams - or files. - - - - As with some other properties on the ZipOutputStream class, like , and , - setting this property on a ZipOutputStream - instance will cause the specified CompressionLevel to be used on all - items that are subsequently added to the - ZipOutputStream instance. - - - - If you do not set this property, the default compression level is used, - which normally gives a good balance of compression efficiency and - compression speed. In some tests, using BestCompression can - double the time it takes to compress, while delivering just a small - increase in compression efficiency. This behavior will vary with the - type of data you compress. If you are in doubt, just leave this setting - alone, and accept the default. - - - - - - The compression method used on each entry added to the ZipOutputStream. - - - - - A comment attached to the zip archive. - - - - - - The application sets this property to specify a comment to be embedded - into the generated zip archive. - - - - According to PKWARE's - zip specification, the comment is not encrypted, even if there is a - password set on the zip file. - - - - The specification does not describe how to indicate the encoding used - on a comment string. Many "compliant" zip tools and libraries use - IBM437 as the code page for comments; DotNetZip, too, follows that - practice. On the other hand, there are situations where you want a - Comment to be encoded with something else, for example using code page - 950 "Big-5 Chinese". To fill that need, DotNetZip will encode the - comment following the same procedure it follows for encoding - filenames: (a) if is - Never, it uses the default encoding (IBM437). (b) if is Always, it always uses the - alternate encoding (). (c) if is AsNecessary, it uses the - alternate encoding only if the default encoding is not sufficient for - encoding the comment - in other words if decoding the result does not - produce the original string. This decision is taken at the time of - the call to ZipFile.Save(). - - - - - - - Specify whether to use ZIP64 extensions when saving a zip archive. - - - - - The default value for the property is . is - safest, in the sense that you will not get an Exception if a - pre-ZIP64 limit is exceeded. - - - - You must set this property before calling Write(). - - - - - - - Indicates whether ZIP64 extensions were used when saving the zip archive. - - - - The value is defined only after the ZipOutputStream has been closed. - - - - - Whether the ZipOutputStream should use case-insensitive comparisons when - checking for uniqueness of zip entries. - - - - - Though the zip specification doesn't prohibit zipfiles with duplicate - entries, Sane zip files have no duplicates, and the DotNetZip library - cannot create zip files with duplicate entries. If an application attempts - to call with a name that duplicates one - already used within the archive, the library will throw an Exception. - - - This property allows the application to specify whether the - ZipOutputStream instance considers ordinal case when checking for - uniqueness of zip entries. - - - - - - Indicates whether to encode entry filenames and entry comments using - Unicode (UTF-8). - - - - - The - PKWare zip specification provides for encoding file names and file - comments in either the IBM437 code page, or in UTF-8. This flag selects - the encoding according to that specification. By default, this flag is - false, and filenames and comments are encoded into the zip file in the - IBM437 codepage. Setting this flag to true will specify that filenames - and comments that cannot be encoded with IBM437 will be encoded with - UTF-8. - - - - Zip files created with strict adherence to the PKWare specification with - respect to UTF-8 encoding can contain entries with filenames containing - any combination of Unicode characters, including the full range of - characters from Chinese, Latin, Hebrew, Greek, Cyrillic, and many other - alphabets. However, because at this time, the UTF-8 portion of the PKWare - specification is not broadly supported by other zip libraries and - utilities, such zip files may not be readable by your favorite zip tool or - archiver. In other words, interoperability will decrease if you set this - flag to true. - - - - In particular, Zip files created with strict adherence to the PKWare - specification with respect to UTF-8 encoding will not work well with - Explorer in Windows XP or Windows Vista, because Windows compressed - folders, as far as I know, do not support UTF-8 in zip files. Vista can - read the zip files, but shows the filenames incorrectly. Unpacking from - Windows Vista Explorer will result in filenames that have rubbish - characters in place of the high-order UTF-8 bytes. - - - - Also, zip files that use UTF-8 encoding will not work well with Java - applications that use the java.util.zip classes, as of v5.0 of the Java - runtime. The Java runtime does not correctly implement the PKWare - specification in this regard. - - - - As a result, we have the unfortunate situation that "correct" behavior by - the DotNetZip library with regard to Unicode encoding of filenames during - zip creation will result in zip files that are readable by strictly - compliant and current tools (for example the most recent release of the - commercial WinZip tool); but these zip files will not be readable by - various other tools or libraries, including Windows Explorer. - - - - The DotNetZip library can read and write zip files with UTF8-encoded - entries, according to the PKware spec. If you use DotNetZip for both - creating and reading the zip file, and you use UTF-8, there will be no - loss of information in the filenames. For example, using a self-extractor - created by this library will allow you to unpack files correctly with no - loss of information in the filenames. - - - - If you do not set this flag, it will remain false. If this flag is false, - the ZipOutputStream will encode all filenames and comments using - the IBM437 codepage. This can cause "loss of information" on some - filenames, but the resulting zipfile will be more interoperable with other - utilities. As an example of the loss of information, diacritics can be - lost. The o-tilde character will be down-coded to plain o. The c with a - cedilla (Unicode 0xE7) used in Portugese will be downcoded to a c. - Likewise, the O-stroke character (Unicode 248), used in Danish and - Norwegian, will be down-coded to plain o. Chinese characters cannot be - represented in codepage IBM437; when using the default encoding, Chinese - characters in filenames will be represented as ?. These are all examples - of "information loss". - - - - The loss of information associated to the use of the IBM437 encoding is - inconvenient, and can also lead to runtime errors. For example, using - IBM437, any sequence of 4 Chinese characters will be encoded as ????. If - your application creates a ZipOutputStream, does not set the - encoding, then adds two files, each with names of four Chinese characters - each, this will result in a duplicate filename exception. In the case - where you add a single file with a name containing four Chinese - characters, the zipfile will save properly, but extracting that file - later, with any zip tool, will result in an error, because the question - mark is not legal for use within filenames on Windows. These are just a - few examples of the problems associated to loss of information. - - - - This flag is independent of the encoding of the content within the entries - in the zip file. Think of the zip file as a container - it supports an - encoding. Within the container are other "containers" - the file entries - themselves. The encoding within those entries is independent of the - encoding of the zip archive container for those entries. - - - - Rather than specify the encoding in a binary fashion using this flag, an - application can specify an arbitrary encoding via the property. Setting the encoding - explicitly when creating zip archives will result in non-compliant zip - files that, curiously, are fairly interoperable. The challenge is, the - PKWare specification does not provide for a way to specify that an entry - in a zip archive uses a code page that is neither IBM437 nor UTF-8. - Therefore if you set the encoding explicitly when creating a zip archive, - you must take care upon reading the zip archive to use the same code page. - If you get it wrong, the behavior is undefined and may result in incorrect - filenames, exceptions, stomach upset, hair loss, and acne. - - - - - - - The text encoding to use when emitting entries into the zip archive, for - those entries whose filenames or comments cannot be encoded with the - default (IBM437) encoding. - - - - - In its - zip specification, PKWare describes two options for encoding - filenames and comments: using IBM437 or UTF-8. But, some archiving tools - or libraries do not follow the specification, and instead encode - characters using the system default code page. For example, WinRAR when - run on a machine in Shanghai may encode filenames with the Big-5 Chinese - (950) code page. This behavior is contrary to the Zip specification, but - it occurs anyway. - - - - When using DotNetZip to write zip archives that will be read by one of - these other archivers, set this property to specify the code page to use - when encoding the and for each ZipEntry in the zip file, for - values that cannot be encoded with the default codepage for zip files, - IBM437. This is why this property is "provisional". In all cases, IBM437 - is used where possible, in other words, where no loss of data would - result. It is possible, therefore, to have a given entry with a - Comment encoded in IBM437 and a FileName encoded with the - specified "provisional" codepage. - - - - Be aware that a zip file created after you've explicitly set the - ProvisionalAlternateEncoding property to a value other than - IBM437 may not be compliant to the PKWare specification, and may not be - readable by compliant archivers. On the other hand, many (most?) - archivers are non-compliant and can read zip files created in arbitrary - code pages. The trick is to use or specify the proper codepage when - reading the zip. - - - - When creating a zip archive using this library, it is possible to change - the value of ProvisionalAlternateEncoding between each entry you - add, and between adding entries and the call to Close(). Don't do - this. It will likely result in a zipfile that is not readable. For best - interoperability, either leave ProvisionalAlternateEncoding - alone, or specify it only once, before adding any entries to the - ZipOutputStream instance. There is one exception to this - recommendation, described later. - - - - When using an arbitrary, non-UTF8 code page for encoding, there is no - standard way for the creator application - whether DotNetZip, WinZip, - WinRar, or something else - to formally specify in the zip file which - codepage has been used for the entries. As a result, readers of zip files - are not able to inspect the zip file and determine the codepage that was - used for the entries contained within it. It is left to the application - or user to determine the necessary codepage when reading zip files encoded - this way. If you use an incorrect codepage when reading a zipfile, you - will get entries with filenames that are incorrect, and the incorrect - filenames may even contain characters that are not legal for use within - filenames in Windows. Extracting entries with illegal characters in the - filenames will lead to exceptions. It's too bad, but this is just the way - things are with code pages in zip files. Caveat Emptor. - - - - One possible approach for specifying the code page for a given zip file is - to describe the code page in a human-readable form in the Zip comment. For - example, the comment may read "Entries in this archive are encoded in the - Big5 code page". For maximum interoperability, the zip comment in this - case should be encoded in the default, IBM437 code page. In this case, - the zip comment is encoded using a different page than the filenames. To - do this, Specify ProvisionalAlternateEncoding to your desired - region-specific code page, once before adding any entries, and then set - the property and reset - ProvisionalAlternateEncoding to IBM437 before calling Close(). - - - - - - A Text Encoding to use when encoding the filenames and comments for - all the ZipEntry items, during a ZipFile.Save() operation. - - - - Whether the encoding specified here is used during the save depends - on . - - - - - - A flag that tells if and when this instance should apply - AlternateEncoding to encode the filenames and comments associated to - of ZipEntry objects contained within this instance. - - - - - The default text encoding used in zip archives. It is numeric 437, also - known as IBM437. - - - - - - The size threshold for an entry, above which a parallel deflate is used. - - - - - - DotNetZip will use multiple threads to compress any ZipEntry, when - the CompressionMethod is Deflate, and if the entry is - larger than the given size. Zero means "always use parallel - deflate", while -1 means "never use parallel deflate". - - - - If the entry size cannot be known before compression, as with any entry - added via a ZipOutputStream, then Parallel deflate will never be - performed, unless the value of this property is zero. - - - - A parallel deflate operations will speed up the compression of - large files, on computers with multiple CPUs or multiple CPU - cores. For files above 1mb, on a dual core or dual-cpu (2p) - machine, the time required to compress the file can be 70% of the - single-threaded deflate. For very large files on 4p machines the - compression can be done in 30% of the normal time. The downside - is that parallel deflate consumes extra memory during the deflate, - and the deflation is slightly less effective. - - - - Parallel deflate tends to not be as effective as single-threaded deflate - because the original data stream is split into multiple independent - buffers, each of which is compressed in parallel. But because they are - treated independently, there is no opportunity to share compression - dictionaries, and additional framing bytes must be added to the output - stream. For that reason, a deflated stream may be slightly larger when - compressed using parallel deflate, as compared to a traditional - single-threaded deflate. For files of about 512k, the increase over the - normal deflate is as much as 5% of the total compressed size. For larger - files, the difference can be as small as 0.1%. - - - - Multi-threaded compression does not give as much an advantage when using - Encryption. This is primarily because encryption tends to slow down - the entire pipeline. Also, multi-threaded compression gives less of an - advantage when using lower compression levels, for example . You may have to perform - some tests to determine the best approach for your situation. - - - - The default value for this property is -1, which means parallel - compression will not be performed unless you set it to zero. - - - - - - - The maximum number of buffer pairs to use when performing - parallel compression. - - - - - This property sets an upper limit on the number of memory - buffer pairs to create when performing parallel - compression. The implementation of the parallel - compression stream allocates multiple buffers to - facilitate parallel compression. As each buffer fills up, - the stream uses - ThreadPool.QueueUserWorkItem() to compress those - buffers in a background threadpool thread. After a buffer - is compressed, it is re-ordered and written to the output - stream. - - - - A higher number of buffer pairs enables a higher degree of - parallelism, which tends to increase the speed of compression on - multi-cpu computers. On the other hand, a higher number of buffer - pairs also implies a larger memory consumption, more active worker - threads, and a higher cpu utilization for any compression. This - property enables the application to limit its memory consumption and - CPU utilization behavior depending on requirements. - - - - For each compression "task" that occurs in parallel, there are 2 - buffers allocated: one for input and one for output. This property - sets a limit for the number of pairs. The total amount of storage - space allocated for buffering will then be (N*S*2), where N is the - number of buffer pairs, S is the size of each buffer (). By default, DotNetZip allocates 4 buffer - pairs per CPU core, so if your machine has 4 cores, and you retain - the default buffer size of 128k, then the - ParallelDeflateOutputStream will use 4 * 4 * 2 * 128kb of buffer - memory in total, or 4mb, in blocks of 128kb. If you then set this - property to 8, then the number will be 8 * 2 * 128kb of buffer - memory, or 2mb. - - - - CPU utilization will also go up with additional buffers, because a - larger number of buffer pairs allows a larger number of background - threads to compress in parallel. If you find that parallel - compression is consuming too much memory or CPU, you can adjust this - value downward. - - - - The default value is 16. Different values may deliver better or - worse results, depending on your priorities and the dynamic - performance characteristics of your storage and compute resources. - - - - This property is not the number of buffer pairs to use; it is an - upper limit. An illustration: Suppose you have an application that - uses the default value of this property (which is 16), and it runs - on a machine with 2 CPU cores. In that case, DotNetZip will allocate - 4 buffer pairs per CPU core, for a total of 8 pairs. The upper - limit specified by this property has no effect. - - - - The application can set this value at any time, but it is - effective only if set before calling - ZipOutputStream.Write() for the first time. - - - - - - - - - Returns true if an entry by the given name has already been written - to the ZipOutputStream. - - - - The name of the entry to scan for. - - - - true if an entry by the given name has already been written. - - - - - Write the data from the buffer to the stream. - - - - As the application writes data into this stream, the data may be - compressed and encrypted before being written out to the underlying - stream, depending on the settings of the - and the properties. - - - The buffer holding data to write to the stream. - the offset within that data array to find the first byte to write. - the number of bytes to write. - - - - Specify the name of the next entry that will be written to the zip file. - - - - - Call this method just before calling , to - specify the name of the entry that the next set of bytes written to - the ZipOutputStream belongs to. All subsequent calls to Write, - until the next call to PutNextEntry, - will be inserted into the named entry in the zip file. - - - - If the used in PutNextEntry() ends in - a slash, then the entry added is marked as a directory. Because directory - entries do not contain data, a call to Write(), before an - intervening additional call to PutNextEntry(), will throw an - exception. - - - - If you don't call Write() between two calls to - PutNextEntry(), the first entry is inserted into the zip file as a - file of zero size. This may be what you want. - - - - Because PutNextEntry() closes out the prior entry, if any, this - method may throw if there is a problem with the prior entry. - - - - This method returns the ZipEntry. You can modify public properties - on the ZipEntry, such as , , and so on, until the first call to - ZipOutputStream.Write(), or until the next call to - PutNextEntry(). If you modify the ZipEntry after - having called Write(), you may get a runtime exception, or you may - silently get an invalid zip archive. - - - - - - - This example shows how to create a zip file, using the - ZipOutputStream class. - - - private void Zipup() - { - using (FileStream fs raw = File.Open(_outputFileName, FileMode.Create, FileAccess.ReadWrite )) - { - using (var output= new ZipOutputStream(fs)) - { - output.Password = "VerySecret!"; - output.Encryption = EncryptionAlgorithm.WinZipAes256; - output.PutNextEntry("entry1.txt"); - byte[] buffer= System.Text.Encoding.ASCII.GetBytes("This is the content for entry #1."); - output.Write(buffer,0,buffer.Length); - output.PutNextEntry("entry2.txt"); // this will be zero length - output.PutNextEntry("entry3.txt"); - buffer= System.Text.Encoding.ASCII.GetBytes("This is the content for entry #3."); - output.Write(buffer,0,buffer.Length); - } - } - } - - - - - The name of the entry to be added, including any path to be used - within the zip file. - - - - The ZipEntry created. - - - - - - Dispose the stream - - - - - This method writes the Zip Central directory, then closes the stream. The - application must call Dispose() (or Close) in order to produce a valid zip file. - - - - Typically the application will call Dispose() implicitly, via a using - statement in C#, or a Using statement in VB. - - - - - set this to true, always. - - - - Always returns false. - - - - - Always returns false. - - - - - Always returns true. - - - - - Always returns a NotSupportedException. - - - - - Setting this property always returns a NotSupportedException. Getting it - returns the value of the Position on the underlying stream. - - - - - This is a no-op. - - - - - This method always throws a NotSupportedException. - - ignored - ignored - ignored - nothing - - - - This method always throws a NotSupportedException. - - ignored - ignored - nothing - - - - This method always throws a NotSupportedException. - - ignored - - - - Sort-of like a factory method, ForUpdate is used only when - the application needs to update the zip entry metadata for - a segmented zip file, when the starting segment is earlier - than the ending segment, for a particular entry. - - - - The update is always contiguous, never rolls over. As a - result, this method doesn't need to return a ZSS; it can - simply return a FileStream. That's why it's "sort of" - like a Factory method. - - - Caller must Close/Dispose the stream object returned by - this method. - - - - - - Name of the filesystem file corresponding to the current segment. - - - - The name is not always the name currently being used in the - filesystem. When rwMode is RwMode.Write, the filesystem file has a - temporary name until the stream is closed or until the next segment is - started. - - - - - - Read from the stream - - the buffer to read - the offset at which to start - the number of bytes to read - the number of bytes actually read - - - - Write to the stream. - - the buffer from which to write - the offset at which to start writing - the number of bytes to write - - - - Enumerates the options for a logical conjunction. This enum is intended for use - internally by the FileSelector class. - - - - - FileSelector encapsulates logic that selects files from a source - a zip file - or the filesystem - based on a set of criteria. This class is used internally - by the DotNetZip library, in particular for the AddSelectedFiles() methods. - This class can also be used independently of the zip capability in DotNetZip. - - - - - - The FileSelector class is used internally by the ZipFile class for selecting - files for inclusion into the ZipFile, when the method, or one of - its overloads, is called. It's also used for the methods. Typically, an - application that creates or manipulates Zip archives will not directly - interact with the FileSelector class. - - - - Some applications may wish to use the FileSelector class directly, to - select files from disk volumes based on a set of criteria, without creating or - querying Zip archives. The file selection criteria include: a pattern to - match the filename; the last modified, created, or last accessed time of the - file; the size of the file; and the attributes of the file. - - - - Consult the documentation for - for more information on specifying the selection criteria. - - - - - - - Constructor that allows the caller to specify file selection criteria. - - - - - This constructor allows the caller to specify a set of criteria for - selection of files. - - - - See for a description of - the syntax of the selectionCriteria string. - - - - By default the FileSelector will traverse NTFS Reparse Points. To - change this, use FileSelector(String, bool). - - - - The criteria for file selection. - - - - Constructor that allows the caller to specify file selection criteria. - - - - - This constructor allows the caller to specify a set of criteria for - selection of files. - - - - See for a description of - the syntax of the selectionCriteria string. - - - - The criteria for file selection. - - whether to traverse NTFS reparse points (junctions). - - - - - The string specifying which files to include when retrieving. - - - - - Specify the criteria in statements of 3 elements: a noun, an operator, - and a value. Consider the string "name != *.doc" . The noun is - "name". The operator is "!=", implying "Not Equal". The value is - "*.doc". That criterion, in English, says "all files with a name that - does not end in the .doc extension." - - - - Supported nouns include "name" (or "filename") for the filename; - "atime", "mtime", and "ctime" for last access time, last modfied time, - and created time of the file, respectively; "attributes" (or "attrs") - for the file attributes; "size" (or "length") for the file length - (uncompressed); and "type" for the type of object, either a file or a - directory. The "attributes", "type", and "name" nouns all support = - and != as operators. The "size", "atime", "mtime", and "ctime" nouns - support = and !=, and >, >=, <, <= as well. The times are - taken to be expressed in local time. - - - - Specify values for the file attributes as a string with one or more of - the characters H,R,S,A,I,L in any order, implying file attributes of - Hidden, ReadOnly, System, Archive, NotContextIndexed, and ReparsePoint - (symbolic link) respectively. - - - - To specify a time, use YYYY-MM-DD-HH:mm:ss or YYYY/MM/DD-HH:mm:ss as - the format. If you omit the HH:mm:ss portion, it is assumed to be - 00:00:00 (midnight). - - - - The value for a size criterion is expressed in integer quantities of - bytes, kilobytes (use k or kb after the number), megabytes (m or mb), - or gigabytes (g or gb). - - - - The value for a name is a pattern to match against the filename, - potentially including wildcards. The pattern follows CMD.exe glob - rules: * implies one or more of any character, while ? implies one - character. If the name pattern contains any slashes, it is matched to - the entire filename, including the path; otherwise, it is matched - against only the filename without the path. This means a pattern of - "*\*.*" matches all files one directory level deep, while a pattern of - "*.*" matches all files in all directories. - - - - To specify a name pattern that includes spaces, use single quotes - around the pattern. A pattern of "'* *.*'" will match all files that - have spaces in the filename. The full criteria string for that would - be "name = '* *.*'" . - - - - The value for a type criterion is either F (implying a file) or D - (implying a directory). - - - - Some examples: - - - - - criteria - Files retrieved - - - - name != *.xls - any file with an extension that is not .xls - - - - - name = *.mp3 - any file with a .mp3 extension. - - - - - *.mp3 - (same as above) any file with a .mp3 extension. - - - - - attributes = A - all files whose attributes include the Archive bit. - - - - - attributes != H - all files whose attributes do not include the Hidden bit. - - - - - mtime > 2009-01-01 - all files with a last modified time after January 1st, 2009. - - - - - ctime > 2009/01/01-03:00:00 - all files with a created time after 3am (local time), - on January 1st, 2009. - - - - - size > 2gb - all files whose uncompressed size is greater than 2gb. - - - - - type = D - all directories in the filesystem. - - - - - - You can combine criteria with the conjunctions AND, OR, and XOR. Using - a string like "name = *.txt AND size >= 100k" for the - selectionCriteria retrieves entries whose names end in .txt, and whose - uncompressed size is greater than or equal to 100 kilobytes. - - - - For more complex combinations of criteria, you can use parenthesis to - group clauses in the boolean logic. Absent parenthesis, the - precedence of the criterion atoms is determined by order of - appearance. Unlike the C# language, the AND conjunction does not take - precendence over the logical OR. This is important only in strings - that contain 3 or more criterion atoms. In other words, "name = *.txt - and size > 1000 or attributes = H" implies "((name = *.txt AND size - > 1000) OR attributes = H)" while "attributes = H OR name = *.txt - and size > 1000" evaluates to "((attributes = H OR name = *.txt) - AND size > 1000)". When in doubt, use parenthesis. - - - - Using time properties requires some extra care. If you want to - retrieve all entries that were last updated on 2009 February 14, - specify "mtime >= 2009-02-14 AND mtime < 2009-02-15". Read this - to say: all files updated after 12:00am on February 14th, until - 12:00am on February 15th. You can use the same bracketing approach to - specify any time period - a year, a month, a week, and so on. - - - - The syntax allows one special case: if you provide a string with no - spaces, it is treated as a pattern to match for the filename. - Therefore a string like "*.xls" will be equivalent to specifying "name - = *.xls". This "shorthand" notation does not work with compound - criteria. - - - - There is no logic in this class that insures that the inclusion - criteria are internally consistent. For example, it's possible to - specify criteria that says the file must have a size of less than 100 - bytes, as well as a size that is greater than 1000 bytes. Obviously - no file will ever satisfy such criteria, but this class does not check - for or detect such inconsistencies. - - - - - - Thrown in the setter if the value has an invalid syntax. - - - - - Indicates whether searches will traverse NTFS reparse points, like Junctions. - - - - - Returns a string representation of the FileSelector object. - - The string representation of the boolean logic statement of the file - selection criteria for this instance. - - - - Returns the names of the files in the specified directory - that fit the selection criteria specified in the FileSelector. - - - - This is equivalent to calling - with recurseDirectories = false. - - - - The name of the directory over which to apply the FileSelector - criteria. - - - - A collection of strings containing fully-qualified pathnames of files - that match the criteria specified in the FileSelector instance. - - - - - Returns the names of the files in the specified directory that fit the - selection criteria specified in the FileSelector, optionally recursing - through subdirectories. - - - - This method applies the file selection criteria contained in the - FileSelector to the files contained in the given directory, and - returns the names of files that conform to the criteria. - - - - The name of the directory over which to apply the FileSelector - criteria. - - - - Whether to recurse through subdirectories when applying the file - selection criteria. - - - - A collection of strings containing fully-qualified pathnames of files - that match the criteria specified in the FileSelector instance. - - - - - Retrieve the ZipEntry items in the ZipFile that conform to the specified criteria. - - - - - This method applies the criteria set in the FileSelector instance (as described in - the ) to the specified ZipFile. Using this - method, for example, you can retrieve all entries from the given ZipFile that - have filenames ending in .txt. - - - - Normally, applications would not call this method directly. This method is used - by the ZipFile class. - - - - Using the appropriate SelectionCriteria, you can retrieve entries based on size, - time, and attributes. See for a - description of the syntax of the SelectionCriteria string. - - - - - The ZipFile from which to retrieve entries. - - a collection of ZipEntry objects that conform to the criteria. - - - - Retrieve the ZipEntry items in the ZipFile that conform to the specified criteria. - - - - - This method applies the criteria set in the FileSelector instance (as described in - the ) to the specified ZipFile. Using this - method, for example, you can retrieve all entries from the given ZipFile that - have filenames ending in .txt. - - - - Normally, applications would not call this method directly. This method is used - by the ZipFile class. - - - - This overload allows the selection of ZipEntry instances from the ZipFile to be restricted - to entries contained within a particular directory in the ZipFile. - - - - Using the appropriate SelectionCriteria, you can retrieve entries based on size, - time, and attributes. See for a - description of the syntax of the SelectionCriteria string. - - - - - The ZipFile from which to retrieve entries. - - - the directory in the archive from which to select entries. If null, then - all directories in the archive are used. - - - a collection of ZipEntry objects that conform to the criteria. - - - - Summary description for EnumUtil. - - - - - Returns the value of the DescriptionAttribute if the specified Enum - value has one. If not, returns the ToString() representation of the - Enum value. - - The Enum to get the description for - - - - - Converts the string representation of the name or numeric value of one - or more enumerated constants to an equivalent enumerated object. - Note: use the DescriptionAttribute on enum values to enable this. - - The System.Type of the enumeration. - - A string containing the name or value to convert. - - - - - - Converts the string representation of the name or numeric value of one - or more enumerated constants to an equivalent enumerated object. A - parameter specified whether the operation is case-sensitive. Note: - use the DescriptionAttribute on enum values to enable this. - - The System.Type of the enumeration. - - A string containing the name or value to convert. - - - Whether the operation is case-sensitive or not. - - - -