From 8f9946eb630b1206c30cb8315eff03dc83945cdd Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Thu, 20 Oct 2011 22:04:26 -0700 Subject: [PATCH 1/3] Added some update APIs to check for updates and download and extract the update package. Todo: apply updated, UI. --- NzbDrone.Core.Test/CentralDispatchTest.cs | 12 - NzbDrone.Core.Test/Files/TestArchive.zip | Bin 0 -> 1306 bytes NzbDrone.Core.Test/Framework/Fixtures.cs | 3 +- NzbDrone.Core.Test/Framework/TestBase.cs | 24 +- .../JobTests/BannerDownloadJobTest.cs | 49 +- NzbDrone.Core.Test/NzbDrone.Core.Test.csproj | 6 + .../ExtractArchiveFixture.cs | 29 + .../ProviderTests/LogProviderTest.cs | 8 +- .../ProviderTests/TvDbProviderTest.cs | 8 +- .../GetAvilableUpdateFixture.cs | 66 + .../PreformUpdateFixture.cs | 75 + NzbDrone.Core/CentralDispatch.cs | 29 - NzbDrone.Core/Datastore/Connection.cs | 3 +- .../Instrumentation/LogConfiguration.cs | 3 +- NzbDrone.Core/Model/UpdatePackage.cs | 14 + NzbDrone.Core/NzbDrone.Core.csproj | 6 + .../Providers/Core/ConfigFileProvider.cs | 8 +- .../Providers/Core/ConfigProvider.cs | 6 + NzbDrone.Core/Providers/Core/DiskProvider.cs | 16 + NzbDrone.Core/Providers/Core/HttpProvider.cs | 21 +- NzbDrone.Core/Providers/EnviromentProvider.cs | 55 + .../Providers/Jobs/BannerDownloadJob.cs | 14 +- NzbDrone.Core/Providers/Jobs/JobProvider.cs | 2 +- NzbDrone.Core/Providers/TvDbProvider.cs | 11 +- NzbDrone.Core/Providers/UpdateProvider.cs | 87 + NzbDrone.Core/packages.config | 3 +- NzbDrone.Web/Views/Shared/Footer.cshtml | 2 +- .../DotNetZip.1.9.1.8/DotNetZip.1.9.1.8.nupkg | Bin 0 -> 629749 bytes .../DotNetZip.1.9.1.8/lib/net20/Ionic.Zip.dll | Bin 0 -> 462336 bytes .../DotNetZip.1.9.1.8/lib/net20/Ionic.Zip.xml | 18132 ++++++++++++++++ .../DotNetZip.1.9.1.8/lib/sl/Ionic.Zip.dll | Bin 0 -> 228352 bytes 31 files changed, 18597 insertions(+), 95 deletions(-) create mode 100644 NzbDrone.Core.Test/Files/TestArchive.zip create mode 100644 NzbDrone.Core.Test/ProviderTests/DiskProviderTests/ExtractArchiveFixture.cs create mode 100644 NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/GetAvilableUpdateFixture.cs create mode 100644 NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs create mode 100644 NzbDrone.Core/Model/UpdatePackage.cs create mode 100644 NzbDrone.Core/Providers/EnviromentProvider.cs create mode 100644 NzbDrone.Core/Providers/UpdateProvider.cs create mode 100644 packages/DotNetZip.1.9.1.8/DotNetZip.1.9.1.8.nupkg create mode 100644 packages/DotNetZip.1.9.1.8/lib/net20/Ionic.Zip.dll create mode 100644 packages/DotNetZip.1.9.1.8/lib/net20/Ionic.Zip.xml create mode 100644 packages/DotNetZip.1.9.1.8/lib/sl/Ionic.Zip.dll diff --git a/NzbDrone.Core.Test/CentralDispatchTest.cs b/NzbDrone.Core.Test/CentralDispatchTest.cs index 2dc3b8b02..bcb98925f 100644 --- a/NzbDrone.Core.Test/CentralDispatchTest.cs +++ b/NzbDrone.Core.Test/CentralDispatchTest.cs @@ -84,17 +84,5 @@ namespace NzbDrone.Core.Test { CentralDispatch.NinjectKernel.Get().All().Should().HaveCount(2); } - - [Test] - public void get_version() - { - CentralDispatch.Version.Should().NotBeNull(); - } - - [Test] - public void BuildDate_should_be_within_the_hour() - { - CentralDispatch.BuildDateTime.Should().BeWithin(TimeSpan.FromHours(1)); - } } } diff --git a/NzbDrone.Core.Test/Files/TestArchive.zip b/NzbDrone.Core.Test/Files/TestArchive.zip new file mode 100644 index 0000000000000000000000000000000000000000..05043ba49507e7182394f697e79e81030dc7e8c6 GIT binary patch literal 1306 zcmWIWW@h1H0D+}TLhQi|D8UV+gYxrB-12i$Qj7Eh;0il|3Xh%hKhFtN0K$@}3X6bx z;?pv7QVsP=DoUL5^GZ_lN_e>t`g@7gZ-hgC1DZp{Q0)&cO@cVt5RaR+aOx>8O-cj% z*pMVo5N#kXU(F%XS4L#`%19sXD&B|4BX5O1sm(nzjBNrDKcp!*1v zW-3EBGvVr`?354r`Izxe&fdK%uS2d>q literal 0 HcmV?d00001 diff --git a/NzbDrone.Core.Test/Framework/Fixtures.cs b/NzbDrone.Core.Test/Framework/Fixtures.cs index 2a04a3717..8b6334262 100644 --- a/NzbDrone.Core.Test/Framework/Fixtures.cs +++ b/NzbDrone.Core.Test/Framework/Fixtures.cs @@ -4,6 +4,7 @@ using NLog; using NLog.Config; using NUnit.Framework; using NzbDrone.Core; +using NzbDrone.Core.Providers; using NzbDrone.Core.Test.Framework; [SetUpFixture] @@ -20,7 +21,7 @@ public class Fixtures { try { - LogManager.Configuration = new XmlLoggingConfiguration(Path.Combine(CentralDispatch.AppPath, "log.config"), false); + LogManager.Configuration = new XmlLoggingConfiguration(Path.Combine(new EnviromentProvider().AppPath, "log.config"), false); LogManager.ThrowExceptions = true; var exceptionVerification = new ExceptionVerification(); diff --git a/NzbDrone.Core.Test/Framework/TestBase.cs b/NzbDrone.Core.Test/Framework/TestBase.cs index 8e403b880..eca9b1288 100644 --- a/NzbDrone.Core.Test/Framework/TestBase.cs +++ b/NzbDrone.Core.Test/Framework/TestBase.cs @@ -1,4 +1,5 @@ -using NUnit.Framework; +using System.IO; +using NUnit.Framework; using NzbDrone.Core.Providers.Jobs; namespace NzbDrone.Core.Test.Framework @@ -11,8 +12,10 @@ namespace NzbDrone.Core.Test.Framework public void Setup() { ExceptionVerification.Reset(); - - + if (Directory.Exists(TempFolder)) + { + Directory.Delete(TempFolder, true); + } } [TearDown] @@ -22,5 +25,20 @@ namespace NzbDrone.Core.Test.Framework ExceptionVerification.AssertNoUnexcpectedLogs(); } + + protected string TempFolder + { + get { return Path.Combine(Directory.GetCurrentDirectory(), "_temp"); } + } + + protected string GetTestFilePath(string fileName) + { + return Path.Combine(@".\Files\", fileName); + } + + protected string ReadTestFile(string fileName) + { + return File.ReadAllText(GetTestFilePath(fileName)); + } } } diff --git a/NzbDrone.Core.Test/JobTests/BannerDownloadJobTest.cs b/NzbDrone.Core.Test/JobTests/BannerDownloadJobTest.cs index 57d157ec1..301ea3ad5 100644 --- a/NzbDrone.Core.Test/JobTests/BannerDownloadJobTest.cs +++ b/NzbDrone.Core.Test/JobTests/BannerDownloadJobTest.cs @@ -1,4 +1,5 @@ using System.IO; +using System.Net; using AutoMoq; using FizzWare.NBuilder; using Moq; @@ -24,6 +25,7 @@ namespace NzbDrone.Core.Test.JobTests .Build(); var mocker = new AutoMoqer(MockBehavior.Strict); + mocker.Resolve(); var notification = new ProgressNotification("Banner Download"); @@ -32,8 +34,7 @@ namespace NzbDrone.Core.Test.JobTests .Returns(fakeSeries); mocker.GetMock() - .Setup(s => s.DownloadFile(It.IsAny(), It.IsAny())) - .Returns(true); + .Setup(s => s.DownloadFile(It.IsAny(), It.IsAny())); mocker.GetMock() .Setup(S => S.CreateDirectory(It.IsAny())) @@ -58,6 +59,7 @@ namespace NzbDrone.Core.Test.JobTests .Build(); var mocker = new AutoMoqer(MockBehavior.Strict); + mocker.Resolve(); var notification = new ProgressNotification("Banner Download"); @@ -66,8 +68,7 @@ namespace NzbDrone.Core.Test.JobTests .Returns(fakeSeries); mocker.GetMock() - .Setup(s => s.DownloadFile(It.IsAny(), It.IsAny())) - .Returns(true); + .Setup(s => s.DownloadFile(It.IsAny(), It.IsAny())); mocker.GetMock() .Setup(S => S.CreateDirectory(It.IsAny())) @@ -89,9 +90,10 @@ namespace NzbDrone.Core.Test.JobTests var fakeSeries = Builder.CreateListOfSize(10) .Build(); - var path = Path.Combine(CentralDispatch.AppPath, "Content", "Images", "Banners"); + var path = Path.Combine(new EnviromentProvider().AppPath, "Content", "Images", "Banners"); var mocker = new AutoMoqer(MockBehavior.Strict); + mocker.Resolve(); var notification = new ProgressNotification("Banner Download"); @@ -101,43 +103,42 @@ namespace NzbDrone.Core.Test.JobTests mocker.GetMock() .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(path, "1.jpg"))) - .Returns(false); + .Throws(new WebException()); mocker.GetMock() - .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(path, "2.jpg"))) - .Returns(true); + .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(path, "2.jpg"))); mocker.GetMock() .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(path, "3.jpg"))) - .Returns(false); + .Throws(new WebException()); mocker.GetMock() - .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(path, "4.jpg"))) - .Returns(true); + .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(path, "4.jpg"))); + mocker.GetMock() .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(path, "5.jpg"))) - .Returns(false); + .Throws(new WebException()); mocker.GetMock() - .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(path, "6.jpg"))) - .Returns(true); + .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(path, "6.jpg"))); + mocker.GetMock() .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(path, "7.jpg"))) - .Returns(false); + .Throws(new WebException()); mocker.GetMock() - .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(path, "8.jpg"))) - .Returns(true); + .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(path, "8.jpg"))); + mocker.GetMock() .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(path, "9.jpg"))) - .Returns(false); + .Throws(new WebException()); mocker.GetMock() - .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(path, "10.jpg"))) - .Returns(true); + .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(path, "10.jpg"))); + mocker.GetMock() .Setup(S => S.CreateDirectory(It.IsAny())) @@ -160,6 +161,7 @@ namespace NzbDrone.Core.Test.JobTests .Build(); var mocker = new AutoMoqer(MockBehavior.Strict); + mocker.Resolve(); var notification = new ProgressNotification("Banner Download"); @@ -169,7 +171,7 @@ namespace NzbDrone.Core.Test.JobTests mocker.GetMock() .Setup(s => s.DownloadFile(It.IsAny(), It.IsAny())) - .Returns(false); + .Throws(new WebException()); mocker.GetMock() .Setup(S => S.CreateDirectory(It.IsAny())) @@ -193,6 +195,7 @@ namespace NzbDrone.Core.Test.JobTests .Build(); var mocker = new AutoMoqer(MockBehavior.Strict); + mocker.Resolve(); var notification = new ProgressNotification("Banner Download"); @@ -202,7 +205,7 @@ namespace NzbDrone.Core.Test.JobTests mocker.GetMock() .Setup(s => s.DownloadFile(It.IsAny(), It.IsAny())) - .Returns(true); + .Throws(new WebException()); mocker.GetMock() .Setup(S => S.CreateDirectory(It.IsAny())) @@ -231,7 +234,7 @@ namespace NzbDrone.Core.Test.JobTests mocker.GetMock() .Setup(s => s.DownloadFile(It.IsAny(), It.IsAny())) - .Returns(true); + .Throws(new WebException()); //Act mocker.Resolve().DownloadBanner(notification, fakeSeries); diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index d151323cd..c71240b78 100644 --- a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -92,8 +92,11 @@ + + + @@ -213,6 +216,9 @@ Designer Always + + Always + diff --git a/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/ExtractArchiveFixture.cs b/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/ExtractArchiveFixture.cs new file mode 100644 index 000000000..2c2103b61 --- /dev/null +++ b/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/ExtractArchiveFixture.cs @@ -0,0 +1,29 @@ +using FluentAssertions; +using NUnit.Framework; +using NzbDrone.Core.Providers.Core; +using NzbDrone.Core.Test.Framework; +using System.IO; + +namespace NzbDrone.Core.Test.ProviderTests.DiskProviderTests +{ + [TestFixture] + public class ExtractArchiveFixture : TestBase + { + [Test] + public void Should_extract_to_correct_folder() + { + var diskProvider = new DiskProvider(); + + var destination = Path.Combine(TempFolder, "destination"); + diskProvider.ExtractArchive(GetTestFilePath("TestArchive.zip"), destination); + + + var destinationFolder = new DirectoryInfo(destination); + + destinationFolder.Exists.Should().BeTrue(); + destinationFolder.GetDirectories().Should().HaveCount(1); + destinationFolder.GetDirectories("*", SearchOption.AllDirectories).Should().HaveCount(3); + destinationFolder.GetFiles("*.*", SearchOption.AllDirectories).Should().HaveCount(6); + } + } +} diff --git a/NzbDrone.Core.Test/ProviderTests/LogProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/LogProviderTest.cs index b35ea4a0d..a5b877c76 100644 --- a/NzbDrone.Core.Test/ProviderTests/LogProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/LogProviderTest.cs @@ -20,6 +20,8 @@ namespace NzbDrone.Core.Test.ProviderTests public class LogProviderTest : TestBase { + private const string loggerName ="Core.Test.ProviderTests.LogProviderTest"; + [Test] public void write_log() @@ -46,7 +48,7 @@ namespace NzbDrone.Core.Test.ProviderTests var logItem = db.Fetch().First(); Assert.AreNotEqual(new DateTime(), logItem.Time); Assert.AreEqual(message, logItem.Message); - Assert.AreEqual("Core.Test.LogProviderTest", logItem.Logger); + Assert.AreEqual(loggerName, logItem.Logger); Logger.Name.Should().EndWith(logItem.Logger); @@ -143,7 +145,7 @@ namespace NzbDrone.Core.Test.ProviderTests var logItem = db.Fetch().First(); Assert.AreNotEqual(new DateTime(), logItem.Time); Assert.AreEqual(message + ": " + ex.Message, logItem.Message); - Assert.AreEqual("Core.Test.LogProviderTest", logItem.Logger); + Assert.AreEqual(loggerName, logItem.Logger); Assert.AreEqual(LogLevel.Error.Name, logItem.Level); Assert.AreEqual(ex.GetType().ToString(), logItem.ExceptionType); Assert.AreEqual(ex.ToString(), logItem.Exception); @@ -177,7 +179,7 @@ namespace NzbDrone.Core.Test.ProviderTests var logItem = db.Fetch().First(); Assert.AreNotEqual(new DateTime(), logItem.Time); Assert.AreEqual(ex.Message, logItem.Message); - Assert.AreEqual("Core.Test.LogProviderTest", logItem.Logger); + Assert.AreEqual(loggerName, logItem.Logger); Assert.AreEqual(LogLevel.Error.Name, logItem.Level); Assert.AreEqual(ex.GetType().ToString(), logItem.ExceptionType); Assert.AreEqual(ex.ToString(), logItem.Exception); diff --git a/NzbDrone.Core.Test/ProviderTests/TvDbProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/TvDbProviderTest.cs index c0ec373ce..ebaa0752a 100644 --- a/NzbDrone.Core.Test/ProviderTests/TvDbProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/TvDbProviderTest.cs @@ -20,7 +20,7 @@ namespace NzbDrone.Core.Test.ProviderTests [TestCase("South Park")] public void successful_search(string title) { - var result = new TvDbProvider().SearchSeries(title); + var result = new TvDbProvider(new EnviromentProvider()).SearchSeries(title); result.Should().NotBeEmpty(); result[0].SeriesName.Should().Be(title); @@ -35,7 +35,7 @@ namespace NzbDrone.Core.Test.ProviderTests public void no_search_result() { //setup - var tvdbProvider = new TvDbProvider(); + var tvdbProvider = new TvDbProvider(new EnviromentProvider()); //act var result = tvdbProvider.SearchSeries(Guid.NewGuid().ToString()); @@ -49,7 +49,7 @@ namespace NzbDrone.Core.Test.ProviderTests public void none_unique_season_episode_number() { //setup - var tvdbProvider = new TvDbProvider(); + var tvdbProvider = new TvDbProvider(new EnviromentProvider()); //act var result = tvdbProvider.GetSeries(75978, true);//Family guy @@ -65,7 +65,7 @@ namespace NzbDrone.Core.Test.ProviderTests public void American_dad_fix() { //setup - var tvdbProvider = new TvDbProvider(); + var tvdbProvider = new TvDbProvider(new EnviromentProvider()); //act var result = tvdbProvider.GetSeries(73141, true); diff --git a/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/GetAvilableUpdateFixture.cs b/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/GetAvilableUpdateFixture.cs new file mode 100644 index 000000000..0048c4bf1 --- /dev/null +++ b/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/GetAvilableUpdateFixture.cs @@ -0,0 +1,66 @@ +using System; +using AutoMoq; +using FluentAssertions; +using Moq; +using NUnit.Framework; +using NzbDrone.Core.Providers; +using NzbDrone.Core.Providers.Core; +using NzbDrone.Core.Test.Framework; + +namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests +{ + class GetAvilableUpdateFixture : TestBase + { + private AutoMoqer _mocker = null; + + private static Version _latestsTestVersion = new Version("0.6.0.3"); + private static string _latestsTestUrl = "http://update.nzbdrone.com/_test/NzbDrone.master.0.6.0.3.zip"; + private static string _latestsTestFileName = "NzbDrone.master.0.6.0.3.zip"; + + [SetUp] + public void setup() + { + _mocker = new AutoMoqer(MockBehavior.Strict); + + _mocker.GetMock().SetupGet(c => c.UpdateUrl).Returns("http://update.nzbdrone.com/_test/"); + _mocker.Resolve(); + } + + [TestCase("0.6.0.9")] + [TestCase("0.7.0.1")] + [TestCase("1.0.0.0")] + public void should_return_null_if_latests_is_lower_than_current_version(string currentVersion) + { + _mocker.GetMock().SetupGet(c => c.Version).Returns(new Version(currentVersion)); + + var updatePackage = _mocker.Resolve().GetAvilableUpdate(); + + updatePackage.Should().BeNull(); + } + + [Test] + public void should_return_null_if_latests_is_equal_to_current_version() + { + _mocker.GetMock().SetupGet(c => c.Version).Returns(_latestsTestVersion); + + var updatePackage = _mocker.Resolve().GetAvilableUpdate(); + + updatePackage.Should().BeNull(); + } + + [TestCase("0.0.0.0")] + [TestCase("0.0.0.1")] + [TestCase("0.0.10.10")] + public void should_return_update_if_latests_is_higher_than_current_version(string currentVersion) + { + _mocker.GetMock().SetupGet(c => c.Version).Returns(new Version(currentVersion)); + + var updatePackage = _mocker.Resolve().GetAvilableUpdate(); + + updatePackage.Should().NotBeNull(); + updatePackage.Version.Should().Be(_latestsTestVersion); + updatePackage.FileName.Should().BeEquivalentTo(_latestsTestFileName); + updatePackage.Url.Should().BeEquivalentTo(_latestsTestUrl); + } + } +} diff --git a/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs b/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs new file mode 100644 index 000000000..e25b9ae68 --- /dev/null +++ b/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs @@ -0,0 +1,75 @@ +using System; +using System.IO; +using AutoMoq; +using FluentAssertions; +using Moq; +using NUnit.Framework; +using NzbDrone.Core.Model; +using NzbDrone.Core.Providers; +using NzbDrone.Core.Providers.Core; +using NzbDrone.Core.Test.Framework; + +namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests +{ + [TestFixture] + internal class PreformUpdateFixture : TestBase + { + private AutoMoqer _mocker = null; + + [SetUp] + public void setup() + { + _mocker = new AutoMoqer(MockBehavior.Strict); + _mocker.GetMock() + .SetupGet(c => c.TempPath).Returns(TempFolder); + } + + + [Test] + public void Should_call_download_file_using_correct_arguments() + { + //Act + var updatePackage = new UpdatePackage + { + FileName = "NzbDrone.kay.one.0.6.0.2031.zip", + Url = "http://update.nzbdrone.com/kayone/NzbDrone.kay.one.0.6.0.2031.zip", + Version = new Version("0.6.0.2031") + }; + + _mocker.GetMock().Setup( + c => c.DownloadFile(updatePackage.Url, Path.Combine(TempFolder, updatePackage.FileName))); + + _mocker.Resolve().PreformUpdate(updatePackage); + } + + [Test] + public void Should_download_and_extract_to_temp_folder() + { + + var updateSubFolder = new DirectoryInfo(Path.Combine(TempFolder, UpdateProvider.SandboxFolderName)); + + var updatePackage = new UpdatePackage + { + FileName = "NzbDrone.kay.one.0.6.0.2031.zip", + Url = "http://update.nzbdrone.com/_test/NzbDrone.zip", + Version = new Version("0.6.0.2031") + }; + + + //Act + updateSubFolder.Exists.Should().BeFalse(); + + _mocker.Resolve(); + _mocker.Resolve(); + _mocker.Resolve().PreformUpdate(updatePackage); + updateSubFolder.Refresh(); + //Assert + + updateSubFolder.Exists.Should().BeTrue(); + updateSubFolder.GetDirectories("nzbdrone").Should().HaveCount(1); + updateSubFolder.GetDirectories().Should().HaveCount(1); + updateSubFolder.GetFiles().Should().HaveCount(1); + } + + } +} diff --git a/NzbDrone.Core/CentralDispatch.cs b/NzbDrone.Core/CentralDispatch.cs index c458bb02a..f90c0f837 100644 --- a/NzbDrone.Core/CentralDispatch.cs +++ b/NzbDrone.Core/CentralDispatch.cs @@ -23,35 +23,6 @@ namespace NzbDrone.Core private static readonly Object KernelLock = new object(); private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - - public static Version Version - { - get { return Assembly.GetExecutingAssembly().GetName().Version; } - } - - - public static DateTime BuildDateTime - { - get - { - var fileLocation = Assembly.GetCallingAssembly().Location; - return new FileInfo(fileLocation).CreationTime; - } - - } - - public static String AppPath - { - get - { - if (!String.IsNullOrWhiteSpace(HostingEnvironment.ApplicationPhysicalPath)) - { - return HostingEnvironment.ApplicationPhysicalPath; - } - return Directory.GetCurrentDirectory(); - } - } - public static StandardKernel NinjectKernel { get diff --git a/NzbDrone.Core/Datastore/Connection.cs b/NzbDrone.Core/Datastore/Connection.cs index 7c76e2b3b..631f522cd 100644 --- a/NzbDrone.Core/Datastore/Connection.cs +++ b/NzbDrone.Core/Datastore/Connection.cs @@ -4,13 +4,14 @@ using System.Data.Common; using System.Data.SqlServerCe; using System.IO; using MvcMiniProfiler.Data; +using NzbDrone.Core.Providers; using PetaPoco; namespace NzbDrone.Core.Datastore { public static class Connection { - private static readonly DirectoryInfo AppDataPath = new DirectoryInfo(Path.Combine(CentralDispatch.AppPath, "App_Data")); + private static readonly DirectoryInfo AppDataPath = new DirectoryInfo(Path.Combine(new EnviromentProvider().AppPath, "App_Data")); static Connection() { diff --git a/NzbDrone.Core/Instrumentation/LogConfiguration.cs b/NzbDrone.Core/Instrumentation/LogConfiguration.cs index ec398ed5f..e3febc64a 100644 --- a/NzbDrone.Core/Instrumentation/LogConfiguration.cs +++ b/NzbDrone.Core/Instrumentation/LogConfiguration.cs @@ -3,6 +3,7 @@ using System.IO; using Ninject; using NLog; using NLog.Config; +using NzbDrone.Core.Providers; namespace NzbDrone.Core.Instrumentation { @@ -15,7 +16,7 @@ namespace NzbDrone.Core.Instrumentation LogManager.ThrowExceptions = true; } - LogManager.Configuration = new XmlLoggingConfiguration(Path.Combine(CentralDispatch.AppPath, "log.config"), + LogManager.Configuration = new XmlLoggingConfiguration(Path.Combine(new EnviromentProvider().AppPath, "log.config"), false); LogManager.ConfigurationReloaded += ((s, e) => StartDbLogging()); diff --git a/NzbDrone.Core/Model/UpdatePackage.cs b/NzbDrone.Core/Model/UpdatePackage.cs new file mode 100644 index 000000000..14f10a171 --- /dev/null +++ b/NzbDrone.Core/Model/UpdatePackage.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace NzbDrone.Core.Model +{ + public class UpdatePackage + { + public string Url { get; set; } + public string FileName { get; set; } + public Version Version { get; set; } + } +} diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 08688a67b..dc5c58ea9 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -125,6 +125,9 @@ False ..\Libraries\Exceptioneer.WindowsFormsClient.dll + + ..\packages\DotNetZip.1.9.1.8\lib\net20\Ionic.Zip.dll + False @@ -203,12 +206,14 @@ + + @@ -222,6 +227,7 @@ + diff --git a/NzbDrone.Core/Providers/Core/ConfigFileProvider.cs b/NzbDrone.Core/Providers/Core/ConfigFileProvider.cs index e6fdc787a..7ee204018 100644 --- a/NzbDrone.Core/Providers/Core/ConfigFileProvider.cs +++ b/NzbDrone.Core/Providers/Core/ConfigFileProvider.cs @@ -11,14 +11,14 @@ namespace NzbDrone.Core.Providers.Core { public class ConfigFileProvider { - private string _configFile = Path.Combine(CentralDispatch.AppPath, "App_Data", "Config.xml"); + private string _configFile = Path.Combine(new EnviromentProvider().AppPath, "App_Data", "Config.xml"); public string ConfigFile { get { return _configFile; } set { _configFile = value; } } - + public virtual int Port { get { return GetValueInt("Port", 8989); } @@ -60,7 +60,7 @@ namespace NzbDrone.Core.Providers.Core } var valueHolder = parentContainer.Descendants(key).ToList(); - + if (valueHolder.Count() == 1) return valueHolder.First().Value; @@ -113,7 +113,7 @@ namespace NzbDrone.Core.Providers.Core public virtual void CreateDefaultConfigFile() { //Create the config file here - Directory.CreateDirectory(Path.Combine(CentralDispatch.AppPath, "App_Data")); + Directory.CreateDirectory(Path.Combine(new EnviromentProvider().AppPath, "App_Data")); if (!File.Exists(ConfigFile)) { diff --git a/NzbDrone.Core/Providers/Core/ConfigProvider.cs b/NzbDrone.Core/Providers/Core/ConfigProvider.cs index 79518c78c..b86bdb34b 100644 --- a/NzbDrone.Core/Providers/Core/ConfigProvider.cs +++ b/NzbDrone.Core/Providers/Core/ConfigProvider.cs @@ -305,6 +305,12 @@ namespace NzbDrone.Core.Providers.Core set { SetValue("XbmcPassword", value); } } + public virtual string UpdateUrl + { + get { return GetValue("UpdateUrl", @"http://update.nzbdrone.com/master/"); } + set { SetValue("UpdateUrl", value); } + } + private string GetValue(string key) { return GetValue(key, String.Empty); diff --git a/NzbDrone.Core/Providers/Core/DiskProvider.cs b/NzbDrone.Core/Providers/Core/DiskProvider.cs index f93580af4..8c15f0566 100644 --- a/NzbDrone.Core/Providers/Core/DiskProvider.cs +++ b/NzbDrone.Core/Providers/Core/DiskProvider.cs @@ -2,11 +2,15 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using Ionic.Zip; +using NLog; namespace NzbDrone.Core.Providers.Core { public class DiskProvider { + private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + public virtual bool FolderExists(string path) { return Directory.Exists(path); @@ -74,6 +78,18 @@ namespace NzbDrone.Core.Providers.Core Directory.Move(source, destination); } + public virtual void ExtractArchive(string compressedFile, string destination) + { + Logger.Trace("Extracting archive [{0}] to [{1}]", compressedFile, destination); + + using (ZipFile zipFile = ZipFile.Read(compressedFile)) + { + zipFile.ExtractAll(destination); + } + + Logger.Trace("Extraction complete."); + } + public virtual void InheritFolderPermissions(string filename) { var fs = File.GetAccessControl(filename); diff --git a/NzbDrone.Core/Providers/Core/HttpProvider.cs b/NzbDrone.Core/Providers/Core/HttpProvider.cs index d9ae3d5f5..d0908b33e 100644 --- a/NzbDrone.Core/Providers/Core/HttpProvider.cs +++ b/NzbDrone.Core/Providers/Core/HttpProvider.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.IO; using System.Net; using System.Text; @@ -50,19 +51,29 @@ namespace NzbDrone.Core.Providers.Core return response.GetResponseStream(); } - public virtual bool DownloadFile(string address, string fileName) + public virtual void DownloadFile(string url, string fileName) { try { + var fileInfo = new FileInfo(fileName); + if (!fileInfo.Directory.Exists) + { + fileInfo.Directory.Create(); + } + + Logger.Trace("Downloading [{0}] to [{1}]", url, fileName); + + var stopWatch = Stopwatch.StartNew(); var webClient = new WebClient(); - webClient.DownloadFile(address, fileName); - return true; + webClient.DownloadFile(url, fileName); + stopWatch.Stop(); + Logger.Trace("Downloading Completed. took {0:0}s", stopWatch.Elapsed.Seconds); } catch (Exception ex) { - Logger.Warn("Failed to get response from: {0}", address); + Logger.Warn("Failed to get response from: {0}", url); Logger.TraceException(ex.Message, ex); - return false; + throw; } } diff --git a/NzbDrone.Core/Providers/EnviromentProvider.cs b/NzbDrone.Core/Providers/EnviromentProvider.cs new file mode 100644 index 000000000..85440060a --- /dev/null +++ b/NzbDrone.Core/Providers/EnviromentProvider.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; +using System.Web.Hosting; +using NLog; +using Ninject; +using NzbDrone.Core.Model; +using NzbDrone.Core.Providers.Core; + +namespace NzbDrone.Core.Providers +{ + public class EnviromentProvider + { + + public virtual Version Version + { + get { return Assembly.GetExecutingAssembly().GetName().Version; } + } + + public virtual DateTime BuildDateTime + { + get + { + var fileLocation = Assembly.GetCallingAssembly().Location; + return new FileInfo(fileLocation).CreationTime; + } + + } + + public virtual String AppPath + { + get + { + if (!String.IsNullOrWhiteSpace(HostingEnvironment.ApplicationPhysicalPath)) + { + return HostingEnvironment.ApplicationPhysicalPath; + } + return Directory.GetCurrentDirectory(); + } + } + + public virtual String TempPath + { + get + { + return Path.GetTempPath(); + } + } + + } +} diff --git a/NzbDrone.Core/Providers/Jobs/BannerDownloadJob.cs b/NzbDrone.Core/Providers/Jobs/BannerDownloadJob.cs index 9d8596dd6..83f5090ad 100644 --- a/NzbDrone.Core/Providers/Jobs/BannerDownloadJob.cs +++ b/NzbDrone.Core/Providers/Jobs/BannerDownloadJob.cs @@ -15,17 +15,19 @@ namespace NzbDrone.Core.Providers.Jobs private readonly SeriesProvider _seriesProvider; private readonly HttpProvider _httpProvider; private readonly DiskProvider _diskProvider; + private readonly EnviromentProvider _enviromentProvider; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private string _bannerPath = ""; private const string _bannerUrlPrefix = "http://www.thetvdb.com/banners/"; [Inject] - public BannerDownloadJob(SeriesProvider seriesProvider, HttpProvider httpProvider, DiskProvider diskProvider) + public BannerDownloadJob(SeriesProvider seriesProvider, HttpProvider httpProvider, DiskProvider diskProvider, EnviromentProvider enviromentProvider) { _seriesProvider = seriesProvider; _httpProvider = httpProvider; _diskProvider = diskProvider; + _enviromentProvider = enviromentProvider; } public BannerDownloadJob() @@ -47,7 +49,7 @@ namespace NzbDrone.Core.Providers.Jobs { Logger.Debug("Starting banner download job"); - _bannerPath = Path.Combine(CentralDispatch.AppPath, "Content", "Images", "Banners"); + _bannerPath = Path.Combine(_enviromentProvider.AppPath, "Content", "Images", "Banners"); _diskProvider.CreateDirectory(_bannerPath); if (targetId > 0) @@ -76,10 +78,12 @@ namespace NzbDrone.Core.Providers.Jobs notification.CurrentMessage = string.Format("Downloading banner for '{0}'", series.Title); - if (_httpProvider.DownloadFile(_bannerUrlPrefix + series.BannerUrl, bannerFilename)) + try + { + _httpProvider.DownloadFile(_bannerUrlPrefix + series.BannerUrl, bannerFilename); notification.CurrentMessage = string.Format("Successfully download banner for '{0}'", series.Title); - - else + } + catch (Exception) { Logger.Debug("Failed to download banner for '{0}'", series.Title); notification.CurrentMessage = string.Format("Failed to download banner for '{0}'", series.Title); diff --git a/NzbDrone.Core/Providers/Jobs/JobProvider.cs b/NzbDrone.Core/Providers/Jobs/JobProvider.cs index 362abcf4a..79b982eb9 100644 --- a/NzbDrone.Core/Providers/Jobs/JobProvider.cs +++ b/NzbDrone.Core/Providers/Jobs/JobProvider.cs @@ -278,7 +278,7 @@ namespace NzbDrone.Core.Providers.Jobs settings.Success = true; sw.Stop(); - Logger.Debug("Job '{0}' successfully completed in {1}.{2} seconds.", jobImplementation.Name, sw.Elapsed.Seconds, sw.Elapsed.Milliseconds / 100, + Logger.Debug("Job '{0}' successfully completed in {1:0}.{2} seconds.", jobImplementation.Name, sw.Elapsed.TotalSeconds, sw.Elapsed.Milliseconds / 100, sw.Elapsed.Seconds); } catch (Exception e) diff --git a/NzbDrone.Core/Providers/TvDbProvider.cs b/NzbDrone.Core/Providers/TvDbProvider.cs index b9c6e555f..efa59ee26 100644 --- a/NzbDrone.Core/Providers/TvDbProvider.cs +++ b/NzbDrone.Core/Providers/TvDbProvider.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using NLog; +using Ninject; using TvdbLib; using TvdbLib.Cache; using TvdbLib.Data; @@ -11,14 +12,22 @@ namespace NzbDrone.Core.Providers { public class TvDbProvider { + private readonly EnviromentProvider _enviromentProvider; private const string TVDB_APIKEY = "5D2D188E86E07F4F"; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private readonly TvdbHandler _handler; + [Inject] + public TvDbProvider(EnviromentProvider enviromentProvider) + { + _enviromentProvider = enviromentProvider; + _handler = new TvdbHandler(new XmlCacheProvider(_enviromentProvider.AppPath + @"\cache\tvdb"), TVDB_APIKEY); + } + public TvDbProvider() { - _handler = new TvdbHandler(new XmlCacheProvider(CentralDispatch.AppPath + @"\cache\tvdb"), TVDB_APIKEY); + } public virtual IList SearchSeries(string title) diff --git a/NzbDrone.Core/Providers/UpdateProvider.cs b/NzbDrone.Core/Providers/UpdateProvider.cs new file mode 100644 index 000000000..eb70e710f --- /dev/null +++ b/NzbDrone.Core/Providers/UpdateProvider.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using NLog; +using Ninject; +using NzbDrone.Core.Model; +using NzbDrone.Core.Providers.Core; + +namespace NzbDrone.Core.Providers +{ + class UpdateProvider + { + private readonly HttpProvider _httpProvider; + private readonly ConfigProvider _configProvider; + private readonly EnviromentProvider _enviromentProvider; + private readonly DiskProvider _diskProvider; + private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + + private static readonly Regex ParseRegex = new Regex(@"(?:\>)(?NzbDrone.+?(?\d+\.\d+\.\d+\.\d+).+?)(?:\<\/A\>)", RegexOptions.IgnoreCase); + + public const string SandboxFolderName = "nzbdrone_update"; + + [Inject] + public UpdateProvider(HttpProvider httpProvider, ConfigProvider configProvider, EnviromentProvider enviromentProvider, DiskProvider diskProvider) + { + _httpProvider = httpProvider; + _configProvider = configProvider; + _enviromentProvider = enviromentProvider; + _diskProvider = diskProvider; + } + + public UpdateProvider() + { + + } + + private List GetAvailablePackages() + { + var updateList = new List(); + var rawUpdateList = _httpProvider.DownloadString(_configProvider.UpdateUrl); + var matches = ParseRegex.Matches(rawUpdateList); + + foreach (Match match in matches) + { + var updatePackage = new UpdatePackage(); + updatePackage.FileName = match.Groups["filename"].Value; + updatePackage.Url = _configProvider.UpdateUrl + updatePackage.FileName; + updatePackage.Version = new Version(match.Groups["version"].Value); + updateList.Add(updatePackage); + } + + return updateList; + } + + public virtual UpdatePackage GetAvilableUpdate() + { + var latestAvailable = GetAvailablePackages().OrderByDescending(c => c.Version).FirstOrDefault(); + + if (latestAvailable != null && latestAvailable.Version > _enviromentProvider.Version) + { + Logger.Debug("An update is available ({0}) => ({1})", _enviromentProvider.Version, latestAvailable.Version); + return latestAvailable; + } + + Logger.Trace("No updates available"); + return null; + } + + public virtual void PreformUpdate(UpdatePackage updatePackage) + { + var tempSubFolder = Path.Combine(_enviromentProvider.TempPath, SandboxFolderName); + var packageDestination = Path.Combine(tempSubFolder, updatePackage.FileName); + + Logger.Info("Downloading update package from [{0}] to [{1}]", updatePackage.Url, packageDestination); + _httpProvider.DownloadFile(updatePackage.Url, packageDestination); + Logger.Info("Download completed for update package from [{0}]", updatePackage.FileName); + + Logger.Info("Extracting Update package"); + _diskProvider.ExtractArchive(packageDestination, tempSubFolder); + Logger.Info("Update package extracted successfully"); + } + + } +} diff --git a/NzbDrone.Core/packages.config b/NzbDrone.Core/packages.config index 56053a9af..dd12cf164 100644 --- a/NzbDrone.Core/packages.config +++ b/NzbDrone.Core/packages.config @@ -1,7 +1,8 @@  + - + \ No newline at end of file diff --git a/NzbDrone.Web/Views/Shared/Footer.cshtml b/NzbDrone.Web/Views/Shared/Footer.cshtml index a98c88721..382bce276 100644 --- a/NzbDrone.Web/Views/Shared/Footer.cshtml +++ b/NzbDrone.Web/Views/Shared/Footer.cshtml @@ -1,5 +1,5 @@ @using NzbDrone.Core
- NZBDrone @CentralDispatch.Version (@CentralDispatch.BuildDateTime.ToString("MMM d, yyyy")) + @*NZBDrone @CentralDispatch.Version (@CentralDispatch.BuildDateTime.ToString("MMM d, yyyy"))*@
diff --git a/packages/DotNetZip.1.9.1.8/DotNetZip.1.9.1.8.nupkg b/packages/DotNetZip.1.9.1.8/DotNetZip.1.9.1.8.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..fbcbafd3038acfc97a7962550e2d2e98f46e62d8 GIT binary patch literal 629749 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

I~jnKYy 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ÒZ!3(K~=yS1zxx(L?m9V=AiBD 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 z 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�+8b5fOM&dQ=0e~$G7YWB3?4+x20 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

wHM{k4cSIsEYclKTQf;P94#yHN{?QH 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%0Dw=HETThS}>vO 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%0Dx)4q>+mQbyTqfus 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 + + + Ionic.Zip + + + +

+ 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. + + + + + 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. + + + + 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. + + + + 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 + + + + 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. + + + + + + + + + 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. + + + + + 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. + + + + 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. + + + + + 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 + + + + 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); + } + } + } + } + } + + + + + + + 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). + + + + + 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. + + + + + + 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 + + + + 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. + + + + + + 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 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.) + + + + + 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. + + + + The WinZip AES algorithms are not supported with the version of DotNetZip that + runs on the .NET Compact Framework. This is because .NET CF lacks the + HMACSHA1 class that is required for producing the archive. + + + + + + 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. + + + + + 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.) + + + + + 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). + + + + + 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. + + + + 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. + + + + + 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. + + + + + 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. + + + + Close the stream. + + + + + Flush the content in the stream. + + + + + This method throws a NotImplementedException. + + + + + This method throws a NotImplementedException. + + + + + Returns the final HMAC-SHA1-80 for the data that was encrypted. + + + + + Returns true if the stream can be read. + + + + + Always returns false. + + + + + Returns true if the CryptoMode is Encrypt. + + + + + Getting this property throws a NotImplementedException. + + + + + Getting or Setting this property throws a NotImplementedException. + + + + + Issued when an ZipEntry.ExtractWithPassword() method is invoked + with an incorrect password. + + + + + 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. + + + + 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. + + + + 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 + + + + 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. + + + + The System.IO.Path.GetRandomFileName() method is not available on + the Compact Framework, so this library provides its own substitute + on NETCF. + + + 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 is built for .NET 2.0, so I cannot use them. + + + + + 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 + + + + 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. + + + + Flushes the underlying 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. + + + + Gets the wrapped stream. + + + + + The count of bytes written out to the stream. + + + + + the count of bytes that have been read from the stream. + + + + + 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. + + + + + 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. + + + + + 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. + + + + + + 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. + + + + + + + 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 + + + + + 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. + + + + 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. + + + + + 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. + + + + + 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. + + + + + 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. + + + + + + + + + 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. + + + + Validates that the args are consistent. + + + Only one of {baseDir, outStream} can be non-null. + If baseDir is non-null, then the outputFile is created. + + + + + 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. + + + + + + True if the referenced entry is a directory. + + + + + Provides a human-readable string with information about the ZipEntry. + + + + + 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. + + + + + + + + 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 . + + + + + + + + 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. + + + + This property is only partially supported in the Silverlight version + of the library: applications can read attributes on entries within + ZipFiles. But extracting entries within Silverlight will not set the + attributes on the extracted files. + + + + + + + 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 + + + + + + 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. + + + + + 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. + + + + + If preserveDirHierarchy is true, any directory structure present in the + filenames contained in the list is preserved in the archive. On the other + hand, if preserveDirHierarchy is false, 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. + 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, or on Silverlight, using UTF-8. + + + + 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, + just-in-time. + + + + + 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 and provide delegates to open and close the + stream. + + + + 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. In a real + application, the logic for the OpenDelegate would probably be more + involved. + + + 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 to open the stream + + + the delegate that will be invoked 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, or on Silverlight, using + UTF-8. 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 or Compact Framework + versions 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 or Compact + Framework versions 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. + + + + 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. + + + + Provides a string representation of the instance. + a string representation of the instance. + + + + 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. + + + + 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. + + + + + 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 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 FileSteeam(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 instanct 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. + + + + + + Saves the ZipFile instance to a self-extracting zip archive. + + + + + + The generated exe image will execute on any machine that has the .NET + Framework 2.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 2.0 is required + on the computer when the self-extracting archive is run. + + + + NB: This method is not available in the version of DotNetZip build for + the .NET Compact Framework, nor 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. + + + + 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. + + + + + 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. + + + + + 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 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. + + + + + The default text encoding used in zip archives. It is numeric 437, also + known as IBM437. + + + + + + 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. + + + + 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(). + + + + + + + + + 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. + + + + + + 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. + + + + + 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 + + + + + + + + + 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. + + + + + + + + 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. + + + + + + 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. + + + + + 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(). + + + + + 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. + + + + + 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 + + + + 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. + + + + + 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. + + + + + 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 + + + + Flush the stream. + + + + + 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. + + + + 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. + + + + + 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. + + + + + Compressor State + + + + 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. + + + + + 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. + + + + 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 + + + + The blocksize parameter specified at construction time. + + + + + 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. + + + + + 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. + + + + + Close the stream. + + + + This may or may not close the underlying stream. Check the + constructors that accept a bool value. + + + + + + Flush the stream. + + + + + 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. + + + + 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 + + + + 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. + + + + + + The blocksize parameter specified at construction time. + + + + + 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(). + + + + + Returns the "random" number at a specific index. + + the index + the random number + + + + 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. + + + + 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. + + + + + Flush 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 + + + + 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. + + + + 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. + + + + + 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. + + + + + 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 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(). + + + + + 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. + + + + 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. + + + + + Flush 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 + + + + 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 CRC on the GZIP stream. + + + This is used for internal error checking. You probably don't need to look at this property. + + + + + 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. + + + + 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. + + + + + 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. + + + + + 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. + + + + + 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); + } + } + } + } + + + + + + 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. + + + + + 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(). + + + + + 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. + + + + + + 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. + + + + + 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. + + + + The Adler32 checksum on the data transferred through the codec so far. You probably don't need to look at this. + + + + + 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. Defaults to 8192 bytes. + + + + + The minimum size of the working buffer used in the ZlibCodec class. Currently it is 128 bytes. + + + + + 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. + + + + + 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. + + + + + Flush 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 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. + + + + 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. + + + + + 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. + + + + + 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. + + + + + 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. + + + + + + Indicates the total number of bytes applied to the CRC. + + + + + Indicates the current CRC for all blocks slurped in. + + + + + 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 + + + + 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 + + + + Flush the stream. + + + + + 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. + + + + + 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 . + + + + + + Indicates whether the stream supports reading. + + + + + Indicates whether the stream supports seeking. + + + + Always returns false. + + + + + + Indicates whether the stream supports writing. + + + + + 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 + . + + + + diff --git a/packages/DotNetZip.1.9.1.8/lib/sl/Ionic.Zip.dll b/packages/DotNetZip.1.9.1.8/lib/sl/Ionic.Zip.dll new file mode 100644 index 0000000000000000000000000000000000000000..5b2ec970a43c65eba321a196462af3165c2c8304 GIT binary patch literal 228352 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∨BBEs$m8^wTSWYYL@2u-SgtvMXlHBQPBs1SgCfh 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≫GrowIusFIg&1Eto1T4LAl1Gu^n51{ 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 literal 0 HcmV?d00001 From b0095e489251493117a00d2f88c960932a9e3a7c Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Thu, 20 Oct 2011 22:07:25 -0700 Subject: [PATCH 2/3] Added Nlog logger to resharper live templates --- NzbDrone.6.0.ReSharper | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/NzbDrone.6.0.ReSharper b/NzbDrone.6.0.ReSharper index e4857a138..f0c66ec6f 100644 --- a/NzbDrone.6.0.ReSharper +++ b/NzbDrone.6.0.ReSharper @@ -105,6 +105,15 @@ + \ No newline at end of file From 5bb3b339a60ab564baaa0f6fa531459a1c716010 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Thu, 20 Oct 2011 23:58:23 -0700 Subject: [PATCH 3/3] Fixed broken test --- .../UpdateProviderTests/PreformUpdateFixture.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs b/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs index e25b9ae68..3ef354107 100644 --- a/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs @@ -26,7 +26,7 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests [Test] - public void Should_call_download_file_using_correct_arguments() + public void Should_call_download_and_extract_using_correct_arguments() { //Act var updatePackage = new UpdatePackage @@ -37,7 +37,11 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests }; _mocker.GetMock().Setup( - c => c.DownloadFile(updatePackage.Url, Path.Combine(TempFolder, updatePackage.FileName))); + c => c.DownloadFile(updatePackage.Url, Path.Combine(TempFolder, UpdateProvider.SandboxFolderName ,updatePackage.FileName))); + + _mocker.GetMock().Setup( + c => c.ExtractArchive(Path.Combine(TempFolder, UpdateProvider.SandboxFolderName, updatePackage.FileName), + Path.Combine(TempFolder, UpdateProvider.SandboxFolderName))); _mocker.Resolve().PreformUpdate(updatePackage); }