From 1d153b904090f3e51cc23d5ffd431f2d85b14cfd Mon Sep 17 00:00:00 2001 From: AtelierWindows Date: Sat, 4 May 2019 08:18:55 +1200 Subject: [PATCH] V1.1 - FULL RCO & RCS SUPPORT --- AppInfoCli/AppInfo.cs | 345 - AppInfoCli/CXML.cs | 780 + .../{AppInfoCli.csproj => CXMLCli.csproj} | 10 +- AppInfoCli/Program.cs | 94 +- AppInfoCli/packages.config | 4 + AppInfoParser.sln | 2 +- packages/DotNetZip.1.13.3/.signature.p7s | Bin 0 -> 9512 bytes .../DotNetZip.1.13.3/DotNetZip.1.13.3.nupkg | Bin 0 -> 911324 bytes .../DotNetZip.1.13.3/lib/net40/DotNetZip.dll | Bin 0 -> 458752 bytes .../DotNetZip.1.13.3/lib/net40/DotNetZip.pdb | Bin 0 -> 587264 bytes .../DotNetZip.1.13.3/lib/net40/DotNetZip.xml | 18520 ++++++++++++++++ .../lib/netstandard2.0/DotNetZip.dll | Bin 0 -> 239616 bytes .../lib/netstandard2.0/DotNetZip.pdb | Bin 0 -> 103104 bytes .../lib/netstandard2.0/DotNetZip.xml | 18022 +++++++++++++++ 14 files changed, 37405 insertions(+), 372 deletions(-) delete mode 100644 AppInfoCli/AppInfo.cs create mode 100644 AppInfoCli/CXML.cs rename AppInfoCli/{AppInfoCli.csproj => CXMLCli.csproj} (84%) create mode 100644 AppInfoCli/packages.config create mode 100644 packages/DotNetZip.1.13.3/.signature.p7s create mode 100644 packages/DotNetZip.1.13.3/DotNetZip.1.13.3.nupkg create mode 100644 packages/DotNetZip.1.13.3/lib/net40/DotNetZip.dll create mode 100644 packages/DotNetZip.1.13.3/lib/net40/DotNetZip.pdb create mode 100644 packages/DotNetZip.1.13.3/lib/net40/DotNetZip.xml create mode 100644 packages/DotNetZip.1.13.3/lib/netstandard2.0/DotNetZip.dll create mode 100644 packages/DotNetZip.1.13.3/lib/netstandard2.0/DotNetZip.pdb create mode 100644 packages/DotNetZip.1.13.3/lib/netstandard2.0/DotNetZip.xml diff --git a/AppInfoCli/AppInfo.cs b/AppInfoCli/AppInfo.cs deleted file mode 100644 index d549481..0000000 --- a/AppInfoCli/AppInfo.cs +++ /dev/null @@ -1,345 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Text; -using System.Xml; - -namespace AppInfo -{ - class Types - { - public static int TYPE_STRING = 3; - public static int TYPE_FLOAT = 2; - public static int TYPE_INT = 1; - public static int TYPE_FILE = 8; - } - - class Tools - { - public static MemoryStream ByteToStream(byte[] Array) - { - MemoryStream ms = new MemoryStream(); - ms.Write(Array, 0x00, Array.Length); - ms.Seek(0, SeekOrigin.Begin); - return ms; - } - - public static bool IsImage(byte[] Bytes) - { - try - { - GetBitmap(Bytes); - } - catch(Exception) - { - return false; - } - return true; - } - - public static Bitmap GetBitmap(byte[] BitmapBytes) - { - MemoryStream ms = ByteToStream(BitmapBytes); - Bitmap bmp = new Bitmap(ms); - ms.Dispose(); - return bmp; - } - - public static String ReadStringAt(Stream ms, int location) - { - long ogPos = ms.Position; - ms.Seek(location, SeekOrigin.Begin); - String str = ReadString(ms); - ms.Seek(ogPos, SeekOrigin.Begin); - return str; - } - - public static int ReadIntAt(Stream ms, int location) - { - BinaryReader BinReader = new BinaryReader(ms); - long ogPos = ms.Position; - ms.Seek(location, SeekOrigin.Begin); - int i = BinReader.ReadInt32(); - ms.Seek(ogPos, SeekOrigin.Begin); - return i; - } - - public static int ReadInt(Stream ms) - { - BinaryReader BinReader = new BinaryReader(ms); - int i = BinReader.ReadInt32(); - return i; - } - - public static String ReadString(Stream ms) - { - int i = 0xFF; - - MemoryStream StringStream = new MemoryStream(); - - do - { - i = ms.ReadByte(); - if (i == 0) - break; - StringStream.WriteByte((byte)i); - } - while (true); - - byte[] StringData = StringStream.ToArray(); - - String str = Encoding.UTF8.GetString(StringData); - - return str; - - } - } - - class Parser - { - - private static bool _checkMagicNumber() - { - String Magic = Tools.ReadStringAt(InfoFile, 0x00); - - if (Magic.StartsWith("PSMA")) - { - return true; - } - else if(Magic.StartsWith("RCOF")) - { - Console.WriteLine("WARNING: .RCO files probably wont work!!\nThis tool was made for PSM's \"app.info\" files."); - return true; - } - else - { - return false; - } - } - - static FileStream InfoFile; - static MemoryStream StringTable; - static MemoryStream TreeTable; - static MemoryStream FileTable; - static BinaryReader BinaryTree; - static XmlWriter XMLFile; - - public static void Init(string Path, bool CheckMagic = true) - { - InfoFile = File.Open(Path, FileMode.Open, FileAccess.Read); - if(CheckMagic) - { - if (!_checkMagicNumber()) - { - throw new Exception("Incorrect magic number."); - } - - } - - StringTable = Tools.ByteToStream(GetStringTable()); - TreeTable = Tools.ByteToStream(GetTreeTable()); - FileTable = Tools.ByteToStream(GetFileTable()); - BinaryTree = new BinaryReader(TreeTable); - - return; - } - - public static void Term() - { - InfoFile.Close(); - StringTable.Close(); - TreeTable.Close(); - FileTable.Close(); - BinaryTree.Dispose(); - } - - public static int GetTableOffset() - { - return Tools.ReadIntAt(InfoFile,0x8); - } - - public static int GetTableSize() - { - return Tools.ReadIntAt(InfoFile, 0xC); - } - - public static int GetFileTableOffset() - { - return Tools.ReadIntAt(InfoFile, 0x48); - } - - public static int GetFileTableSize() - { - return Tools.ReadIntAt(InfoFile, 0x4C); - } - - public static int GetStringTableOffset() - { - return Tools.ReadIntAt(InfoFile, 0x20); - } - - public static int GetStringTableSize() - { - return Tools.ReadIntAt(InfoFile, 0x24); - } - - public static byte[] GetStringTable() - { - int StringTableOffset = GetStringTableOffset(); - int StringTableSize = GetStringTableSize(); - InfoFile.Seek(StringTableOffset, SeekOrigin.Begin); - byte[] StringTable = new byte[StringTableSize]; - InfoFile.Read(StringTable, 0x00, StringTableSize); - return StringTable; - } - - public static byte[] GetTreeTable() - { - int TableOffset = GetTableOffset(); - int TableSize = GetTableSize(); - InfoFile.Seek(TableOffset, SeekOrigin.Begin); - byte[] Table = new byte[TableSize]; - InfoFile.Read(Table, 0x00, TableSize); - return Table; - } - - public static byte[] GetFileTable() - { - int DataOffset = GetFileTableOffset(); - int DataLength = GetFileTableSize(); - InfoFile.Seek(DataOffset, SeekOrigin.Begin); - byte[] FileTable = new byte[DataLength]; - InfoFile.Read(FileTable, 0x00, DataLength); - return FileTable; - } - - public static void DecompileCXML(String CXMLFile, bool force = false) - { - Init(CXMLFile,force); - XmlWriterSettings XMLSettings = new XmlWriterSettings(); - XMLSettings.Indent = true; - - XMLFile = XmlWriter.Create(Path.GetFileNameWithoutExtension(CXMLFile)+".xml", XMLSettings); - XMLFile.WriteStartDocument(); - - ReadElement(); - - XMLFile.WriteEndDocument(); - XMLFile.Flush(); - - Term(); - } - - public static void ReadAttribute() - { - int AttributePtr = BinaryTree.ReadInt32(); - int AttributeType = BinaryTree.ReadInt32(); - - String AttributeName = Tools.ReadStringAt(StringTable, AttributePtr); - object AttributeValue; - Console.WriteLine("AttributeType: " + AttributeType); - - if (AttributeType == Types.TYPE_STRING) - { - int ValuePtr = BinaryTree.ReadInt32(); - AttributeValue = Tools.ReadStringAt(StringTable, ValuePtr); - TreeTable.Seek(4, SeekOrigin.Current); - } - else if(AttributeType == Types.TYPE_FLOAT) - { - AttributeValue = BinaryTree.ReadSingle(); - TreeTable.Seek(4, SeekOrigin.Current); - } - else if(AttributeType == Types.TYPE_INT) - { - AttributeValue = BinaryTree.ReadInt32(); - TreeTable.Seek(4, SeekOrigin.Current); - } - else if(AttributeType == Types.TYPE_FILE) - { - int FilePtr = BinaryTree.ReadInt32(); - int FileSz = BinaryTree.ReadInt32(); - - String FileName = ""; - - Byte[] FileData = new Byte[FileSz]; - FileTable.Seek(FilePtr,SeekOrigin.Begin); - FileTable.Read(FileData, 0, FileSz); - - if (Tools.IsImage(FileData)) - FileName = AttributeName + ".png"; - else - FileName = AttributeName + ".txt"; - - Console.WriteLine("Writing: " + FileName); - File.WriteAllBytes(FileName, FileData); - - AttributeValue = FileName; - } - else - { - Console.WriteLine("ERROR: Unknown Type '"+AttributeType+"' @ " + (TreeTable.Position - 4).ToString()); - Environment.Exit(-1); - return; - } - - Console.WriteLine(AttributeName + "=" + AttributeValue.ToString()); - XMLFile.WriteAttributeString(AttributeName, AttributeValue.ToString()); - XMLFile.Flush(); - } - - public static void ReadElement() - { - - int ElementPtr = BinaryTree.ReadInt32(); - int NumAttributes = BinaryTree.ReadInt32(); - - int ParentPtr = BinaryTree.ReadInt32(); - int PrevSibling = BinaryTree.ReadInt32(); - int NextSibling = BinaryTree.ReadInt32(); - - int FirstChild = BinaryTree.ReadInt32(); - int LastChild = BinaryTree.ReadInt32(); - - String ElementName = Tools.ReadStringAt(StringTable, ElementPtr); - Console.WriteLine("Creating Element: " + ElementName); - Console.WriteLine("Attribute Count: " + NumAttributes); - - Console.WriteLine("ParentPtr: " + ParentPtr); - Console.WriteLine("PrevSibling: " + PrevSibling); - Console.WriteLine("NextSibling: " + NextSibling); - - Console.WriteLine("FirstChild: " + FirstChild); - Console.WriteLine("LastChild: " + LastChild); - - XMLFile.WriteStartElement(ElementName); - - if(NumAttributes > 0) - { - for (int i = 0; i < NumAttributes; i++) - { - ReadAttribute(); - } - } - - if (FirstChild != -1) - { - TreeTable.Seek(FirstChild, SeekOrigin.Begin); - ReadElement(); - } - - - XMLFile.WriteEndElement(); - XMLFile.Flush(); - - if (NextSibling != -1) - { - TreeTable.Seek(NextSibling, SeekOrigin.Begin); - ReadElement(); - } - - } - - } -} diff --git a/AppInfoCli/CXML.cs b/AppInfoCli/CXML.cs new file mode 100644 index 0000000..d1de354 --- /dev/null +++ b/AppInfoCli/CXML.cs @@ -0,0 +1,780 @@ +using Ionic.Zlib; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Text; +using System.Xml; + +namespace CXML +{ + enum AttributeType + { + TYPE_NONE, + TYPE_INT, + TYPE_FLOAT, + TYPE_STRING, + TYPE_CHAR, + TYPE_STYLE_ID, + TYPE_INTEGER_ARRAY, + TYPE_FLOAT_ARRAY, + TYPE_FILE, + TYPE_ID_STRING_LOOPBACK, + TYPE_ID_STRING, + TYPE_ID_INT_LOOPBACK, + TYPE_ID_INT + }; + + + class Tools + { + public static String RemoveDecimals(float FloatValue) + { + String FloatStr = FloatValue.ToString(); + String[] FloatParts = FloatStr.Split('.'); + if (FloatParts.Length > 1) + if(FloatParts[1].Length > 2) + FloatParts[1] = FloatParts[1].Substring(0, 2); + + + FloatStr = String.Join(".", FloatParts); + return FloatStr; + } + public static MemoryStream ByteToStream(byte[] Array) + { + MemoryStream ms = new MemoryStream(); + ms.Write(Array, 0x00, Array.Length); + ms.Seek(0, SeekOrigin.Begin); + return ms; + } + + public static byte[] StreamToByte(Stream stream) + { + int StreamLen = (int)stream.Length; + byte[] Bytes = new byte[StreamLen]; + stream.Seek(0, SeekOrigin.Begin); + stream.Read(Bytes, 0x00, StreamLen); + return Bytes; + } + + public static string GetFileExtension(byte[] Bytes) + { + if(IsImage(Bytes)) + { + return ".png"; + } + else if(IsZlib(Bytes)) + { + return ".zlib"; + } + else if(IsGim(Bytes)) + { + return ".gim"; + } + else if(IsRcf(Bytes)) + { + return ".rcs"; + } + else if(IsDDS(Bytes)) + { + return ".dds"; + } + else if (IsVAG(Bytes)) + { + return ".vag"; + } + else + { + return ".bin"; + } + } + + public static bool IsVAG(byte[] Bytes) + { + MemoryStream Data = ByteToStream(Bytes); + String header = ReadString(Data, 4); + if (header.StartsWith("VAG")) + { + return true; + } + else + { + return false; + } + } + + public static bool IsDDS(byte[] Bytes) + { + MemoryStream Data = ByteToStream(Bytes); + String header = ReadString(Data, 4); + if (header.StartsWith("DDS")) + { + return true; + } + else + { + return false; + } + } + + + public static bool IsRcf(byte[] Bytes) + { + MemoryStream Data = ByteToStream(Bytes); + String header = ReadString(Data, 5); + if (header.StartsWith("RCSF")) + { + return true; + } + else + { + return false; + } + } + + public static bool IsGim(byte[] Bytes) + { + MemoryStream Data = ByteToStream(Bytes); + String header = ReadString(Data,4); + if(header.StartsWith("MIG")) + { + return true; + } + else + { + return false; + } + } + + public static bool IsZlib(byte[] Bytes) + { + if(Bytes[0] == 0x78) + { + if (Bytes[1] == 0x01) + return true; + if (Bytes[1] == 0x9C) + return true; + if (Bytes[1] == 0xDA) + return true; + } + return false; + } + + + + public static bool IsImage(byte[] Bytes) + { + try + { + GetBitmap(Bytes); + } + catch(Exception) + { + return false; + } + return true; + } + + public static Bitmap GetBitmap(byte[] BitmapBytes) + { + MemoryStream ms = ByteToStream(BitmapBytes); + Bitmap bmp = new Bitmap(ms); + ms.Dispose(); + return bmp; + } + + public static String ReadStringAt(Stream ms, int location) + { + long ogPos = ms.Position; + ms.Seek(location, SeekOrigin.Begin); + String str = ReadString(ms); + ms.Seek(ogPos, SeekOrigin.Begin); + return str; + } + + public static int ReadIntAt(Stream ms, int location) + { + BinaryReader BinReader = new BinaryReader(ms); + long ogPos = ms.Position; + ms.Seek(location, SeekOrigin.Begin); + int i = BinReader.ReadInt32(); + ms.Seek(ogPos, SeekOrigin.Begin); + return i; + } + + public static int ReadInt(Stream ms) + { + BinaryReader BinReader = new BinaryReader(ms); + int i = BinReader.ReadInt32(); + return i; + } + + public static String ReadString(Stream ms, int limit = -1) + { + int i = 0xFF; + + MemoryStream StringStream = new MemoryStream(); + + do + { + i = ms.ReadByte(); + if (i == 0 && i != limit) + break; + StringStream.WriteByte((byte)i); + } + while (true); + + byte[] StringData = StringStream.ToArray(); + + String str = Encoding.UTF8.GetString(StringData); + + return str; + + } + } + + class Parser + { + + private static bool _checkMagicNumber() + { + String Magic = Tools.ReadStringAt(InfoFile, 0x00); + + if (Magic.StartsWith("PSMA")) + { + return true; + } + else if(Magic.StartsWith("RCOF")) + { + return true; + } + else if (Magic.StartsWith("RCSF")) + { + return true; + } + else + { + return false; + } + } + + static FileStream InfoFile; + + static MemoryStream TreeTable; + static MemoryStream StringIDTable; + static MemoryStream IntIDTable; + static MemoryStream StringTable; + static MemoryStream CharTable; + static MemoryStream StylesIDTable; + static MemoryStream IntArrayTable; + static MemoryStream FloatArrayTable; + static MemoryStream FileTable; + + + static BinaryReader bTreeTable; + static BinaryReader bIntIDTable; + static BinaryReader bFloatArrayTable; + static BinaryReader bIntArrayTable; + static BinaryReader bStylesIDTable; + + static XmlWriter XMLFile; + + public static void Init(string Path, bool CheckMagic = true) + { + InfoFile = File.Open(Path, FileMode.Open, FileAccess.Read); + if(CheckMagic) + { + if (!_checkMagicNumber()) + { + throw new Exception("Incorrect magic number."); + } + + } + + + TreeTable = Tools.ByteToStream(GetTreeTable()); + StringIDTable = Tools.ByteToStream(GetStringIDTable()); + IntIDTable = Tools.ByteToStream(GetIntIDTable()); + StringTable = Tools.ByteToStream(GetStringTable()); + CharTable = Tools.ByteToStream(GetCharTable()); + StylesIDTable = Tools.ByteToStream(GetStyleIDTable()); + IntArrayTable = Tools.ByteToStream(GetIntArrayTable()); + FloatArrayTable = Tools.ByteToStream(GetFloatArrayTable()); + FileTable = Tools.ByteToStream(GetFileTable()); + + bTreeTable = new BinaryReader(TreeTable); + bIntIDTable = new BinaryReader(IntIDTable); + bFloatArrayTable = new BinaryReader(FloatArrayTable); + bIntArrayTable = new BinaryReader(IntArrayTable); + bStylesIDTable = new BinaryReader(StylesIDTable); + + return; + } + + public static void Term() + { + InfoFile.Close(); + TreeTable.Close(); + StringIDTable.Close(); + IntIDTable.Close(); + StringTable.Close(); + CharTable.Close(); + StylesIDTable.Close(); + IntArrayTable.Close(); + FloatArrayTable.Close(); + FileTable.Close(); + + bTreeTable.Close(); + bIntIDTable.Close(); + bFloatArrayTable.Close(); + bIntArrayTable.Close(); + bStylesIDTable.Close(); + } + + public static int GetTreeTableOffset() + { + return Tools.ReadIntAt(InfoFile,0x8); + } + + public static int GetTreeTableSize() + { + return Tools.ReadIntAt(InfoFile, 0xC); + } + + public static int GetIDStringTableOffset() + { + return Tools.ReadIntAt(InfoFile, 0x10); + } + + public static int GetIDStringTableSize() + { + return Tools.ReadIntAt(InfoFile, 0x14); + } + + public static int GetIDIntTableOffset() + { + return Tools.ReadIntAt(InfoFile, 0x18); + } + + public static int GetIDIntTableSize() + { + return Tools.ReadIntAt(InfoFile, 0x1C); + } + + public static int GetStringTableOffset() + { + return Tools.ReadIntAt(InfoFile, 0x20); + } + + public static int GetStringTableSize() + { + return Tools.ReadIntAt(InfoFile, 0x24); + } + + public static int GetCharTableOffset() + { + return Tools.ReadIntAt(InfoFile, 0x28); + } + + public static int GetCharTableSize() + { + return Tools.ReadIntAt(InfoFile, 0x2C); + } + + public static int GetStyleIDTableOffset() + { + return Tools.ReadIntAt(InfoFile, 0x30); + } + + public static int GetStyleIDTableSize() + { + return Tools.ReadIntAt(InfoFile, 0x34); + } + + public static int GetIntArrayTableOffset() + { + return Tools.ReadIntAt(InfoFile, 0x38); + } + + public static int GetIntArrayTableSize() + { + return Tools.ReadIntAt(InfoFile, 0x3C); + } + + public static int GetFloatArrayTableOffset() + { + return Tools.ReadIntAt(InfoFile, 0x40); + } + + public static int GetFloatArrayTableSize() + { + return Tools.ReadIntAt(InfoFile, 0x44); + } + + public static int GetFileTableOffset() + { + return Tools.ReadIntAt(InfoFile, 0x48); + } + + public static int GetFileTableSize() + { + return Tools.ReadIntAt(InfoFile, 0x4C); + } + + public static byte[] GetTreeTable() + { + int TableOffset = GetTreeTableOffset(); + int TableSize = GetTreeTableSize(); + InfoFile.Seek(TableOffset, SeekOrigin.Begin); + byte[] Table = new byte[TableSize]; + InfoFile.Read(Table, 0x00, TableSize); + return Table; + } + + public static byte[] GetStringIDTable() + { + int IDStrTableOffset = GetIDStringTableOffset(); + int IDStrTableSize = GetIDStringTableSize(); + InfoFile.Seek(IDStrTableOffset, SeekOrigin.Begin); + byte[] IDStringTable = new byte[IDStrTableSize]; + InfoFile.Read(IDStringTable, 0x00, IDStrTableSize); + return IDStringTable; + } + + public static byte[] GetIntIDTable() + { + int IDIntTableOffset = GetIDIntTableOffset(); + int IDIntTableSize = GetIDIntTableSize(); + InfoFile.Seek(IDIntTableOffset, SeekOrigin.Begin); + byte[] IDIntTable = new byte[IDIntTableSize]; + InfoFile.Read(IDIntTable, 0x00, IDIntTableSize); + return IDIntTable; + } + + public static byte[] GetStringTable() + { + int StringTableOffset = GetStringTableOffset(); + int StringTableSize = GetStringTableSize(); + InfoFile.Seek(StringTableOffset, SeekOrigin.Begin); + byte[] StringTable = new byte[StringTableSize]; + InfoFile.Read(StringTable, 0x00, StringTableSize); + return StringTable; + } + + public static byte[] GetCharTable() + { + int CharTableOffset = GetCharTableOffset(); + int CharTableSize = GetCharTableSize(); + InfoFile.Seek(CharTableOffset, SeekOrigin.Begin); + byte[] CharTable = new byte[CharTableSize]; + InfoFile.Read(CharTable, 0x00, CharTableSize); + return CharTable; + } + + public static byte[] GetStyleIDTable() + { + int StyleIDTableOffset = GetStyleIDTableOffset(); + int StyleIDTableSize = GetStyleIDTableSize(); + InfoFile.Seek(StyleIDTableOffset, SeekOrigin.Begin); + byte[] StyleIDTable = new byte[StyleIDTableSize]; + InfoFile.Read(StyleIDTable, 0x00, StyleIDTableSize); + return StyleIDTable; + } + + public static byte[] GetIntArrayTable() + { + int IntArrayTableOffset = GetIntArrayTableOffset(); + int IntArrayTableSize = GetIntArrayTableSize(); + InfoFile.Seek(IntArrayTableOffset, SeekOrigin.Begin); + byte[] IntArrayTable = new byte[IntArrayTableSize]; + InfoFile.Read(IntArrayTable, 0x00, IntArrayTableSize); + return IntArrayTable; + } + + public static byte[] GetFloatArrayTable() + { + int FloatArrayTableOffset = GetFloatArrayTableOffset(); + int FloatArrayTableSize = GetFloatArrayTableSize(); + InfoFile.Seek(FloatArrayTableOffset, SeekOrigin.Begin); + byte[] FloatArrayTable = new byte[FloatArrayTableSize]; + InfoFile.Read(FloatArrayTable, 0x00, FloatArrayTableSize); + return FloatArrayTable; + } + + public static byte[] GetFileTable() + { + int DataOffset = GetFileTableOffset(); + int DataLength = GetFileTableSize(); + InfoFile.Seek(DataOffset, SeekOrigin.Begin); + byte[] FileTable = new byte[DataLength]; + InfoFile.Read(FileTable, 0x00, DataLength); + return FileTable; + } + + public static void DecompileCXML(String CXMLFile, bool force = false) + { + if(Directory.Exists("files")) + Directory.Delete("files", true); + Term(); + Init(CXMLFile,force); + XmlWriterSettings XMLSettings = new XmlWriterSettings(); + XMLSettings.Indent = true; + + XMLFile = XmlWriter.Create(Path.GetFileNameWithoutExtension(CXMLFile)+".xml", XMLSettings); + XMLFile.WriteStartDocument(); + + ReadElement(); + + XMLFile.WriteEndDocument(); + XMLFile.Flush(); + + Term(); + } + + public static void ReadAttribute(String ElementName = "") + { + int AttributePtr = bTreeTable.ReadInt32(); + AttributeType Type = (AttributeType)bTreeTable.ReadInt32(); + + String AttributeName = Tools.ReadStringAt(StringTable, AttributePtr); + object AttributeValue = ""; + Console.WriteLine("AttributeType: " + Type.ToString() + " - "+ TreeTable.Position.ToString()); + switch (Type) + { + case AttributeType.TYPE_NONE: + Console.WriteLine("UNSUPPORTED TYPE @ " + TreeTable.Position); + Console.ReadKey(); + break; + case AttributeType.TYPE_INT: + AttributeValue = bTreeTable.ReadInt32(); + TreeTable.Seek(4, SeekOrigin.Current); + break; + case AttributeType.TYPE_FLOAT: + float FloatValue = bTreeTable.ReadSingle(); + AttributeValue = Tools.RemoveDecimals(FloatValue); + TreeTable.Seek(4, SeekOrigin.Current); + break; + case AttributeType.TYPE_STRING: + int StringOffset = bTreeTable.ReadInt32(); + int StringLen = bTreeTable.ReadInt32(); + + byte[] StringBytes = new byte[StringLen]; + StringTable.Seek(StringOffset, 0x00); + StringTable.Read(StringBytes, 0x00, StringLen); + + AttributeValue = Encoding.UTF8.GetString(StringBytes); + break; + case AttributeType.TYPE_CHAR: + int CharOffset = bTreeTable.ReadInt32() * 2; + int CharLen = bTreeTable.ReadInt32(); + + byte[] CharBytes = new byte[CharLen]; + CharTable.Seek(CharOffset, 0x00); + CharTable.Read(CharBytes, 0x00, CharLen); + + AttributeValue = Encoding.Unicode.GetString(CharBytes); + break; + case AttributeType.TYPE_STYLE_ID: + int StyleTableOffset = bTreeTable.ReadInt32(); + int StyleTableSize = bTreeTable.ReadInt32(); + + byte[] StyleTableData = new byte[StyleTableSize]; + + StylesIDTable.Seek(StyleTableOffset, SeekOrigin.Begin); + StylesIDTable.Read(StyleTableData, 0x00, StyleTableSize); + AttributeValue = BitConverter.ToString(StyleTableData).Replace("-",""); + break; + case AttributeType.TYPE_INTEGER_ARRAY: + int IntArrayOffset = bTreeTable.ReadInt32(); + int IntArraySize = bTreeTable.ReadInt32(); + IntArrayTable.Seek(IntArrayOffset, SeekOrigin.Begin); + + List IntList = new List(); + + for (int i = 0; i < IntArraySize; i++) + { + int IntValue = bIntArrayTable.ReadInt32(); + IntList.Add(IntValue); + } + int[] IntArray = IntList.ToArray(); + AttributeValue = String.Join(", ", IntArray); + break; + case AttributeType.TYPE_FLOAT_ARRAY: + int FloatArrayOffset = bTreeTable.ReadInt32(); + int FloatArraySize = bTreeTable.ReadInt32(); + FloatArrayTable.Seek(FloatArrayOffset, SeekOrigin.Begin); + + List StrList = new List(); + + for(int i = 0; i < FloatArraySize; i++) + { + FloatValue = bFloatArrayTable.ReadSingle(); + StrList.Add(Tools.RemoveDecimals(FloatValue)); + } + string[] StrArray = StrList.ToArray(); + AttributeValue = String.Join(", ", StrArray); + break; + case AttributeType.TYPE_FILE: + int FilePtr = bTreeTable.ReadInt32(); + int FileSz = bTreeTable.ReadInt32(); + + String FileName = ""; + + Byte[] FileData = new Byte[FileSz]; + FileTable.Seek(FilePtr, SeekOrigin.Begin); + FileTable.Read(FileData, 0, FileSz); + + if (!Directory.Exists("files")) + Directory.CreateDirectory("files"); + + int count = 0; + string CounterStr = count.ToString(); + do + { + String Extension = Tools.GetFileExtension(FileData); + CounterStr = count.ToString(); + if (count == 0) + CounterStr = ""; + FileName = "files/" + ElementName + "-" + AttributeName + CounterStr + Extension; + count++; + } + while (File.Exists(FileName)); + + Console.WriteLine("Writing: " + FileName); + if(Path.GetExtension(FileName) == ".zlib") + { + Console.WriteLine("Decompressing " + FileName); + Byte[] DecompressedData = ZlibStream.UncompressBuffer(FileData); + String Extension = Tools.GetFileExtension(DecompressedData); + if (!Directory.Exists("files/decompressed")) + Directory.CreateDirectory("files/decompressed"); + String DecompressedFilename = "files/decompressed/" + ElementName + "-" + AttributeName + CounterStr + Extension; + Console.WriteLine("Decompressed file written to: " + DecompressedFilename); + File.WriteAllBytes(DecompressedFilename, DecompressedData); + + if(Extension == ".gim") + { + if(File.Exists("GimConv/GimConv.exe")) + { + if (!Directory.Exists("files/converted")) + Directory.CreateDirectory("files/converted"); + + Console.WriteLine("Decoding GIM."); + + Process Proc = new Process(); + Proc.StartInfo.FileName = "GimConv/GimConv.exe"; + Proc.StartInfo.Arguments = Path.GetFileName(DecompressedFilename) + " -o " + "../converted/" + ElementName + "-" + AttributeName + CounterStr + ".png"; + Proc.StartInfo.RedirectStandardOutput = true; + Proc.StartInfo.RedirectStandardError = true; + Proc.StartInfo.UseShellExecute = false; + Proc.StartInfo.WorkingDirectory = Directory.GetCurrentDirectory()+ "/files/decompressed"; + Proc.Start(); + Proc.WaitForExit(); + Console.WriteLine(Proc.StandardOutput.ReadToEnd()); + + Console.WriteLine("Done!"); + } + + } + } + + File.WriteAllBytes(FileName, FileData); + + AttributeValue = FileName; + break; + case AttributeType.TYPE_ID_STRING_LOOPBACK: + int StringIdTableOffset = bTreeTable.ReadInt32(); + AttributeValue = Tools.ReadStringAt(StringIDTable, StringIdTableOffset + 0x4); + TreeTable.Seek(4, SeekOrigin.Current); + break; + case AttributeType.TYPE_ID_STRING: + Console.WriteLine("UNSUPPORTED TYPE @ " + TreeTable.Position); + Console.ReadKey(); + break; + case AttributeType.TYPE_ID_INT_LOOPBACK: + int IntIdTableOffset = bTreeTable.ReadInt32(); + IntIDTable.Seek(IntIdTableOffset, SeekOrigin.Begin); + int Loopback = bIntIDTable.ReadInt32(); + int IDValue = bIntIDTable.ReadInt32(); + + int StringPtr = Tools.ReadIntAt(TreeTable, Loopback); + String LoopbackAttribute = Tools.ReadStringAt(StringTable, StringPtr); + Console.WriteLine("Loopback: " + LoopbackAttribute); + + AttributeValue = IDValue.ToString("X8"); + TreeTable.Seek(4, SeekOrigin.Current); + break; + case AttributeType.TYPE_ID_INT: + IntIdTableOffset = bTreeTable.ReadInt32(); + IntIDTable.Seek(IntIdTableOffset + 4, SeekOrigin.Begin); + IDValue = bIntIDTable.ReadInt32(); + + AttributeValue = IDValue.ToString("X8"); + TreeTable.Seek(4, SeekOrigin.Current); + break; + default: + Console.WriteLine("UNKNOWN TYPE @ " + TreeTable.Position); + break; + }; + + + Console.WriteLine(AttributeName + "=" + AttributeValue.ToString()); + XMLFile.WriteAttributeString(AttributeName, AttributeValue.ToString()); + XMLFile.Flush(); + } + + public static void ReadElement() + { + + int ElementPtr = bTreeTable.ReadInt32(); + int NumAttributes = bTreeTable.ReadInt32(); + + int ParentPtr = bTreeTable.ReadInt32(); + int PrevSibling = bTreeTable.ReadInt32(); + int NextSibling = bTreeTable.ReadInt32(); + + int FirstChild = bTreeTable.ReadInt32(); + int LastChild = bTreeTable.ReadInt32(); + + String ElementName = Tools.ReadStringAt(StringTable, ElementPtr); + Console.WriteLine("Creating Element: " + ElementName); + Console.WriteLine("Attribute Count: " + NumAttributes); + + Console.WriteLine("ParentPtr: " + ParentPtr); + Console.WriteLine("PrevSibling: " + PrevSibling); + Console.WriteLine("NextSibling: " + NextSibling); + + Console.WriteLine("FirstChild: " + FirstChild); + Console.WriteLine("LastChild: " + LastChild); + + XMLFile.WriteStartElement(ElementName); + + if(NumAttributes > 0) + { + for (int i = 0; i < NumAttributes; i++) + { + ReadAttribute(ElementName); + } + } + + if (FirstChild != -1) + { + TreeTable.Seek(FirstChild, SeekOrigin.Begin); + ReadElement(); + } + + + XMLFile.WriteEndElement(); + XMLFile.Flush(); + + if (NextSibling != -1) + { + TreeTable.Seek(NextSibling, SeekOrigin.Begin); + ReadElement(); + } + + } + + } +} diff --git a/AppInfoCli/AppInfoCli.csproj b/AppInfoCli/CXMLCli.csproj similarity index 84% rename from AppInfoCli/AppInfoCli.csproj rename to AppInfoCli/CXMLCli.csproj index 27cd443..5296d34 100644 --- a/AppInfoCli/AppInfoCli.csproj +++ b/AppInfoCli/CXMLCli.csproj @@ -6,8 +6,8 @@ AnyCPU {BE72E673-25FF-47AB-AF5B-9448B69E3990} Exe - AppInfoCli - AppInfoCli + CXMLDecompiler + CXMLDecompiler v4.6.1 512 true @@ -33,6 +33,9 @@ 4 + + ..\packages\DotNetZip.1.13.3\lib\net40\DotNetZip.dll + @@ -44,12 +47,13 @@ - + + \ No newline at end of file diff --git a/AppInfoCli/Program.cs b/AppInfoCli/Program.cs index d10de38..31c5d5c 100644 --- a/AppInfoCli/Program.cs +++ b/AppInfoCli/Program.cs @@ -2,14 +2,15 @@ using System.IO; using System.Reflection; -namespace AppInfoCli +namespace CXMLCli { class Program { static void Main(string[] args) { - bool Check = true; + bool Check = true; + if (args.Length == 0) { Console.WriteLine("-- app.info/CXML Decompiler --"); @@ -17,11 +18,18 @@ namespace AppInfoCli Console.WriteLine("Required Arguments:"); Console.WriteLine("\t"); Console.WriteLine("Optional Arguments:"); - Console.WriteLine("\t-f --force Dont check magic number."); - Console.WriteLine("\t-s --dump-strings Dump string table."); - Console.WriteLine("\t-t --dump-tree Dump tree table."); - Console.WriteLine("\t-ft --dump-file Dump file table."); - Console.WriteLine("\t-d --decompile Decompile CXML."); + Console.WriteLine("\t-f --force Dont check magic number."); + Console.WriteLine("\t-dt --dump-tables Dump ALL tables."); + Console.WriteLine("\t-tt --dump-tree Dump tree table."); + Console.WriteLine("\t-ist --dump-string-id Dump string ID table."); + Console.WriteLine("\t-iit --dump-int-id Dump int ID table."); + Console.WriteLine("\t-st --dump-string Dump string table."); + Console.WriteLine("\t-ct --dump-char Dump char table."); + Console.WriteLine("\t-sit --dump-style-id Dump style ID table."); + Console.WriteLine("\t-iat --dump-int-array Dump int array table."); + Console.WriteLine("\t-fat --dump-float-array Dump float array table."); + Console.WriteLine("\t-ft --dump-file Dump file table."); + Console.WriteLine("\t-d --decompile Decompile CXML."); Console.WriteLine("Example: " + Path.GetFileName(Assembly.GetEntryAssembly().Location) + " app.info -f -s -t -f -d"); Console.WriteLine("Default functonality is to Decompile,\ntThis is canceled if any other arguments passed."); return; @@ -29,43 +37,83 @@ namespace AppInfoCli String ArgsFull = String.Join(" ", args); String path = args[0]; + CXML.Parser.Init(path, Check); if (ArgsFull.Contains("-f") || ArgsFull.Contains("--force")) { Check = false; } - - if (ArgsFull.Contains("-s") || ArgsFull.Contains("--dump-strings")) + if (ArgsFull.Contains("-dt") || ArgsFull.Contains("--dump-tables")) { - Console.WriteLine("Dumping string table."); - AppInfo.Parser.Init(path, Check); - File.WriteAllBytes("string-table.bin",AppInfo.Parser.GetStringTable()); - AppInfo.Parser.Term(); - + ArgsFull += "-tt -ist -iit -st -ct -sit -iat -fat -ft"; } - - if (ArgsFull.Contains("-t") || ArgsFull.Contains("--dump-tree")) + if (ArgsFull.Contains("-tt") || ArgsFull.Contains("--dump-tree")) { Console.WriteLine("Dumping tree table."); - AppInfo.Parser.Init(path, Check); - File.WriteAllBytes("tree-table.bin", AppInfo.Parser.GetTreeTable()); - AppInfo.Parser.Term(); + File.WriteAllBytes("tree-table.bin", CXML.Parser.GetTreeTable()); + } + if (ArgsFull.Contains("-ist") || ArgsFull.Contains("--dump-string-id")) + { + Console.WriteLine("Dumping string ID table."); + File.WriteAllBytes("string-id-table.bin", CXML.Parser.GetStringIDTable()); + + } + + if (ArgsFull.Contains("-iit") || ArgsFull.Contains("--dump-int-id")) + { + Console.WriteLine("Dumping int ID table."); + File.WriteAllBytes("int-id-table.bin", CXML.Parser.GetIntIDTable()); + } + + if (ArgsFull.Contains("-st") || ArgsFull.Contains("--dump-string")) + { + Console.WriteLine("Dumping string table."); + File.WriteAllBytes("string-table.bin",CXML.Parser.GetStringTable()); + + } + + if (ArgsFull.Contains("-ct") || ArgsFull.Contains("--dump-char")) + { + Console.WriteLine("Dumping char table."); + File.WriteAllBytes("char-table.bin", CXML.Parser.GetCharTable()); + } + + if (ArgsFull.Contains("-sit") || ArgsFull.Contains("--dump-style-id")) + { + Console.WriteLine("Dumping style ID table."); + File.WriteAllBytes("style-id-table.bin", CXML.Parser.GetStyleIDTable()); + } + + + if (ArgsFull.Contains("-iat") || ArgsFull.Contains("--dump-int-array")) + { + Console.WriteLine("Dumping int array table."); + File.WriteAllBytes("int-array-table.bin", CXML.Parser.GetIntArrayTable()); + } + + if (ArgsFull.Contains("-fat") || ArgsFull.Contains("--dump-float-array")) + { + Console.WriteLine("Dumping float array table."); + File.WriteAllBytes("float-array-table.bin", CXML.Parser.GetFloatArrayTable()); + } + + if (ArgsFull.Contains("-ft") || ArgsFull.Contains("--dump-tree")) { Console.WriteLine("Dumping file table."); - AppInfo.Parser.Init(path, Check); - File.WriteAllBytes("file-table.bin", AppInfo.Parser.GetTreeTable()); - AppInfo.Parser.Term(); + File.WriteAllBytes("file-table.bin", CXML.Parser.GetTreeTable()); } if (ArgsFull.Contains("-d") || ArgsFull.Contains("--decompile") || args.Length == 1) { Console.WriteLine("Decompiling."); - AppInfo.Parser.DecompileCXML(path, Check); + CXML.Parser.DecompileCXML(path, Check); + Console.WriteLine("\n\nDECOMPILATION COMPLETE!"); + Console.ReadKey(); } } } diff --git a/AppInfoCli/packages.config b/AppInfoCli/packages.config new file mode 100644 index 0000000..6438d2c --- /dev/null +++ b/AppInfoCli/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/AppInfoParser.sln b/AppInfoParser.sln index ac070b6..463d29a 100644 --- a/AppInfoParser.sln +++ b/AppInfoParser.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.28010.2003 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppInfoCli", "AppInfoCli\AppInfoCli.csproj", "{BE72E673-25FF-47AB-AF5B-9448B69E3990}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CXMLCli", "AppInfoCli\CXMLCli.csproj", "{BE72E673-25FF-47AB-AF5B-9448B69E3990}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/packages/DotNetZip.1.13.3/.signature.p7s b/packages/DotNetZip.1.13.3/.signature.p7s new file mode 100644 index 0000000000000000000000000000000000000000..565167a124140c01a8e0048395f300a40372a9af GIT binary patch literal 9512 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 z zM&5=l;(Y7jNmGWA$0&XBDL1hL_iaJxc|#w#azztm&NnSCjK<=XR=7|q&_6? zG0<^|8VlSAp%PvTX8wBzN;3K8SgFNnoz zx@bDl8=NHj5g#Eq@Dy!c{y$Jl0|XQR000O8hH+C)GPkyzz`y_iz>)y~AOHXWY-wUI zZe?_HbYX5}VRB?LE-)`dZ*)#&bXsX}E^uUGti1(%R7d~+JLl|XvvJ1)ArRc%rFbb? zf)|=bHUcq{4G^Rx0qV5Wg*p{ls8Sc|PTk#Gs!#jW{eC_(v)M1_d4B(UfA?Nqe9q4M z%$zxMM!q9wb~8EusL76U6#pec^QTVET|0QdAbmmw)FvFaL3#5_iu5T2z3(FM@%Y@O z)Xm9o=ZEVms>|x>U3tAyeuiI^uWI4WrF+JrnN#t(6Fle;cyeV8BTMYRrEb~yi{{)} z{P7td2d2#UefQa~GL9ve-O)D=@iJAom1>5*@+tKvA})_nDhRHJC!$ifK?theHc3

^1W5VizTf)R%6~a4 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

K33L~IXN)aX* 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 z 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

>OPkel|dIAya4_pU1ZY|UGB=_ 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 z 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 z zJ~8VldTM9z#S%sMjyR(dw~8}i>_&n_0&PX-V>GfiNX;Tmr1VVZWbW#sgDCfIAq!nx zO4E7CL(v<6)6bD9+!b`Km1|%{B+foAaS7ZP-()L2(We^@S;kYoz#ghVC3ey_*B$== z%huaedF({@<`D)KiBol?h5c8R$mg*dkV?bZAy18UT_@Tu?O@lJh?U|>EwtX&`}=&y z8R?<7*uJ)9Re%I0Y8WJPQ8bU3btCmmb|V!eX`(lm8z*kn2S{k@`6X&V5S7#5WP8U% z;PzW!j)iFZ8eKOJYh!bNz~2DSQ$65c$)o=%pp&?P2r76%F#m5%o~H*pK<{z*d_%c! zZr3*qy`l4X`Pe-@fXn9JAdK)v0>jPv?O&I8kbi}9fPeJ)0igh-I)d%NEI-l!q*8uI zOW>y8R(*cED_HnvS=gTpB~aGf-u&M+5MWGh$n5_FPWk=GEzDMURmOOmX0*Pw)E#QcxvtF|ASkEu?yfbW zUR=9wY$^uwEcP=#`b*S+&%zTHT}o*LTVV^aTF%!@SGKR*#J9Ln<_h((KT;}PS&uAF zI<9Lld%-BNmW&MNZkH>cH4^EkO7^sfM{S*U2g``a84($*7Yk3>-u`e&&q07ehpl$j6vQcP=xDhK6ixdUy@tg>+vTNGgVzw_^q4mqOJdZc* zK5cayaB=z7>aGtMbg_Ls{0L{6(zNl|gq@|Oi&czcayuSWmrmt$_$9|Y*Mw!2-@G!e zbK&@)OzQfwNp(Yy-H^SERq>&;!f^}EQnvN(kO5S~{C2SW`+RsH(oWN*OV|MQ7nw_yA&RQ<1=aZ~&EXx~3;cRa)R{~!DN`)z)Y z|NQedxE&aOjRyU_;_m^Ge^wOg#Q3N1$Ug=AbF|=}0!+Fvev2JcyN!T&a~%!%gAas1 K*Kc3|ss9Bq8~`E! literal 0 HcmV?d00001 diff --git a/packages/DotNetZip.1.13.3/lib/net40/DotNetZip.dll b/packages/DotNetZip.1.13.3/lib/net40/DotNetZip.dll new file mode 100644 index 0000000000000000000000000000000000000000..35d0483999653a4f60e9260de9d9b6cc32c4149a GIT binary patch literal 458752 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
5+~>>o}Msa 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
g59wZLvQ`%}N}=l7Pd2ED1lt z*xs~jO#od(BSZxHK)9d@b5GA{rwL~nuEGVdhZGon#3rsJj+X%%69I$ugaizShzu+P z3Gf8MFz`f*04zH}emu$AsDgP$@Rdg$qI-DjjW-USa9iN1dV3QY45BgHq<5gkN6p|) z9}P1;upMt9E$HD+pygXI0!TG<2oK;c-qe9&aidNUb8N|sJb6Y;jtE0&%%Rhv=;>e~ zyrv=;k}JSJih;c41!7{z)id^hE3+@AL0!`SLv#m~A;vLSUaDcMtAl`iRSQ()h>Z+(K_W3!tt5|Zk)b%WxYJkRSt=0BIMD+q2JOKF8$@aX zBrm%ZI>J6#$|db%$zT$*jwZ~cBAMV)?5NB2am*R>p?~BcNHh?jkcpsso-B2#of)^n zl^mBt$sLi4L3BtNs#2b5U1}Fu5{d3*(IT6~iQyUqJTRqTIMmyz_d#AOK7c*0!||jd zi?}s`U2&_|gE}1rL4TU`MqmUSMKO;!Bx#1=bD|}hrQ?MHaL*l6wA0^;!E7OoTI}0< zs!82KDwK)ady+(%w*@>ISVmHpGv4%|Y z@$qBR$C-_}lr;4SWEj)|kbw&+%or!4I6{4%*bZd~A!Td_8Y3_hYZQ=bndnVtrZXOZ zUZ}PhT*pG8oI|t^iGn2tkPdV$A>$c^fL@8ey3PnYg@gGWcewFF9kjub)mbHZ;RJA@ zm^^_|3R$dIIVxCDp%a_OXb?}9kvfPc6N^MZ0!%%?44Q&D0c`Ms31~sOLH66p+V@>@##CebA;Lh7Fxb$R*`aT=TVRNUkAJiesQ@`Hsho-C09YxWvS%XGM;Qz(>qTK8 zacSQPJea9B%w81aXvOU9g$t}80L6N907t4Y$B9={r-lrO^cWf2ktZyz!tn#%8Mb3V z*fVnB$pou~$uzcL)H_BEXmvg^Km#CA8Wtvx{J*^`C>2-8t_zT4gBzT0hkQ|Gd=#%e z;zRi-4do-j@ClLW;A(HkZX$`GGRQU8Y!>h+usl^a+QbZKaNe4{Av3hdDkla_=rMFm zeqFRA{QZ(KXMrdz`6LQUJ`jZ%j~ObKM3Cbk-5e~Iu(O>&CyMbPudsrJWif9I9(veY z!d;gyaZs1f2#pDAw6IGcbI{mf8b`u|elN`q1D5|hDUDQ)kAMN9VhUVJ29bl)Q3Xw- zIH=TM7WA3rA43q{Sc;PFJ!~X7G?TQAV48EqhyrJ!0%)P+fx4s07V?IupbQIKqzS4x z+TJJ8-P?kjbyJRGCZ|>Knn?cC0zE$Y>K%lwM{Ndu6e)vfc@KoxmfM zE^`lins9vGn~f-48bKB_dC8O6$aJbybw-Y?wNut&%PIxZS*AY%z�DCT{6F;g~Hi zFUB!4^j&5y%`KZ!S~6}~UO`z! zQE5rW!lk9v$OWnEZNQ8r@m;Ogq?sJznrg0e*g z%W$!H@YvFdDFqd5KVtl%+^W*0qg2!V@t8OP75#N0Jbyv{komR+!y^k~<`+Z`jmft~ z#?K!b6KS*M<`∨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 IPg?( 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±k;c|E*elGf7^m9g__`-R( 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 + + + DotNetZip + + + +

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

+ This is the version using unrolled loops. +

+
+ + Method "mainQSort3", file "blocksort.c", BZip2 1.0.2 + + + Array instance identical to sfmap, both are used only + temporarily and independently, so we do not need to allocate + additional memory. + + + + A read-only decorator stream that performs BZip2 decompression on Read. + + + + + Compressor State + + + + + Create a BZip2InputStream, wrapping it around the given input Stream. + + + + The input stream will be closed when the BZip2InputStream is closed. + + + The stream from which to read compressed data + + + + Create a BZip2InputStream with the given stream, and + specifying whether to leave the wrapped stream open when + the BZip2InputStream is closed. + + The stream from which to read compressed data + + Whether to leave the input stream open, when the BZip2InputStream closes. + + + + + This example reads a bzip2-compressed file, decompresses it, + and writes the decompressed data into a newly created file. + + + var fname = "logfile.log.bz2"; + using (var fs = File.OpenRead(fname)) + { + using (var decompressor = new Ionic.BZip2.BZip2InputStream(fs)) + { + var outFname = fname + ".decompressed"; + using (var output = File.Create(outFname)) + { + byte[] buffer = new byte[2048]; + int n; + while ((n = decompressor.Read(buffer, 0, buffer.Length)) > 0) + { + output.Write(buffer, 0, n); + } + } + } + } + + + + + + Read data from the stream. + + + + + To decompress a BZip2 data stream, create a BZip2InputStream, + providing a stream that reads compressed data. Then call Read() on + that BZip2InputStream, and the data read will be decompressed + as you read. + + + + A BZip2InputStream can be used only for Read(), not for Write(). + + + + The buffer into which the read data should be placed. + the offset within that data array to put the first byte read. + the number of bytes to read. + the number of bytes actually read + + + + Read a single byte from the stream. + + the byte read from the stream, or -1 if EOF + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Flush the stream. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the + total number of uncompressed bytes read in. + + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + this is irrelevant, since it will always throw! + irrelevant! + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + + + + Calling this method always throws a . + + this parameter is never used + this parameter is never used + this parameter is never used + + + + Dispose the stream. + + + indicates whether the Dispose method was invoked by user code. + + + + + Close the stream. + + + + + Read n bits from input, right justifying the result. + + + + For example, if you read 1 bit, the result is either 0 + or 1. + + + + The number of bits to read, always between 1 and 32. + + + + Called by createHuffmanDecodingTables() exclusively. + + + Called by recvDecodingTables() exclusively. + + + Freq table collected to save a pass over the data during + decompression. + + + Initializes the tt array. + + This method is called when the required length of the array is known. + I don't initialize it at construction time to avoid unneccessary + memory allocation when compressing small files. + + + + A write-only decorator stream that compresses data as it is + written using the BZip2 algorithm. + + + + + Constructs a new BZip2OutputStream, that sends its + compressed output to the given output stream. + + + + The destination stream, to which compressed output will be sent. + + + + + This example reads a file, then compresses it with bzip2 file, + and writes the compressed data into a newly created file. + + + var fname = "logfile.log"; + using (var fs = File.OpenRead(fname)) + { + var outFname = fname + ".bz2"; + using (var output = File.Create(outFname)) + { + using (var compressor = new Ionic.BZip2.BZip2OutputStream(output)) + { + byte[] buffer = new byte[2048]; + int n; + while ((n = fs.Read(buffer, 0, buffer.Length)) > 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + + + + Constructs a new BZip2OutputStream with specified blocksize. + + the destination stream. + + The blockSize in units of 100000 bytes. + The valid range is 1..9. + + + + + Constructs a new BZip2OutputStream. + + the destination stream. + + whether to leave the captive stream open upon closing this stream. + + + + + Constructs a new BZip2OutputStream with specified blocksize, + and explicitly specifies whether to leave the wrapped stream open. + + + the destination stream. + + The blockSize in units of 100000 bytes. + The valid range is 1..9. + + + whether to leave the captive stream open upon closing this stream. + + + + + Close the stream. + + + + This may or may not close the underlying stream. Check the + constructors that accept a bool value. + + + + + + Flush the stream. + + + + + The blocksize parameter specified at construction time. + + + + + Write data to the stream. + + + + + Use the BZip2OutputStream to compress data while writing: + create a BZip2OutputStream with a writable output stream. + Then call Write() on that BZip2OutputStream, providing + uncompressed data as input. The data sent to the output stream will + be the compressed form of the input data. + + + + A BZip2OutputStream can be used only for Write() not for Read(). + + + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Indicates whether the stream can be read. + + + The return value is always false. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value should always be true, unless and until the + object is disposed and closed. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the + total number of uncompressed bytes written through. + + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + this is irrelevant, since it will always throw! + irrelevant! + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + + + + Calling this method always throws a . + + this parameter is never used + this parameter is never used + this parameter is never used + never returns anything; always throws + + + + A write-only decorator stream that compresses data as it is + written using the BZip2 algorithm. This stream compresses by + block using multiple threads. + + + This class performs BZIP2 compression through writing. For + more information on the BZIP2 algorithm, see + . + + + + This class is similar to , + except that this implementation uses an approach that employs multiple + worker threads to perform the compression. On a multi-cpu or multi-core + computer, the performance of this class can be significantly higher than + the single-threaded BZip2OutputStream, particularly for larger streams. + How large? Anything over 10mb is a good candidate for parallel + compression. + + + + The tradeoff is that this class uses more memory and more CPU than the + vanilla BZip2OutputStream. Also, for small files, the + ParallelBZip2OutputStream can be much slower than the vanilla + BZip2OutputStream, because of the overhead associated to using the + thread pool. + + + + + + + Constructs a new ParallelBZip2OutputStream, that sends its + compressed output to the given output stream. + + + + The destination stream, to which compressed output will be sent. + + + + + This example reads a file, then compresses it with bzip2 file, + and writes the compressed data into a newly created file. + + + var fname = "logfile.log"; + using (var fs = File.OpenRead(fname)) + { + var outFname = fname + ".bz2"; + using (var output = File.Create(outFname)) + { + using (var compressor = new Ionic.BZip2.ParallelBZip2OutputStream(output)) + { + byte[] buffer = new byte[2048]; + int n; + while ((n = fs.Read(buffer, 0, buffer.Length)) > 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + + + + Constructs a new ParallelBZip2OutputStream with specified blocksize. + + the destination stream. + + The blockSize in units of 100000 bytes. + The valid range is 1..9. + + + + + Constructs a new ParallelBZip2OutputStream. + + the destination stream. + + whether to leave the captive stream open upon closing this stream. + + + + + Constructs a new ParallelBZip2OutputStream with specified blocksize, + and explicitly specifies whether to leave the wrapped stream open. + + + the destination stream. + + The blockSize in units of 100000 bytes. + The valid range is 1..9. + + + whether to leave the captive stream open upon closing this stream. + + + + + The maximum number of concurrent compression worker threads to use. + + + + + This property sets an upper limit on the number of concurrent worker + threads to employ for compression. The implementation of this stream + employs multiple threads from the .NET thread pool, via + ThreadPool.QueueUserWorkItem(), to compress the incoming data by + block. As each block of data is compressed, this stream re-orders the + compressed blocks and writes them to the output stream. + + + + A higher number of workers enables a higher degree of + parallelism, which tends to increase the speed of compression on + multi-cpu computers. On the other hand, a higher number of buffer + pairs also implies a larger memory consumption, more active worker + threads, and a higher cpu utilization for any compression. This + property enables the application to limit its memory consumption and + CPU utilization behavior depending on requirements. + + + + By default, DotNetZip allocates 4 workers per CPU core, subject to the + upper limit specified in this property. For example, suppose the + application sets this property to 16. Then, on a machine with 2 + cores, DotNetZip will use 8 workers; that number does not exceed the + upper limit specified by this property, so the actual number of + workers used will be 4 * 2 = 8. On a machine with 4 cores, DotNetZip + will use 16 workers; again, the limit does not apply. On a machine + with 8 cores, DotNetZip will use 16 workers, because of the limit. + + + + For each compression "worker thread" that occurs in parallel, there is + up to 2mb of memory allocated, for buffering and processing. The + actual number depends on the property. + + + + CPU utilization will also go up with additional workers, because a + larger number of buffer pairs allows a larger number of background + threads to compress in parallel. If you find that parallel + compression is consuming too much memory or CPU, you can adjust this + value downward. + + + + The default value is 16. Different values may deliver better or + worse results, depending on your priorities and the dynamic + performance characteristics of your storage and compute resources. + + + + The application can set this value at any time, but it is effective + only before the first call to Write(), which is when the buffers are + allocated. + + + + + + Close the stream. + + + + This may or may not close the underlying stream. Check the + constructors that accept a bool value. + + + + + + Flush the stream. + + + + + The blocksize parameter specified at construction time. + + + + + Write data to the stream. + + + + + Use the ParallelBZip2OutputStream to compress data while + writing: create a ParallelBZip2OutputStream with a writable + output stream. Then call Write() on that + ParallelBZip2OutputStream, providing uncompressed data as + input. The data sent to the output stream will be the compressed + form of the input data. + + + + A ParallelBZip2OutputStream can be used only for + Write() not for Read(). + + + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Indicates whether the stream can be read. + + + The return value is always false. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the + total number of uncompressed bytes written through. + + + + + The total number of bytes written out by the stream. + + + This value is meaningful only after a call to Close(). + + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + this is irrelevant, since it will always throw! + irrelevant! + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + + + + Calling this method always throws a . + + this parameter is never used + this parameter is never used + this parameter is never used + never returns anything; always throws + + + + Returns the "random" number at a specific index. + + the index + the random number + + + + An enum that provides the different self-extractor flavors + + + + + A self-extracting zip archive that runs from the console or + command line. + + + + + A self-extracting zip archive that presents a graphical user + interface when it is executed. + + + + + The options for generating a self-extracting archive. + + + + + The type of SFX to create. + + + + + The command to run after extraction. + + + + + This is optional. Leave it empty (null in C# or Nothing in + VB) to run no command after extraction. + + + + If it is non-empty, the SFX will execute the command specified in this + string on the user's machine, and using the extract directory as the + working directory for the process, after unpacking the archive. The + program to execute can include a path, if you like. If you want to execute + a program that accepts arguments, specify the program name, followed by a + space, and then the arguments for the program, each separated by a space, + just as you would on a normal command line. Example: program.exe arg1 + arg2. The string prior to the first space will be taken as the + program name, and the string following the first space specifies the + arguments to the program. + + + + If you want to execute a program that has a space in the name or path of + the file, surround the program name in double-quotes. The first character + of the command line should be a double-quote character, and there must be + a matching double-quote following the end of the program file name. Any + optional arguments to the program follow that, separated by + spaces. Example: "c:\project files\program name.exe" arg1 arg2. + + + + If the flavor of the SFX is SelfExtractorFlavor.ConsoleApplication, + then the SFX starts a new process, using this string as the post-extract + command line. The SFX waits for the process to exit. The exit code of + the post-extract command line is returned as the exit code of the + command-line self-extractor exe. A non-zero exit code is typically used to + indicated a failure by the program. In the case of an SFX, a non-zero exit + code may indicate a failure during extraction, OR, it may indicate a + failure of the run-after-extract program if specified, OR, it may indicate + the run-after-extract program could not be fuond. There is no way to + distinguish these conditions from the calling shell, aside from parsing + the output of the SFX. If you have Quiet set to true, you may not + see error messages, if a problem occurs. + + + + If the flavor of the SFX is + SelfExtractorFlavor.WinFormsApplication, then the SFX starts a new + process, using this string as the post-extract command line, and using the + extract directory as the working directory for the process. The SFX does + not wait for the command to complete, and does not check the exit code of + the program. If the run-after-extract program cannot be fuond, a message + box is displayed indicating that fact. + + + + You can specify environment variables within this string, with a format like + %NAME%. The value of these variables will be expanded at the time + the SFX is run. Example: %WINDIR%\system32\xcopy.exe may expand at + runtime to c:\Windows\System32\xcopy.exe. + + + + By combining this with the RemoveUnpackedFilesAfterExecute + flag, you can create an SFX that extracts itself, runs a file that + was extracted, then deletes all the files that were extracted. If + you want it to run "invisibly" then set Flavor to + SelfExtractorFlavor.ConsoleApplication, and set Quiet + to true. The user running such an EXE will see a console window + appear, then disappear quickly. You may also want to specify the + default extract location, with DefaultExtractDirectory. + + + + If you set Flavor to + SelfExtractorFlavor.WinFormsApplication, and set Quiet to + true, then a GUI with progressbars is displayed, but it is + "non-interactive" - it accepts no input from the user. Instead the SFX + just automatically unpacks and exits. + + + + + + + The default extract directory the user will see when + running the self-extracting archive. + + + + + Passing null (or Nothing in VB) here will cause the Self Extractor to use + the the user's personal directory () for the default extract + location. + + + + This is only a default location. The actual extract location will be + settable on the command line when the SFX is executed. + + + + You can specify environment variables within this string, + with %NAME%. The value of these variables will be + expanded at the time the SFX is run. Example: + %USERPROFILE%\Documents\unpack may expand at runtime to + c:\users\melvin\Documents\unpack. + + + + + + The name of an .ico file in the filesystem to use for the application icon + for the generated SFX. + + + + + Normally, DotNetZip will embed an "zipped folder" icon into the generated + SFX. If you prefer to use a different icon, you can specify it here. It + should be a .ico file. This file is passed as the /win32icon + option to the csc.exe compiler when constructing the SFX file. + + + + + + + Whether the ConsoleApplication SFX will be quiet during extraction. + + + + + This option affects the way the generated SFX runs. By default it is + false. When you set it to true,... + + + + + Flavor + Behavior + + + + ConsoleApplication + no messages will be emitted during successful + operation. Double-clicking the SFX in Windows + Explorer or as an attachment in an email will cause a console + window to appear briefly, before it disappears. If you run the + ConsoleApplication SFX from the cmd.exe prompt, it runs as a + normal console app; by default, because it is quiet, it displays + no messages to the console. If you pass the -v+ command line + argument to the Console SFX when you run it, you will get verbose + messages to the console. + + + + + WinFormsApplication + the SFX extracts automatically when the application + is launched, with no additional user input. + + + + + + + When you set it to false,... + + + + + Flavor + Behavior + + + + ConsoleApplication + the extractor will emit a + message to the console for each entry extracted. + + When double-clicking to launch the SFX, the console window will + remain, and the SFX will emit a message for each file as it + extracts. The messages fly by quickly, they won't be easily + readable, unless the extracted files are fairly large. + + + + + + WinFormsApplication + the SFX presents a forms UI and allows the user to select + options before extracting. + + + + + + + + + + Specify what the self-extractor will do when extracting an entry + would overwrite an existing file. + + + + The default behavvior is to Throw. + + + + + + Whether to remove the files that have been unpacked, after executing the + PostExtractCommandLine. + + + + + If true, and if there is a + PostExtractCommandLine, and if the command runs successfully, + then the files that the SFX unpacked will be removed, afterwards. If + the command does not complete successfully (non-zero return code), + that is interpreted as a failure, and the extracted files will not be + removed. + + + + Setting this flag, and setting Flavor to + SelfExtractorFlavor.ConsoleApplication, and setting Quiet to + true, results in an SFX that extracts itself, runs a file that was + extracted, then deletes all the files that were extracted, with no + intervention by the user. You may also want to specify the default + extract location, with DefaultExtractDirectory. + + + + + + + The file version number to embed into the generated EXE. It will show up, for + example, during a mouseover in Windows Explorer. + + + + + + The product version to embed into the generated EXE. It will show up, for + example, during a mouseover in Windows Explorer. + + + + You can use any arbitrary string, but a human-readable version number is + recommended. For example "v1.2 alpha" or "v4.2 RC2". If you specify nothing, + then there is no product version embedded into the EXE. + + + + + + The copyright notice, if any, to embed into the generated EXE. + + + + It will show up, for example, while viewing properties of the file in + Windows Explorer. You can use any arbitrary string, but typically you + want something like "Copyright � Dino Chiesa 2011". + + + + + + The description to embed into the generated EXE. + + + + Use any arbitrary string. This text will be displayed during a + mouseover in Windows Explorer. If you specify nothing, then the string + "DotNetZip SFX Archive" is embedded into the EXE as the description. + + + + + + The product name to embed into the generated EXE. + + + + Use any arbitrary string. This text will be displayed + while viewing properties of the EXE file in + Windows Explorer. + + + + + + The title to display in the Window of a GUI SFX, while it extracts. + + + + + By default the title show in the GUI window of a self-extractor + is "DotNetZip Self-extractor (http://DotNetZip.codeplex.com/)". + You can change that by setting this property before saving the SFX. + + + + This property has an effect only when producing a Self-extractor + of flavor SelfExtractorFlavor.WinFormsApplication. + + + + + + + Additional options for the csc.exe compiler, when producing the SFX + EXE. + + + + + + The ZipFile type represents a zip archive file. + + + + + This is the main type in the DotNetZip class library. This class reads and + writes zip files, as defined in the specification + for zip files described by PKWare. The compression for this + implementation is provided by a managed-code version of Zlib, included with + DotNetZip in the classes in the Ionic.Zlib namespace. + + + + This class provides a general purpose zip file capability. Use it to read, + create, or update zip files. When you want to create zip files using a + Stream type to write the zip file, you may want to consider the class. + + + + Both the ZipOutputStream class and the ZipFile class can + be used to create zip files. Both of them support many of the common zip + features, including Unicode, different compression methods and levels, + and ZIP64. They provide very similar performance when creating zip + files. + + + + The ZipFile class is generally easier to use than + ZipOutputStream and should be considered a higher-level interface. For + example, when creating a zip file via calls to the PutNextEntry() and + Write() methods on the ZipOutputStream class, the caller is + responsible for opening the file, reading the bytes from the file, writing + those bytes into the ZipOutputStream, setting the attributes on the + ZipEntry, and setting the created, last modified, and last accessed + timestamps on the zip entry. All of these things are done automatically by a + call to ZipFile.AddFile(). + For this reason, the ZipOutputStream is generally recommended for use + only when your application emits arbitrary data, not necessarily data from a + filesystem file, directly into a zip file, and does so using a Stream + metaphor. + + + + Aside from the differences in programming model, there are other + differences in capability between the two classes. + + + + + ZipFile can be used to read and extract zip files, in addition to + creating zip files. ZipOutputStream cannot read zip files. If you want + to use a stream to read zip files, check out the class. + + + + ZipOutputStream does not support the creation of segmented or spanned + zip files. + + + + ZipOutputStream cannot produce a self-extracting archive. + + + + + Be aware that the ZipFile class implements the interface. In order for ZipFile to + produce a valid zip file, you use use it within a using clause (Using + in VB), or call the Dispose() method explicitly. See the examples + for how to employ a using clause. + + + + + + + Saves the ZipFile instance to a self-extracting zip archive. + + + + + + The generated exe image will execute on any machine that has the .NET + Framework 4.0 installed on it. The generated exe image is also a + valid ZIP file, readable with DotNetZip or another Zip library or tool + such as WinZip. + + + + There are two "flavors" of self-extracting archive. The + WinFormsApplication version will pop up a GUI and allow the + user to select a target directory into which to extract. There's also + a checkbox allowing the user to specify to overwrite existing files, + and another checkbox to allow the user to request that Explorer be + opened to see the extracted files after extraction. The other flavor + is ConsoleApplication. A self-extractor generated with that + flavor setting will run from the command line. It accepts command-line + options to set the overwrite behavior, and to specify the target + extraction directory. + + + + There are a few temporary files created during the saving to a + self-extracting zip. These files are created in the directory pointed + to by , which defaults to . These temporary files are + removed upon successful completion of this method. + + + + When a user runs the WinForms SFX, the user's personal directory (Environment.SpecialFolder.Personal) + will be used as the default extract location. If you want to set the + default extract location, you should use the other overload of + SaveSelfExtractor()/ The user who runs the SFX will have the + opportunity to change the extract directory before extracting. When + the user runs the Command-Line SFX, the user must explicitly specify + the directory to which to extract. The .NET Framework 4.0 is required + on the computer when the self-extracting archive is run. + + + + NB: This method is not available in the "Reduced" DotNetZip library. + + + + + + + string DirectoryPath = "c:\\Documents\\Project7"; + using (ZipFile zip = new ZipFile()) + { + zip.AddDirectory(DirectoryPath, System.IO.Path.GetFileName(DirectoryPath)); + zip.Comment = "This will be embedded into a self-extracting console-based exe"; + zip.SaveSelfExtractor("archive.exe", SelfExtractorFlavor.ConsoleApplication); + } + + + Dim DirectoryPath As String = "c:\Documents\Project7" + Using zip As New ZipFile() + zip.AddDirectory(DirectoryPath, System.IO.Path.GetFileName(DirectoryPath)) + zip.Comment = "This will be embedded into a self-extracting console-based exe" + zip.SaveSelfExtractor("archive.exe", SelfExtractorFlavor.ConsoleApplication) + End Using + + + + + a pathname, possibly fully qualified, to be created. Typically it + will end in an .exe extension. + + Indicates whether a Winforms or Console self-extractor is + desired. + + + + Saves the ZipFile instance to a self-extracting zip archive, using + the specified save options. + + + + + This method saves a self extracting archive, using the specified save + options. These options include the flavor of the SFX, the default extract + directory, the icon file, and so on. See the documentation + for for more + details. + + + + The user who runs the SFX will have the opportunity to change the extract + directory before extracting. If at the time of extraction, the specified + directory does not exist, the SFX will create the directory before + extracting the files. + + + + + + This example saves a WinForms-based self-extracting archive EXE that + will use c:\ExtractHere as the default extract location. The C# code + shows syntax for .NET 3.0, which uses an object initializer for + the SelfExtractorOptions object. + + string DirectoryPath = "c:\\Documents\\Project7"; + using (ZipFile zip = new ZipFile()) + { + zip.AddDirectory(DirectoryPath, System.IO.Path.GetFileName(DirectoryPath)); + zip.Comment = "This will be embedded into a self-extracting WinForms-based exe"; + var options = new SelfExtractorOptions + { + Flavor = SelfExtractorFlavor.WinFormsApplication, + DefaultExtractDirectory = "%USERPROFILE%\\ExtractHere", + PostExtractCommandLine = ExeToRunAfterExtract, + SfxExeWindowTitle = "My Custom Window Title", + RemoveUnpackedFilesAfterExecute = true + }; + zip.SaveSelfExtractor("archive.exe", options); + } + + + Dim DirectoryPath As String = "c:\Documents\Project7" + Using zip As New ZipFile() + zip.AddDirectory(DirectoryPath, System.IO.Path.GetFileName(DirectoryPath)) + zip.Comment = "This will be embedded into a self-extracting console-based exe" + Dim options As New SelfExtractorOptions() + options.Flavor = SelfExtractorFlavor.WinFormsApplication + options.DefaultExtractDirectory = "%USERPROFILE%\\ExtractHere" + options.PostExtractCommandLine = ExeToRunAfterExtract + options.SfxExeWindowTitle = "My Custom Window Title" + options.RemoveUnpackedFilesAfterExecute = True + zip.SaveSelfExtractor("archive.exe", options) + End Using + + + + The name of the EXE to generate. + provides the options for creating the + Self-extracting archive. + + + + Adds an item, either a file or a directory, to a zip file archive. + + + + + This method is handy if you are adding things to zip archive and don't + want to bother distinguishing between directories or files. Any files are + added as single entries. A directory added through this method is added + recursively: all files and subdirectories contained within the directory + are added to the ZipFile. + + + + The name of the item may be a relative path or a fully-qualified + path. Remember, the items contained in ZipFile instance get written + to the disk only when you call or a similar + save method. + + + + The directory name used for the file within the archive is the same + as the directory name (potentially a relative path) specified in the + . + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + + + This method has two overloads. + + the name of the file or directory to add. + + The ZipEntry added. + + + + Adds an item, either a file or a directory, to a zip file archive, + explicitly specifying the directory path to be used in the archive. + + + + + If adding a directory, the add is recursive on all files and + subdirectories contained within it. + + + The name of the item may be a relative path or a fully-qualified path. + The item added by this call to the ZipFile is not read from the + disk nor written to the zip file archive until the application calls + Save() on the ZipFile. + + + + This version of the method allows the caller to explicitly specify the + directory path to be used in the archive, which would override the + "natural" path of the filesystem file. + + + + Encryption will be used on the file data if the Password has + been set on the ZipFile object, prior to calling this method. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + Thrown if the file or directory passed in does not exist. + + + the name of the file or directory to add. + + + + The name of the directory path to use within the zip archive. This path + need not refer to an extant directory in the current filesystem. If the + files within the zip are later extracted, this is the path used for the + extracted file. Passing null (Nothing in VB) will use the + path on the fileOrDirectoryName. Passing the empty string ("") will + insert the item at the root path within the archive. + + + + + + + + This example shows how to zip up a set of files into a flat hierarchy, + regardless of where in the filesystem the files originated. The resulting + zip archive will contain a toplevel directory named "flat", which itself + will contain files Readme.txt, MyProposal.docx, and Image1.jpg. A + subdirectory under "flat" called SupportFiles will contain all the files + in the "c:\SupportFiles" directory on disk. + + + String[] itemnames= { + "c:\\fixedContent\\Readme.txt", + "MyProposal.docx", + "c:\\SupportFiles", // a directory + "images\\Image1.jpg" + }; + + try + { + using (ZipFile zip = new ZipFile()) + { + for (int i = 1; i < itemnames.Length; i++) + { + // will add Files or Dirs, recurses and flattens subdirectories + zip.AddItem(itemnames[i],"flat"); + } + zip.Save(ZipToCreate); + } + } + catch (System.Exception ex1) + { + System.Console.Error.WriteLine("exception: {0}", ex1); + } + + + + Dim itemnames As String() = _ + New String() { "c:\fixedContent\Readme.txt", _ + "MyProposal.docx", _ + "SupportFiles", _ + "images\Image1.jpg" } + Try + Using zip As New ZipFile + Dim i As Integer + For i = 1 To itemnames.Length - 1 + ' will add Files or Dirs, recursing and flattening subdirectories. + zip.AddItem(itemnames(i), "flat") + Next i + zip.Save(ZipToCreate) + End Using + Catch ex1 As Exception + Console.Error.WriteLine("exception: {0}", ex1.ToString()) + End Try + + + The ZipEntry added. + + + + Adds a File to a Zip file archive. + + + + + This call collects metadata for the named file in the filesystem, + including the file attributes and the timestamp, and inserts that metadata + into the resulting ZipEntry. Only when the application calls Save() on + the ZipFile, does DotNetZip read the file from the filesystem and + then write the content to the zip file archive. + + + + This method will throw an exception if an entry with the same name already + exists in the ZipFile. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + In this example, three files are added to a Zip archive. The ReadMe.txt + file will be placed in the root of the archive. The .png file will be + placed in a folder within the zip called photos\personal. The pdf file + will be included into a folder within the zip called Desktop. + + + try + { + using (ZipFile zip = new ZipFile()) + { + zip.AddFile("c:\\photos\\personal\\7440-N49th.png"); + zip.AddFile("c:\\Desktop\\2008-Regional-Sales-Report.pdf"); + zip.AddFile("ReadMe.txt"); + + zip.Save("Package.zip"); + } + } + catch (System.Exception ex1) + { + System.Console.Error.WriteLine("exception: " + ex1); + } + + + + Try + Using zip As ZipFile = New ZipFile + zip.AddFile("c:\photos\personal\7440-N49th.png") + zip.AddFile("c:\Desktop\2008-Regional-Sales-Report.pdf") + zip.AddFile("ReadMe.txt") + zip.Save("Package.zip") + End Using + Catch ex1 As Exception + Console.Error.WriteLine("exception: {0}", ex1.ToString) + End Try + + + + This method has two overloads. + + + + + + + The name of the file to add. It should refer to a file in the filesystem. + The name of the file may be a relative path or a fully-qualified path. + + The ZipEntry corresponding to the File added. + + + + Adds a File to a Zip file archive, potentially overriding the path to be + used within the zip archive. + + + + + The file added by this call to the ZipFile is not written to the + zip file archive until the application calls Save() on the ZipFile. + + + + This method will throw an exception if an entry with the same name already + exists in the ZipFile. + + + + This version of the method allows the caller to explicitly specify the + directory path to be used in the archive. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + In this example, three files are added to a Zip archive. The ReadMe.txt + file will be placed in the root of the archive. The .png file will be + placed in a folder within the zip called images. The pdf file will be + included into a folder within the zip called files\docs, and will be + encrypted with the given password. + + + try + { + using (ZipFile zip = new ZipFile()) + { + // the following entry will be inserted at the root in the archive. + zip.AddFile("c:\\datafiles\\ReadMe.txt", ""); + // this image file will be inserted into the "images" directory in the archive. + zip.AddFile("c:\\photos\\personal\\7440-N49th.png", "images"); + // the following will result in a password-protected file called + // files\\docs\\2008-Regional-Sales-Report.pdf in the archive. + zip.Password = "EncryptMe!"; + zip.AddFile("c:\\Desktop\\2008-Regional-Sales-Report.pdf", "files\\docs"); + zip.Save("Archive.zip"); + } + } + catch (System.Exception ex1) + { + System.Console.Error.WriteLine("exception: {0}", ex1); + } + + + + Try + Using zip As ZipFile = New ZipFile + ' the following entry will be inserted at the root in the archive. + zip.AddFile("c:\datafiles\ReadMe.txt", "") + ' this image file will be inserted into the "images" directory in the archive. + zip.AddFile("c:\photos\personal\7440-N49th.png", "images") + ' the following will result in a password-protected file called + ' files\\docs\\2008-Regional-Sales-Report.pdf in the archive. + zip.Password = "EncryptMe!" + zip.AddFile("c:\Desktop\2008-Regional-Sales-Report.pdf", "files\documents") + zip.Save("Archive.zip") + End Using + Catch ex1 As Exception + Console.Error.WriteLine("exception: {0}", ex1) + End Try + + + + + + + + + The name of the file to add. The name of the file may be a relative path + or a fully-qualified path. + + + + Specifies a directory path to use to override any path in the fileName. + This path may, or may not, correspond to a real directory in the current + filesystem. If the files within the zip are later extracted, this is the + path used for the extracted file. Passing null (Nothing in + VB) will use the path on the fileName, if any. Passing the empty string + ("") will insert the item at the root path within the archive. + + + The ZipEntry corresponding to the file added. + + + + This method removes a collection of entries from the ZipFile. + + + + A collection of ZipEntry instances from this zip file to be removed. For + example, you can pass in an array of ZipEntry instances; or you can call + SelectEntries(), and then add or remove entries from that + ICollection<ZipEntry> (ICollection(Of ZipEntry) in VB), and pass + that ICollection to this method. + + + + + + + + This method removes a collection of entries from the ZipFile, by name. + + + + A collection of strings that refer to names of entries to be removed + from the ZipFile. For example, you can pass in an array or a + List of Strings that provide the names of entries to be removed. + + + + + + + + This method adds a set of files to the ZipFile. + + + + + Use this method to add a set of files to the zip archive, in one call. + For example, a list of files received from + System.IO.Directory.GetFiles() can be added to a zip archive in one + call. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to each + ZipEntry added. + + + + + The collection of names of the files to add. Each string should refer to a + file in the filesystem. The name of the file may be a relative path or a + fully-qualified path. + + + + This example shows how to create a zip file, and add a few files into it. + + String ZipFileToCreate = "archive1.zip"; + String DirectoryToZip = "c:\\reports"; + using (ZipFile zip = new ZipFile()) + { + // Store all files found in the top level directory, into the zip archive. + String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); + zip.AddFiles(filenames); + zip.Save(ZipFileToCreate); + } + + + + Dim ZipFileToCreate As String = "archive1.zip" + Dim DirectoryToZip As String = "c:\reports" + Using zip As ZipFile = New ZipFile + ' Store all files found in the top level directory, into the zip archive. + Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) + zip.AddFiles(filenames) + zip.Save(ZipFileToCreate) + End Using + + + + + + + + Adds or updates a set of files in the ZipFile. + + + + + Any files that already exist in the archive are updated. Any files that + don't yet exist in the archive are added. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to each + ZipEntry added. + + + + + The collection of names of the files to update. Each string should refer to a file in + the filesystem. The name of the file may be a relative path or a fully-qualified path. + + + + + + Adds a set of files to the ZipFile, using the + specified directory path in the archive. + + + + + Any directory structure that may be present in the + filenames contained in the list is "flattened" in the + archive. Each file in the list is added to the archive in + the specified top-level directory. + + + + For ZipFile properties including , , , , , , and , their respective values at the + time of this call will be applied to each ZipEntry added. + + + + + The names of the files to add. Each string should refer to + a file in the filesystem. The name of the file may be a + relative path or a fully-qualified path. + + + + Specifies a directory path to use to override any path in the file name. + Th is path may, or may not, correspond to a real directory in the current + filesystem. If the files within the zip are later extracted, this is the + path used for the extracted file. Passing null (Nothing in + VB) will use the path on each of the fileNames, if any. Passing + the empty string ("") will insert the item at the root path within the + archive. + + + + + + + Adds a set of files to the ZipFile, using the specified directory + path in the archive, and preserving the full directory structure in the + filenames. + + + + + + Think of the as a "root" or + base directory used in the archive for the files that get added. when + is true, the hierarchy of files + found in the filesystem will be placed, with the hierarchy intact, + starting at that root in the archive. When preserveDirHierarchy + is false, the path hierarchy of files is flattned, and the flattened + set of files gets placed in the root within the archive as specified in + directoryPathInArchive. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to each + ZipEntry added. + + + + + + The names of the files to add. Each string should refer to a file in the + filesystem. The name of the file may be a relative path or a + fully-qualified path. + + + + Specifies a directory path to use as a prefix for each entry name. + This path may, or may not, correspond to a real directory in the current + filesystem. If the files within the zip are later extracted, this is the + path used for the extracted file. Passing null (Nothing in + VB) will use the path on each of the fileNames, if any. Passing + the empty string ("") will insert the item at the root path within the + archive. + + + + whether the entries in the zip archive will reflect the directory + hierarchy that is present in the various filenames. For example, if + includes two paths, + \Animalia\Chordata\Mammalia\Info.txt and + \Plantae\Magnoliophyta\Dicotyledon\Info.txt, then calling this method + with = false will + result in an exception because of a duplicate entry name, while + calling this method with = + true will result in the full direcory paths being included in + the entries added to the ZipFile. + + + + + + Adds or updates a set of files to the ZipFile, using the specified + directory path in the archive. + + + + + + Any files that already exist in the archive are updated. Any files that + don't yet exist in the archive are added. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to each + ZipEntry added. + + + + + The names of the files to add or update. Each string should refer to a + file in the filesystem. The name of the file may be a relative path or a + fully-qualified path. + + + + Specifies a directory path to use to override any path in the file name. + This path may, or may not, correspond to a real directory in the current + filesystem. If the files within the zip are later extracted, this is the + path used for the extracted file. Passing null (Nothing in + VB) will use the path on each of the fileNames, if any. Passing + the empty string ("") will insert the item at the root path within the + archive. + + + + + + + Adds or Updates a File in a Zip file archive. + + + + + This method adds a file to a zip archive, or, if the file already exists + in the zip archive, this method Updates the content of that given filename + in the zip archive. The UpdateFile method might more accurately be + called "AddOrUpdateFile". + + + + Upon success, there is no way for the application to learn whether the file + was added versus updated. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + This example shows how to Update an existing entry in a zipfile. The first + call to UpdateFile adds the file to the newly-created zip archive. The + second call to UpdateFile updates the content for that file in the zip + archive. + + + using (ZipFile zip1 = new ZipFile()) + { + // UpdateFile might more accurately be called "AddOrUpdateFile" + zip1.UpdateFile("MyDocuments\\Readme.txt"); + zip1.UpdateFile("CustomerList.csv"); + zip1.Comment = "This zip archive has been created."; + zip1.Save("Content.zip"); + } + + using (ZipFile zip2 = ZipFile.Read("Content.zip")) + { + zip2.UpdateFile("Updates\\Readme.txt"); + zip2.Comment = "This zip archive has been updated: The Readme.txt file has been changed."; + zip2.Save(); + } + + + + Using zip1 As New ZipFile + ' UpdateFile might more accurately be called "AddOrUpdateFile" + zip1.UpdateFile("MyDocuments\Readme.txt") + zip1.UpdateFile("CustomerList.csv") + zip1.Comment = "This zip archive has been created." + zip1.Save("Content.zip") + End Using + + Using zip2 As ZipFile = ZipFile.Read("Content.zip") + zip2.UpdateFile("Updates\Readme.txt") + zip2.Comment = "This zip archive has been updated: The Readme.txt file has been changed." + zip2.Save + End Using + + + + + + + + + The name of the file to add or update. It should refer to a file in the + filesystem. The name of the file may be a relative path or a + fully-qualified path. + + + + The ZipEntry corresponding to the File that was added or updated. + + + + + Adds or Updates a File in a Zip file archive. + + + + + This method adds a file to a zip archive, or, if the file already exists + in the zip archive, this method Updates the content of that given filename + in the zip archive. + + + + This version of the method allows the caller to explicitly specify the + directory path to be used in the archive. The entry to be added or + updated is found by using the specified directory path, combined with the + basename of the specified filename. + + + + Upon success, there is no way for the application to learn if the file was + added versus updated. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + + + The name of the file to add or update. It should refer to a file in the + filesystem. The name of the file may be a relative path or a + fully-qualified path. + + + + Specifies a directory path to use to override any path in the + fileName. This path may, or may not, correspond to a real + directory in the current filesystem. If the files within the zip are + later extracted, this is the path used for the extracted file. Passing + null (Nothing in VB) will use the path on the + fileName, if any. Passing the empty string ("") will insert the + item at the root path within the archive. + + + + The ZipEntry corresponding to the File that was added or updated. + + + + + Add or update a directory in a zip archive. + + + + If the specified directory does not exist in the archive, then this method + is equivalent to calling AddDirectory(). If the specified + directory already exists in the archive, then this method updates any + existing entries, and adds any new entries. Any entries that are in the + zip archive but not in the specified directory, are left alone. In other + words, the contents of the zip file will be a union of the previous + contents and the new files. + + + + + + + + The path to the directory to be added to the zip archive, or updated in + the zip archive. + + + + The ZipEntry corresponding to the Directory that was added or updated. + + + + + Add or update a directory in the zip archive at the specified root + directory in the archive. + + + + If the specified directory does not exist in the archive, then this method + is equivalent to calling AddDirectory(). If the specified + directory already exists in the archive, then this method updates any + existing entries, and adds any new entries. Any entries that are in the + zip archive but not in the specified directory, are left alone. In other + words, the contents of the zip file will be a union of the previous + contents and the new files. + + + + + + + + The path to the directory to be added to the zip archive, or updated + in the zip archive. + + + + Specifies a directory path to use to override any path in the + directoryName. This path may, or may not, correspond to a real + directory in the current filesystem. If the files within the zip are + later extracted, this is the path used for the extracted file. Passing + null (Nothing in VB) will use the path on the + directoryName, if any. Passing the empty string ("") will insert + the item at the root path within the archive. + + + + The ZipEntry corresponding to the Directory that was added or updated. + + + + + Add or update a file or directory in the zip archive. + + + + + This is useful when the application is not sure or does not care if the + item to be added is a file or directory, and does not know or does not + care if the item already exists in the ZipFile. Calling this method + is equivalent to calling RemoveEntry() if an entry by the same name + already exists, followed calling by AddItem(). + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + + + the path to the file or directory to be added or updated. + + + + + Add or update a file or directory. + + + + + This method is useful when the application is not sure or does not care if + the item to be added is a file or directory, and does not know or does not + care if the item already exists in the ZipFile. Calling this method + is equivalent to calling RemoveEntry(), if an entry by that name + exists, and then calling AddItem(). + + + + This version of the method allows the caller to explicitly specify the + directory path to be used for the item being added to the archive. The + entry or entries that are added or updated will use the specified + DirectoryPathInArchive. Extracting the entry from the archive will + result in a file stored in that directory path. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + + + The path for the File or Directory to be added or updated. + + + Specifies a directory path to use to override any path in the + itemName. This path may, or may not, correspond to a real + directory in the current filesystem. If the files within the zip are + later extracted, this is the path used for the extracted file. Passing + null (Nothing in VB) will use the path on the + itemName, if any. Passing the empty string ("") will insert the + item at the root path within the archive. + + + + + Adds a named entry into the zip archive, taking content for the entry + from a string. + + + + Calling this method creates an entry using the given fileName and + directory path within the archive. There is no need for a file by the + given name to exist in the filesystem; the name is used within the zip + archive only. The content for the entry is encoded using the default text + encoding for the machine. + + + + The content of the file, should it be extracted from the zip. + + + + The name, including any path, to use for the entry within the archive. + + + The ZipEntry added. + + + + This example shows how to add an entry to the zipfile, using a string as + content for that entry. + + + string Content = "This string will be the content of the Readme.txt file in the zip archive."; + using (ZipFile zip1 = new ZipFile()) + { + zip1.AddFile("MyDocuments\\Resume.doc", "files"); + zip1.AddEntry("Readme.txt", Content); + zip1.Comment = "This zip file was created at " + System.DateTime.Now.ToString("G"); + zip1.Save("Content.zip"); + } + + + + Public Sub Run() + Dim Content As String = "This string will be the content of the Readme.txt file in the zip archive." + Using zip1 As ZipFile = New ZipFile + zip1.AddEntry("Readme.txt", Content) + zip1.AddFile("MyDocuments\Resume.doc", "files") + zip1.Comment = ("This zip file was created at " & DateTime.Now.ToString("G")) + zip1.Save("Content.zip") + End Using + End Sub + + + + + + Adds a named entry into the zip archive, taking content for the entry + from a string, and using the specified text encoding. + + + + + + Calling this method creates an entry using the given fileName and + directory path within the archive. There is no need for a file by the + given name to exist in the filesystem; the name is used within the zip + archive only. + + + + The content for the entry, a string value, is encoded using the given + text encoding. A BOM (byte-order-mark) is emitted into the file, if the + Encoding parameter is set for that. + + + + Most Encoding classes support a constructor that accepts a boolean, + indicating whether to emit a BOM or not. For example see . + + + + + + The name, including any path, to use within the archive for the entry. + + + + The content of the file, should it be extracted from the zip. + + + + The text encoding to use when encoding the string. Be aware: This is + distinct from the text encoding used to encode the fileName, as specified + in . + + + The ZipEntry added. + + + + + Create an entry in the ZipFile using the given Stream + as input. The entry will have the given filename. + + + + + + The application should provide an open, readable stream; in this case it + will be read during the call to or one of + its overloads. + + + + The passed stream will be read from its current position. If + necessary, callers should set the position in the stream before + calling AddEntry(). This might be appropriate when using this method + with a MemoryStream, for example. + + + + In cases where a large number of streams will be added to the + ZipFile, the application may wish to avoid maintaining all of the + streams open simultaneously. To handle this situation, the application + should use the + overload. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + This example adds a single entry to a ZipFile via a Stream. + + + + String zipToCreate = "Content.zip"; + String fileNameInArchive = "Content-From-Stream.bin"; + using (System.IO.Stream streamToRead = MyStreamOpener()) + { + using (ZipFile zip = new ZipFile()) + { + ZipEntry entry= zip.AddEntry(fileNameInArchive, streamToRead); + zip.AddFile("Readme.txt"); + zip.Save(zipToCreate); // the stream is read implicitly here + } + } + + + + Dim zipToCreate As String = "Content.zip" + Dim fileNameInArchive As String = "Content-From-Stream.bin" + Using streamToRead as System.IO.Stream = MyStreamOpener() + Using zip As ZipFile = New ZipFile() + Dim entry as ZipEntry = zip.AddEntry(fileNameInArchive, streamToRead) + zip.AddFile("Readme.txt") + zip.Save(zipToCreate) '' the stream is read implicitly, here + End Using + End Using + + + + + + + The name, including any path, which is shown in the zip file for the added + entry. + + + The input stream from which to grab content for the file + + The ZipEntry added. + + + + Add a ZipEntry for which content is written directly by the application. + + + + + When the application needs to write the zip entry data, use this + method to add the ZipEntry. For example, in the case that the + application wishes to write the XML representation of a DataSet into + a ZipEntry, the application can use this method to do so. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + About progress events: When using the WriteDelegate, DotNetZip does + not issue any SaveProgress events with EventType = + Saving_EntryBytesRead. (This is because it is the + application's code that runs in WriteDelegate - there's no way for + DotNetZip to know when to issue a EntryBytesRead event.) + Applications that want to update a progress bar or similar status + indicator should do so from within the WriteDelegate + itself. DotNetZip will issue the other SaveProgress events, + including + Saving_Started, + + Saving_BeforeWriteEntry, and + Saving_AfterWriteEntry. + + + + Note: When you use PKZip encryption, it's normally necessary to + compute the CRC of the content to be encrypted, before compressing or + encrypting it. Therefore, when using PKZip encryption with a + WriteDelegate, the WriteDelegate CAN BE called twice: once to compute + the CRC, and the second time to potentially compress and + encrypt. Surprising, but true. This is because PKWARE specified that + the encryption initialization data depends on the CRC. + If this happens, for each call of the delegate, your + application must stream the same entry data in its entirety. If your + application writes different data during the second call, it will + result in a corrupt zip file. + + + + The double-read behavior happens with all types of entries, not only + those that use WriteDelegate. It happens if you add an entry from a + filesystem file, or using a string, or a stream, or an opener/closer + pair. But in those cases, DotNetZip takes care of reading twice; in + the case of the WriteDelegate, the application code gets invoked + twice. Be aware. + + + + As you can imagine, this can cause performance problems for large + streams, and it can lead to correctness problems when you use a + WriteDelegate. This is a pretty big pitfall. There are two + ways to avoid it. First, and most preferred: don't use PKZIP + encryption. If you use the WinZip AES encryption, this problem + doesn't occur, because the encryption protocol doesn't require the CRC + up front. Second: if you do choose to use PKZIP encryption, write out + to a non-seekable stream (like standard output, or the + Response.OutputStream in an ASP.NET application). In this case, + DotNetZip will use an alternative encryption protocol that does not + rely on the CRC of the content. This also implies setting bit 3 in + the zip entry, which still presents problems for some zip tools. + + + + In the future I may modify DotNetZip to *always* use bit 3 when PKZIP + encryption is in use. This seems like a win overall, but there will + be some work involved. If you feel strongly about it, visit the + DotNetZip forums and vote up the Workitem + tracking this issue. + + + + + the name of the entry to add + the delegate which will write the entry content + the ZipEntry added + + + + This example shows an application filling a DataSet, then saving the + contents of that DataSet as XML, into a ZipEntry in a ZipFile, using an + anonymous delegate in C#. The DataSet XML is never saved to a disk file. + + + var c1= new System.Data.SqlClient.SqlConnection(connstring1); + var da = new System.Data.SqlClient.SqlDataAdapter() + { + SelectCommand= new System.Data.SqlClient.SqlCommand(strSelect, c1) + }; + + DataSet ds1 = new DataSet(); + da.Fill(ds1, "Invoices"); + + using(Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile()) + { + zip.AddEntry(zipEntryName, (name,stream) => ds1.WriteXml(stream) ); + zip.Save(zipFileName); + } + + + + + + This example uses an anonymous method in C# as the WriteDelegate to provide + the data for the ZipEntry. The example is a bit contrived - the + AddFile() method is a simpler way to insert the contents of a file + into an entry in a zip file. On the other hand, if there is some sort of + processing or transformation of the file contents required before writing, + the application could use the WriteDelegate to do it, in this way. + + + using (var input = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite )) + { + using(Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile()) + { + zip.AddEntry(zipEntryName, (name,output) => + { + byte[] buffer = new byte[BufferSize]; + int n; + while ((n = input.Read(buffer, 0, buffer.Length)) != 0) + { + // could transform the data here... + output.Write(buffer, 0, n); + // could update a progress bar here + } + }); + + zip.Save(zipFileName); + } + } + + + + + + This example uses a named delegate in VB to write data for the given + ZipEntry (VB9 does not have anonymous delegates). The example here is a bit + contrived - a simpler way to add the contents of a file to a ZipEntry is to + simply use the appropriate AddFile() method. The key scenario for + which the WriteDelegate makes sense is saving a DataSet, in XML + format, to the zip file. The DataSet can write XML to a stream, and the + WriteDelegate is the perfect place to write into the zip file. There may be + other data structures that can write to a stream, but cannot be read as a + stream. The WriteDelegate would be appropriate for those cases as + well. + + + Private Sub WriteEntry (ByVal name As String, ByVal output As Stream) + Using input As FileStream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) + Dim n As Integer = -1 + Dim buffer As Byte() = New Byte(BufferSize){} + Do While n <> 0 + n = input.Read(buffer, 0, buffer.Length) + output.Write(buffer, 0, n) + Loop + End Using + End Sub + + Public Sub Run() + Using zip = New ZipFile + zip.AddEntry(zipEntryName, New WriteDelegate(AddressOf WriteEntry)) + zip.Save(zipFileName) + End Using + End Sub + + + + + + Add an entry, for which the application will provide a stream + containing the entry data, on a just-in-time basis. + + + + + In cases where the application wishes to open the stream that + holds the content for the ZipEntry, on a just-in-time basis, the + application can use this method. The application provides an + opener delegate that will be called by the DotNetZip library to + obtain a readable stream that can be read to get the bytes for + the given entry. Typically, this delegate opens a stream. + Optionally, the application can provide a closer delegate as + well, which will be called by DotNetZip when all bytes have been + read from the entry. + + + + These delegates are called from within the scope of the call to + ZipFile.Save(). + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + This example uses anonymous methods in C# to open and close the + source stream for the content for a zip entry. + + + using(Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile()) + { + zip.AddEntry(zipEntryName, + (name) => File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite ), + (name, stream) => stream.Close() + ); + + zip.Save(zipFileName); + } + + + + + + + This example uses delegates in VB.NET to open and close the + the source stream for the content for a zip entry. VB 9.0 lacks + support for "Sub" lambda expressions, and so the CloseDelegate must + be an actual, named Sub. + + + + Function MyStreamOpener(ByVal entryName As String) As Stream + '' This simply opens a file. You probably want to do somethinig + '' more involved here: open a stream to read from a database, + '' open a stream on an HTTP connection, and so on. + Return File.OpenRead(entryName) + End Function + + Sub MyStreamCloser(entryName As String, stream As Stream) + stream.Close() + End Sub + + Public Sub Run() + Dim dirToZip As String = "fodder" + Dim zipFileToCreate As String = "Archive.zip" + Dim opener As OpenDelegate = AddressOf MyStreamOpener + Dim closer As CloseDelegate = AddressOf MyStreamCloser + Dim numFilestoAdd As Int32 = 4 + Using zip As ZipFile = New ZipFile + Dim i As Integer + For i = 0 To numFilesToAdd - 1 + zip.AddEntry(String.Format("content-{0:000}.txt"), opener, closer) + Next i + zip.Save(zipFileToCreate) + End Using + End Sub + + + + + the name of the entry to add + + the delegate that will be invoked by ZipFile.Save() to get the + readable stream for the given entry. ZipFile.Save() will call + read on this stream to obtain the data for the entry. This data + will then be compressed and written to the newly created zip + file. + + + the delegate that will be invoked to close the stream. This may + be null (Nothing in VB), in which case no call is makde to close + the stream. + + the ZipEntry added + + + + + Updates the given entry in the ZipFile, using the given + string as content for the ZipEntry. + + + + + + Calling this method is equivalent to removing the ZipEntry for + the given file name and directory path, if it exists, and then calling + . See the documentation for + that method for further explanation. The string content is encoded + using the default encoding for the machine. This encoding is distinct + from the encoding used for the filename itself. See + . + + + + + + The name, including any path, to use within the archive for the entry. + + + + The content of the file, should it be extracted from the zip. + + + The ZipEntry added. + + + + + Updates the given entry in the ZipFile, using the given string as + content for the ZipEntry. + + + + Calling this method is equivalent to removing the ZipEntry for the + given file name and directory path, if it exists, and then calling . See the + documentation for that method for further explanation. + + + + The name, including any path, to use within the archive for the entry. + + + + The content of the file, should it be extracted from the zip. + + + + The text encoding to use when encoding the string. Be aware: This is + distinct from the text encoding used to encode the filename. See . + + + The ZipEntry added. + + + + + Updates the given entry in the ZipFile, using the given delegate + as the source for content for the ZipEntry. + + + + Calling this method is equivalent to removing the ZipEntry for the + given file name and directory path, if it exists, and then calling . See the + documentation for that method for further explanation. + + + + The name, including any path, to use within the archive for the entry. + + + the delegate which will write the entry content. + + The ZipEntry added. + + + + + Updates the given entry in the ZipFile, using the given delegates + to open and close the stream that provides the content for the ZipEntry. + + + + Calling this method is equivalent to removing the ZipEntry for the + given file name and directory path, if it exists, and then calling . See the + documentation for that method for further explanation. + + + + The name, including any path, to use within the archive for the entry. + + + + the delegate that will be invoked to open the stream + + + the delegate that will be invoked to close the stream + + + The ZipEntry added or updated. + + + + + Updates the given entry in the ZipFile, using the given stream as + input, and the given filename and given directory Path. + + + + + Calling the method is equivalent to calling RemoveEntry() if an + entry by the same name already exists, and then calling AddEntry() + with the given fileName and stream. + + + + The stream must be open and readable during the call to + ZipFile.Save. You can dispense the stream on a just-in-time basis + using the property. Check the + documentation of that property for more information. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + + + The name, including any path, to use within the archive for the entry. + + + The input stream from which to read file data. + The ZipEntry added. + + + + Add an entry into the zip archive using the given filename and + directory path within the archive, and the given content for the + file. No file is created in the filesystem. + + + The data to use for the entry. + + + The name, including any path, to use within the archive for the entry. + + + The ZipEntry added. + + + + Updates the given entry in the ZipFile, using the given byte + array as content for the entry. + + + + Calling this method is equivalent to removing the ZipEntry + for the given filename and directory path, if it exists, and then + calling . See the + documentation for that method for further explanation. + + + + The name, including any path, to use within the archive for the entry. + + + The content to use for the ZipEntry. + + The ZipEntry added. + + + + + Adds the contents of a filesystem directory to a Zip file archive. + + + + + + The name of the directory may be a relative path or a fully-qualified + path. Any files within the named directory are added to the archive. Any + subdirectories within the named directory are also added to the archive, + recursively. + + + + Top-level entries in the named directory will appear as top-level entries + in the zip archive. Entries in subdirectories in the named directory will + result in entries in subdirectories in the zip archive. + + + + If you want the entries to appear in a containing directory in the zip + archive itself, then you should call the AddDirectory() overload that + allows you to explicitly specify a directory path for use in the archive. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to each + ZipEntry added. + + + + + + + + + + This method has 2 overloads. + + The name of the directory to add. + The ZipEntry added. + + + + Adds the contents of a filesystem directory to a Zip file archive, + overriding the path to be used for entries in the archive. + + + + + The name of the directory may be a relative path or a fully-qualified + path. The add operation is recursive, so that any files or subdirectories + within the name directory are also added to the archive. + + + + Top-level entries in the named directory will appear as top-level entries + in the zip archive. Entries in subdirectories in the named directory will + result in entries in subdirectories in the zip archive. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to each + ZipEntry added. + + + + + + + In this code, calling the ZipUp() method with a value of "c:\reports" for + the directory parameter will result in a zip file structure in which all + entries are contained in a toplevel "reports" directory. + + + + public void ZipUp(string targetZip, string directory) + { + using (var zip = new ZipFile()) + { + zip.AddDirectory(directory, System.IO.Path.GetFileName(directory)); + zip.Save(targetZip); + } + } + + + + + + + + The name of the directory to add. + + + Specifies a directory path to use to override any path in the + DirectoryName. This path may, or may not, correspond to a real directory + in the current filesystem. If the zip is later extracted, this is the + path used for the extracted file or directory. Passing null + (Nothing in VB) or the empty string ("") will insert the items at + the root path within the archive. + + + The ZipEntry added. + + + + Creates a directory in the zip archive. + + + + + + Use this when you want to create a directory in the archive but there is + no corresponding filesystem representation for that directory. + + + + You will probably not need to do this in your code. One of the only times + you will want to do this is if you want an empty directory in the zip + archive. The reason: if you add a file to a zip archive that is stored + within a multi-level directory, all of the directory tree is implicitly + created in the zip archive. + + + + + + The name of the directory to create in the archive. + + The ZipEntry added. + + + + Checks a zip file to see if its directory is consistent. + + + + + + In cases of data error, the directory within a zip file can get out + of synch with the entries in the zip file. This method checks the + given zip file and returns true if this has occurred. + + + This method may take a long time to run for large zip files. + + + This method is not supported in the Reduced version of DotNetZip. + + + + Developers using COM can use the ComHelper.CheckZip(String) + method. + + + + + The filename to of the zip file to check. + + true if the named zip file checks OK. Otherwise, false. + + + + + + + Checks a zip file to see if its directory is consistent, + and optionally fixes the directory if necessary. + + + + + + In cases of data error, the directory within a zip file can get out of + synch with the entries in the zip file. This method checks the given + zip file, and returns true if this has occurred. It also optionally + fixes the zipfile, saving the fixed copy in Name_Fixed.zip. + + + + This method may take a long time to run for large zip files. It + will take even longer if the file actually needs to be fixed, and if + fixIfNecessary is true. + + + + This method is not supported in the Reduced version of DotNetZip. + + + + + The filename to of the zip file to check. + + If true, the method will fix the zip file if + necessary. + + + a TextWriter in which messages generated while checking will be written. + + + true if the named zip is OK; false if the file needs to be fixed. + + + + + + + Rewrite the directory within a zipfile. + + + + + + In cases of data error, the directory in a zip file can get out of + synch with the entries in the zip file. This method attempts to fix + the zip file if this has occurred. + + + This can take a long time for large zip files. + + This won't work if the zip file uses a non-standard + code page - neither IBM437 nor UTF-8. + + + This method is not supported in the Reduced or Compact Framework + versions of DotNetZip. + + + + Developers using COM can use the ComHelper.FixZipDirectory(String) + method. + + + + + The filename to of the zip file to fix. + + + + + + + Verify the password on a zip file. + + + + + Keep in mind that passwords in zipfiles are applied to + zip entries, not to the entire zip file. So testing a + zipfile for a particular password doesn't work in the + general case. On the other hand, it's often the case + that a single password will be used on all entries in a + zip file. This method works for that case. + + + There is no way to check a password without doing the + decryption. So this code decrypts and extracts the given + zipfile into + + + + The filename to of the zip file to fix. + + The password to check. + + a bool indicating whether the password matches. + + + + Provides a human-readable string with information about the ZipFile. + + + + + The information string contains 10 lines or so, about each ZipEntry, + describing whether encryption is in use, the compressed and uncompressed + length of the entry, the offset of the entry, and so on. As a result the + information string can be very long for zip files that contain many + entries. + + + This information is mostly useful for diagnostic purposes. + + + + + + Indicates whether to perform a full scan of the zip file when reading it. + + + + + + You almost never want to use this property. + + + + When reading a zip file, if this flag is true (True in + VB), the entire zip archive will be scanned and searched for entries. + For large archives, this can take a very, long time. The much more + efficient default behavior is to read the zip directory, which is + stored at the end of the zip file. But, in some cases the directory is + corrupted and you need to perform a full scan of the zip file to + determine the contents of the zip file. This property lets you do + that, when necessary. + + + + This flag is effective only when calling . Normally you would read a ZipFile with the + static ZipFile.Read + method. But you can't set the FullScan property on the + ZipFile instance when you use a static factory method like + ZipFile.Read. + + + + + + + This example shows how to read a zip file using the full scan approach, + and then save it, thereby producing a corrected zip file. + + + using (var zip = new ZipFile()) + { + zip.FullScan = true; + zip.Initialize(zipFileName); + zip.Save(newName); + } + + + + Using zip As New ZipFile + zip.FullScan = True + zip.Initialize(zipFileName) + zip.Save(newName) + End Using + + + + + + + Whether to sort the ZipEntries before saving the file. + + + + The default is false. If you have a large number of zip entries, the sort + alone can consume significant time. + + + + + using (var zip = new ZipFile()) + { + zip.AddFiles(filesToAdd); + zip.SortEntriesBeforeSaving = true; + zip.Save(name); + } + + + + Using zip As New ZipFile + zip.AddFiles(filesToAdd) + zip.SortEntriesBeforeSaving = True + zip.Save(name) + End Using + + + + + + + Indicates whether NTFS Reparse Points, like junctions, should be + traversed during calls to AddDirectory(). + + + + By default, calls to AddDirectory() will traverse NTFS reparse + points, like mounted volumes, and directory junctions. An example + of a junction is the "My Music" directory in Windows Vista. In some + cases you may not want DotNetZip to traverse those directories. In + that case, set this property to false. + + + + + using (var zip = new ZipFile()) + { + zip.AddDirectoryWillTraverseReparsePoints = false; + zip.AddDirectory(dirToZip,"fodder"); + zip.Save(zipFileToCreate); + } + + + + + + Size of the IO buffer used while saving. + + + + + + First, let me say that you really don't need to bother with this. It is + here to allow for optimizations that you probably won't make! It will work + fine if you don't set or get this property at all. Ok? + + + + Now that we have that out of the way, the fine print: This + property affects the size of the buffer that is used for I/O for each + entry contained in the zip file. When a file is read in to be compressed, + it uses a buffer given by the size here. When you update a zip file, the + data for unmodified entries is copied from the first zip file to the + other, through a buffer given by the size here. + + + + Changing the buffer size affects a few things: first, for larger buffer + sizes, the memory used by the ZipFile, obviously, will be larger + during I/O operations. This may make operations faster for very much + larger files. Last, for any given entry, when you use a larger buffer + there will be fewer progress events during I/O operations, because there's + one progress event generated for each time the buffer is filled and then + emptied. + + + + The default buffer size is 8k. Increasing the buffer size may speed + things up as you compress larger files. But there are no hard-and-fast + rules here, eh? You won't know til you test it. And there will be a + limit where ever larger buffers actually slow things down. So as I said + in the beginning, it's probably best if you don't set or get this property + at all. + + + + + + This example shows how you might set a large buffer size for efficiency when + dealing with zip entries that are larger than 1gb. + + using (ZipFile zip = new ZipFile()) + { + zip.SaveProgress += this.zip1_SaveProgress; + zip.AddDirectory(directoryToZip, ""); + zip.UseZip64WhenSaving = Zip64Option.Always; + zip.BufferSize = 65536*8; // 65536 * 8 = 512k + zip.Save(ZipFileToCreate); + } + + + + + + Size of the work buffer to use for the ZLIB codec during compression. + + + + + When doing ZLIB or Deflate compression, the library fills a buffer, + then passes it to the compressor for compression. Then the library + reads out the compressed bytes. This happens repeatedly until there + is no more uncompressed data to compress. This property sets the + size of the buffer that will be used for chunk-wise compression. In + order for the setting to take effect, your application needs to set + this property before calling one of the ZipFile.Save() + overloads. + + + Setting this affects the performance and memory efficiency of + compression and decompression. For larger files, setting this to a + larger size may improve compression performance, but the exact + numbers vary depending on available memory, the size of the streams + you are compressing, and a bunch of other variables. I don't have + good firm recommendations on how to set it. You'll have to test it + yourself. Or just leave it alone and accept the default. + + + + + + Indicates whether extracted files should keep their paths as + stored in the zip archive. + + + + + This property affects Extraction. It is not used when creating zip + archives. + + + + With this property set to false, the default, extracting entries + from a zip file will create files in the filesystem that have the full + path associated to the entry within the zip file. With this property set + to true, extracting entries from the zip file results in files + with no path: the folders are "flattened." + + + + An example: suppose the zip file contains entries /directory1/file1.txt and + /directory2/file2.txt. With FlattenFoldersOnExtract set to false, + the files created will be \directory1\file1.txt and \directory2\file2.txt. + With the property set to true, the files created are file1.txt and file2.txt. + + + + + + + The compression strategy to use for all entries. + + + + Set the Strategy used by the ZLIB-compatible compressor, when + compressing entries using the DEFLATE method. Different compression + strategies work better on different sorts of data. The strategy + parameter can affect the compression ratio and the speed of + compression but not the correctness of the compresssion. For more + information see Ionic.Zlib.CompressionStrategy. + + + + + The name of the ZipFile, on disk. + + + + + + When the ZipFile instance was created by reading an archive using + one of the ZipFile.Read methods, this property represents the name + of the zip file that was read. When the ZipFile instance was + created by using the no-argument constructor, this value is null + (Nothing in VB). + + + + If you use the no-argument constructor, and you then explicitly set this + property, when you call , this name will + specify the name of the zip file created. Doing so is equivalent to + calling . When instantiating a + ZipFile by reading from a stream or byte array, the Name + property remains null. When saving to a stream, the Name + property is implicitly set to null. + + + + + + Sets the compression level to be used for entries subsequently added to + the zip archive. + + + + + Varying the compression level used on entries can affect the + size-vs-speed tradeoff when compression and decompressing data streams + or files. + + + + As with some other properties on the ZipFile class, like , , and , setting this property on a ZipFile + instance will cause the specified CompressionLevel to be used on all + items that are subsequently added to the + ZipFile instance. If you set this property after you have added + items to the ZipFile, but before you have called Save(), + those items will not use the specified compression level. + + + + If you do not set this property, the default compression level is used, + which normally gives a good balance of compression efficiency and + compression speed. In some tests, using BestCompression can + double the time it takes to compress, while delivering just a small + increase in compression efficiency. This behavior will vary with the + type of data you compress. If you are in doubt, just leave this setting + alone, and accept the default. + + + + + + The compression method for the zipfile. + + + + By default, the compression method is CompressionMethod.Deflate. + + + + + + + A comment attached to the zip archive. + + + + + + This property is read/write. It allows the application to specify a + comment for the ZipFile, or read the comment for the + ZipFile. After setting this property, changes are only made + permanent when you call a Save() method. + + + + According to PKWARE's + zip specification, the comment is not encrypted, even if there is a + password set on the zip file. + + + + The specification does not describe how to indicate the encoding used + on a comment string. Many "compliant" zip tools and libraries use + IBM437 as the code page for comments; DotNetZip, too, follows that + practice. On the other hand, there are situations where you want a + Comment to be encoded with something else, for example using code page + 950 "Big-5 Chinese". To fill that need, DotNetZip will encode the + comment following the same procedure it follows for encoding + filenames: (a) if is + Never, it uses the default encoding (IBM437). (b) if is Always, it always uses the + alternate encoding (). (c) if is AsNecessary, it uses the + alternate encoding only if the default encoding is not sufficient for + encoding the comment - in other words if decoding the result does not + produce the original string. This decision is taken at the time of + the call to ZipFile.Save(). + + + + When creating a zip archive using this library, it is possible to change + the value of between each + entry you add, and between adding entries and the call to + Save(). Don't do this. It will likely result in a zip file that is + not readable by any tool or application. For best interoperability, leave + alone, or specify it only + once, before adding any entries to the ZipFile instance. + + + + + + + Specifies whether the Creation, Access, and Modified times for entries + added to the zip file will be emitted in “Windows format” + when the zip archive is saved. + + + + + An application creating a zip archive can use this flag to explicitly + specify that the file times for the entries should or should not be stored + in the zip archive in the format used by Windows. By default this flag is + true, meaning the Windows-format times are stored in the zip + archive. + + + + When adding an entry from a file or directory, the Creation (), Access (), and Modified () times for the given entry are + automatically set from the filesystem values. When adding an entry from a + stream or string, all three values are implicitly set to + DateTime.Now. Applications can also explicitly set those times by + calling . + + + + PKWARE's + zip specification describes multiple ways to format these times in a + zip file. One is the format Windows applications normally use: 100ns ticks + since January 1, 1601 UTC. The other is a format Unix applications typically + use: seconds since January 1, 1970 UTC. Each format can be stored in an + "extra field" in the zip entry when saving the zip archive. The former + uses an extra field with a Header Id of 0x000A, while the latter uses a + header ID of 0x5455, although you probably don't need to know that. + + + + Not all tools and libraries can interpret these fields. Windows + compressed folders is one that can read the Windows Format timestamps, + while I believe the Infozip + tools can read the Unix format timestamps. Some tools and libraries + may be able to read only one or the other. DotNetZip can read or write + times in either or both formats. + + + + The times stored are taken from , , and . + + + + The value set here applies to all entries subsequently added to the + ZipFile. + + + + This property is not mutually exclusive of the property. It is possible and + legal and valid to produce a zip file that contains timestamps encoded in + the Unix format as well as in the Windows format, in addition to the LastModified time attached to each + entry in the archive, a time that is always stored in "DOS format". And, + notwithstanding the names PKWare uses for these time formats, any of them + can be read and written by any computer, on any operating system. But, + there are no guarantees that a program running on Mac or Linux will + gracefully handle a zip file with "Windows" formatted times, or that an + application that does not use DotNetZip but runs on Windows will be able to + handle file times in Unix format. + + + + When in doubt, test. Sorry, I haven't got a complete list of tools and + which sort of timestamps they can use and will tolerate. If you get any + good information and would like to pass it on, please do so and I will + include that information in this documentation. + + + + + This example shows how to save a zip file that contains file timestamps + in a format normally used by Unix. + + using (var zip = new ZipFile()) + { + // produce a zip file the Mac will like + zip.EmitTimesInWindowsFormatWhenSaving = false; + zip.EmitTimesInUnixFormatWhenSaving = true; + zip.AddDirectory(directoryToZip, "files"); + zip.Save(outputFile); + } + + + + Using zip As New ZipFile + '' produce a zip file the Mac will like + zip.EmitTimesInWindowsFormatWhenSaving = False + zip.EmitTimesInUnixFormatWhenSaving = True + zip.AddDirectory(directoryToZip, "files") + zip.Save(outputFile) + End Using + + + + + + + + + Specifies whether the Creation, Access, and Modified times + for entries added to the zip file will be emitted in "Unix(tm) + format" when the zip archive is saved. + + + + + An application creating a zip archive can use this flag to explicitly + specify that the file times for the entries should or should not be stored + in the zip archive in the format used by Unix. By default this flag is + false, meaning the Unix-format times are not stored in the zip + archive. + + + + When adding an entry from a file or directory, the Creation (), Access (), and Modified () times for the given entry are + automatically set from the filesystem values. When adding an entry from a + stream or string, all three values are implicitly set to DateTime.Now. + Applications can also explicitly set those times by calling . + + + + PKWARE's + zip specification describes multiple ways to format these times in a + zip file. One is the format Windows applications normally use: 100ns ticks + since January 1, 1601 UTC. The other is a format Unix applications + typically use: seconds since January 1, 1970 UTC. Each format can be + stored in an "extra field" in the zip entry when saving the zip + archive. The former uses an extra field with a Header Id of 0x000A, while + the latter uses a header ID of 0x5455, although you probably don't need to + know that. + + + + Not all tools and libraries can interpret these fields. Windows + compressed folders is one that can read the Windows Format timestamps, + while I believe the Infozip + tools can read the Unix format timestamps. Some tools and libraries may be + able to read only one or the other. DotNetZip can read or write times in + either or both formats. + + + + The times stored are taken from , , and . + + + + This property is not mutually exclusive of the property. It is possible and + legal and valid to produce a zip file that contains timestamps encoded in + the Unix format as well as in the Windows format, in addition to the LastModified time attached to each + entry in the zip archive, a time that is always stored in "DOS + format". And, notwithstanding the names PKWare uses for these time + formats, any of them can be read and written by any computer, on any + operating system. But, there are no guarantees that a program running on + Mac or Linux will gracefully handle a zip file with "Windows" formatted + times, or that an application that does not use DotNetZip but runs on + Windows will be able to handle file times in Unix format. + + + + When in doubt, test. Sorry, I haven't got a complete list of tools and + which sort of timestamps they can use and will tolerate. If you get any + good information and would like to pass it on, please do so and I will + include that information in this documentation. + + + + + + + + + Indicates whether verbose output is sent to the during AddXxx() and + ReadXxx() operations. + + + + This is a synthetic property. It returns true if the is non-null. + + + + + Returns true if an entry by the given name exists in the ZipFile. + + + the name of the entry to find + true if an entry with the given name exists; otherwise false. + + + + + Indicates whether to perform case-sensitive matching on the filename when + retrieving entries in the zipfile via the string-based indexer. + + + + The default value is false, which means don't do case-sensitive + matching. In other words, retrieving zip["ReadMe.Txt"] is the same as + zip["readme.txt"]. It really makes sense to set this to true only + if you are not running on Windows, which has case-insensitive + filenames. But since this library is not built for non-Windows platforms, + in most cases you should just leave this property alone. + + + + + Indicates whether to ignore duplicate files (report only the first entry) + when loading a zipfile. + + + + The default value is false, which will try to make all files + available (duplicates will have a "copy" suffix appended to their name). + Setting this to true prior to using Initialize to read a + zipfile will prevent this and instead just ignore the duplicates. + + + + + Indicates whether to encode entry filenames and entry comments using Unicode + (UTF-8). + + + + + The + PKWare zip specification provides for encoding file names and file + comments in either the IBM437 code page, or in UTF-8. This flag selects + the encoding according to that specification. By default, this flag is + false, and filenames and comments are encoded into the zip file in the + IBM437 codepage. Setting this flag to true will specify that filenames + and comments that cannot be encoded with IBM437 will be encoded with + UTF-8. + + + + Zip files created with strict adherence to the PKWare specification with + respect to UTF-8 encoding can contain entries with filenames containing + any combination of Unicode characters, including the full range of + characters from Chinese, Latin, Hebrew, Greek, Cyrillic, and many other + alphabets. However, because at this time, the UTF-8 portion of the PKWare + specification is not broadly supported by other zip libraries and + utilities, such zip files may not be readable by your favorite zip tool or + archiver. In other words, interoperability will decrease if you set this + flag to true. + + + + In particular, Zip files created with strict adherence to the PKWare + specification with respect to UTF-8 encoding will not work well with + Explorer in Windows XP or Windows Vista, because Windows compressed + folders, as far as I know, do not support UTF-8 in zip files. Vista can + read the zip files, but shows the filenames incorrectly. Unpacking from + Windows Vista Explorer will result in filenames that have rubbish + characters in place of the high-order UTF-8 bytes. + + + + Also, zip files that use UTF-8 encoding will not work well with Java + applications that use the java.util.zip classes, as of v5.0 of the Java + runtime. The Java runtime does not correctly implement the PKWare + specification in this regard. + + + + As a result, we have the unfortunate situation that "correct" behavior by + the DotNetZip library with regard to Unicode encoding of filenames during + zip creation will result in zip files that are readable by strictly + compliant and current tools (for example the most recent release of the + commercial WinZip tool); but these zip files will not be readable by + various other tools or libraries, including Windows Explorer. + + + + The DotNetZip library can read and write zip files with UTF8-encoded + entries, according to the PKware spec. If you use DotNetZip for both + creating and reading the zip file, and you use UTF-8, there will be no + loss of information in the filenames. For example, using a self-extractor + created by this library will allow you to unpack files correctly with no + loss of information in the filenames. + + + + If you do not set this flag, it will remain false. If this flag is false, + your ZipFile will encode all filenames and comments using the + IBM437 codepage. This can cause "loss of information" on some filenames, + but the resulting zipfile will be more interoperable with other + utilities. As an example of the loss of information, diacritics can be + lost. The o-tilde character will be down-coded to plain o. The c with a + cedilla (Unicode 0xE7) used in Portugese will be downcoded to a c. + Likewise, the O-stroke character (Unicode 248), used in Danish and + Norwegian, will be down-coded to plain o. Chinese characters cannot be + represented in codepage IBM437; when using the default encoding, Chinese + characters in filenames will be represented as ?. These are all examples + of "information loss". + + + + The loss of information associated to the use of the IBM437 encoding is + inconvenient, and can also lead to runtime errors. For example, using + IBM437, any sequence of 4 Chinese characters will be encoded as ????. If + your application creates a ZipFile, then adds two files, each with + names of four Chinese characters each, this will result in a duplicate + filename exception. In the case where you add a single file with a name + containing four Chinese characters, calling Extract() on the entry that + has question marks in the filename will result in an exception, because + the question mark is not legal for use within filenames on Windows. These + are just a few examples of the problems associated to loss of information. + + + + This flag is independent of the encoding of the content within the entries + in the zip file. Think of the zip file as a container - it supports an + encoding. Within the container are other "containers" - the file entries + themselves. The encoding within those entries is independent of the + encoding of the zip archive container for those entries. + + + + Rather than specify the encoding in a binary fashion using this flag, an + application can specify an arbitrary encoding via the property. Setting the encoding + explicitly when creating zip archives will result in non-compliant zip + files that, curiously, are fairly interoperable. The challenge is, the + PKWare specification does not provide for a way to specify that an entry + in a zip archive uses a code page that is neither IBM437 nor UTF-8. + Therefore if you set the encoding explicitly when creating a zip archive, + you must take care upon reading the zip archive to use the same code page. + If you get it wrong, the behavior is undefined and may result in incorrect + filenames, exceptions, stomach upset, hair loss, and acne. + + + + + + + Specify whether to use ZIP64 extensions when saving a zip archive. + + + + + + When creating a zip file, the default value for the property is . is + safest, in the sense that you will not get an Exception if a pre-ZIP64 + limit is exceeded. + + + + You may set the property at any time before calling Save(). + + + + When reading a zip file via the Zipfile.Read() method, DotNetZip + will properly read ZIP64-endowed zip archives, regardless of the value of + this property. DotNetZip will always read ZIP64 archives. This property + governs only whether DotNetZip will write them. Therefore, when updating + archives, be careful about setting this property after reading an archive + that may use ZIP64 extensions. + + + + An interesting question is, if you have set this property to + AsNecessary, and then successfully saved, does the resulting + archive use ZIP64 extensions or not? To learn this, check the property, after calling Save(). + + + + Have you thought about + donating? + + + + + + + + Indicates whether the archive requires ZIP64 extensions. + + + + + + This property is null (or Nothing in VB) if the archive has + not been saved, and there are fewer than 65334 ZipEntry items + contained in the archive. + + + + The Value is true if any of the following four conditions holds: + the uncompressed size of any entry is larger than 0xFFFFFFFF; the + compressed size of any entry is larger than 0xFFFFFFFF; the relative + offset of any entry within the zip archive is larger than 0xFFFFFFFF; or + there are more than 65534 entries in the archive. (0xFFFFFFFF = + 4,294,967,295). The result may not be known until a Save() is attempted + on the zip archive. The Value of this + property may be set only AFTER one of the Save() methods has been called. + + + + If none of the four conditions holds, and the archive has been saved, then + the Value is false. + + + + A Value of false does not indicate that the zip archive, as saved, + does not use ZIP64. It merely indicates that ZIP64 is not required. An + archive may use ZIP64 even when not required if the property is set to , or if the property is set to and the output stream was not + seekable. Use the property to determine if + the most recent Save() method resulted in an archive that utilized + the ZIP64 extensions. + + + + + + + + + Indicates whether the most recent Save() operation used ZIP64 extensions. + + + + + The use of ZIP64 extensions within an archive is not always necessary, and + for interoperability concerns, it may be desired to NOT use ZIP64 if + possible. The property can be + set to use ZIP64 extensions only when necessary. In those cases, + Sometimes applications want to know whether a Save() actually used ZIP64 + extensions. Applications can query this read-only property to learn + whether ZIP64 has been used in a just-saved ZipFile. + + + + The value is null (or Nothing in VB) if the archive has not + been saved. + + + + Non-null values (HasValue is true) indicate whether ZIP64 + extensions were used during the most recent Save() operation. The + ZIP64 extensions may have been used as required by any particular entry + because of its uncompressed or compressed size, or because the archive is + larger than 4294967295 bytes, or because there are more than 65534 entries + in the archive, or because the UseZip64WhenSaving property was set + to , or because the + UseZip64WhenSaving property was set to and the output stream was not seekable. + The value of this property does not indicate the reason the ZIP64 + extensions were used. + + + + + + + + + Indicates whether the most recent Read() operation read a zip file that uses + ZIP64 extensions. + + + + This property will return null (Nothing in VB) if you've added an entry after reading + the zip file. + + + + + The text encoding to use when writing new entries to the ZipFile, + for those entries that cannot be encoded with the default (IBM437) + encoding; or, the text encoding that was used when reading the entries + from the ZipFile. + + + + + In its + zip specification, PKWare describes two options for encoding + filenames and comments: using IBM437 or UTF-8. But, some archiving tools + or libraries do not follow the specification, and instead encode + characters using the system default code page. For example, WinRAR when + run on a machine in Shanghai may encode filenames with the Big-5 Chinese + (950) code page. This behavior is contrary to the Zip specification, but + it occurs anyway. + + + + When using DotNetZip to write zip archives that will be read by one of + these other archivers, set this property to specify the code page to use + when encoding the and for each ZipEntry in the zip file, for + values that cannot be encoded with the default codepage for zip files, + IBM437. This is why this property is "provisional". In all cases, IBM437 + is used where possible, in other words, where no loss of data would + result. It is possible, therefore, to have a given entry with a + Comment encoded in IBM437 and a FileName encoded with the + specified "provisional" codepage. + + + + Be aware that a zip file created after you've explicitly set the property to a value other than + IBM437 may not be compliant to the PKWare specification, and may not be + readable by compliant archivers. On the other hand, many (most?) + archivers are non-compliant and can read zip files created in arbitrary + code pages. The trick is to use or specify the proper codepage when + reading the zip. + + + + When creating a zip archive using this library, it is possible to change + the value of between each + entry you add, and between adding entries and the call to + Save(). Don't do this. It will likely result in a zipfile that is + not readable. For best interoperability, either leave alone, or specify it only once, + before adding any entries to the ZipFile instance. There is one + exception to this recommendation, described later. + + + + When using an arbitrary, non-UTF8 code page for encoding, there is no + standard way for the creator application - whether DotNetZip, WinZip, + WinRar, or something else - to formally specify in the zip file which + codepage has been used for the entries. As a result, readers of zip files + are not able to inspect the zip file and determine the codepage that was + used for the entries contained within it. It is left to the application + or user to determine the necessary codepage when reading zip files encoded + this way. In other words, if you explicitly specify the codepage when you + create the zipfile, you must explicitly specify the same codepage when + reading the zipfile. + + + + The way you specify the code page to use when reading a zip file varies + depending on the tool or library you use to read the zip. In DotNetZip, + you use a ZipFile.Read() method that accepts an encoding parameter. It + isn't possible with Windows Explorer, as far as I know, to specify an + explicit codepage to use when reading a zip. If you use an incorrect + codepage when reading a zipfile, you will get entries with filenames that + are incorrect, and the incorrect filenames may even contain characters + that are not legal for use within filenames in Windows. Extracting entries + with illegal characters in the filenames will lead to exceptions. It's too + bad, but this is just the way things are with code pages in zip + files. Caveat Emptor. + + + + Example: Suppose you create a zipfile that contains entries with + filenames that have Danish characters. If you use equal to "iso-8859-1" (cp 28591), + the filenames will be correctly encoded in the zip. But, to read that + zipfile correctly, you have to specify the same codepage at the time you + read it. If try to read that zip file with Windows Explorer or another + application that is not flexible with respect to the codepage used to + decode filenames in zipfiles, you will get a filename like "Inf�.txt". + + + + When using DotNetZip to read a zip archive, and the zip archive uses an + arbitrary code page, you must specify the encoding to use before or when + the Zipfile is READ. This means you must use a ZipFile.Read() + method that allows you to specify a System.Text.Encoding parameter. Setting + the ProvisionalAlternateEncoding property after your application has read in + the zip archive will not affect the entry names of entries that have already + been read in. + + + + And now, the exception to the rule described above. One strategy for + specifying the code page for a given zip file is to describe the code page + in a human-readable form in the Zip comment. For example, the comment may + read "Entries in this archive are encoded in the Big5 code page". For + maximum interoperability, the zip comment in this case should be encoded + in the default, IBM437 code page. In this case, the zip comment is + encoded using a different page than the filenames. To do this, Specify + ProvisionalAlternateEncoding to your desired region-specific code + page, once before adding any entries, and then reset + ProvisionalAlternateEncoding to IBM437 before setting the property and calling Save(). + + + + + This example shows how to read a zip file using the Big-5 Chinese code page + (950), and extract each entry in the zip file. For this code to work as + desired, the Zipfile must have been created using the big5 code page + (CP950). This is typical, for example, when using WinRar on a machine with + CP950 set as the default code page. In that case, the names of entries + within the Zip archive will be stored in that code page, and reading the zip + archive must be done using that code page. If the application did not use + the correct code page in ZipFile.Read(), then names of entries within the + zip archive would not be correctly retrieved. + + using (var zip = ZipFile.Read(zipFileName, System.Text.Encoding.GetEncoding("big5"))) + { + // retrieve and extract an entry using a name encoded with CP950 + zip[MyDesiredEntry].Extract("unpack"); + } + + + + Using zip As ZipFile = ZipFile.Read(ZipToExtract, System.Text.Encoding.GetEncoding("big5")) + ' retrieve and extract an entry using a name encoded with CP950 + zip(MyDesiredEntry).Extract("unpack") + End Using + + + + DefaultEncoding + + + + A Text Encoding to use when encoding the filenames and comments for + all the ZipEntry items, during a ZipFile.Save() operation. + + + + Whether the encoding specified here is used during the save depends + on . + + + + + + A flag that tells if and when this instance should apply + AlternateEncoding to encode the filenames and comments associated to + of ZipEntry objects contained within this instance. + + + + + Gets or sets the TextWriter to which status messages are delivered + for the instance. + + + + If the TextWriter is set to a non-null value, then verbose output is sent + to the TextWriter during Add, Read, Save and + Extract operations. Typically, console applications might use + Console.Out and graphical or headless applications might use a + System.IO.StringWriter. The output of this is suitable for viewing + by humans. + + + + + In this example, a console application instantiates a ZipFile, then + sets the StatusMessageTextWriter to Console.Out. At that + point, all verbose status messages for that ZipFile are sent to the + console. + + + + using (ZipFile zip= ZipFile.Read(FilePath)) + { + zip.StatusMessageTextWriter= System.Console.Out; + // messages are sent to the console during extraction + zip.ExtractAll(); + } + + + + Using zip As ZipFile = ZipFile.Read(FilePath) + zip.StatusMessageTextWriter= System.Console.Out + 'Status Messages will be sent to the console during extraction + zip.ExtractAll() + End Using + + + + In this example, a Windows Forms application instantiates a + ZipFile, then sets the StatusMessageTextWriter to a + StringWriter. At that point, all verbose status messages for that + ZipFile are sent to the StringWriter. + + + + var sw = new System.IO.StringWriter(); + using (ZipFile zip= ZipFile.Read(FilePath)) + { + zip.StatusMessageTextWriter= sw; + zip.ExtractAll(); + } + Console.WriteLine("{0}", sw.ToString()); + + + + Dim sw as New System.IO.StringWriter + Using zip As ZipFile = ZipFile.Read(FilePath) + zip.StatusMessageTextWriter= sw + zip.ExtractAll() + End Using + 'Status Messages are now available in sw + + + + + + + Gets or sets the name for the folder to store the temporary file + this library writes when saving a zip archive. + + + + + This library will create a temporary file when saving a Zip archive to a + file. This file is written when calling one of the Save() methods + that does not save to a stream, or one of the SaveSelfExtractor() + methods. + + + + By default, the library will create the temporary file in the directory + specified for the file itself, via the property or via + the method. + + + + Setting this property allows applications to override this default + behavior, so that the library will create the temporary file in the + specified folder. For example, to have the library create the temporary + file in the current working directory, regardless where the ZipFile + is saved, specfy ".". To revert to the default behavior, set this + property to null (Nothing in VB). + + + + When setting the property to a non-null value, the folder specified must + exist; if it does not an exception is thrown. The application should have + write and delete permissions on the folder. The permissions are not + explicitly checked ahead of time; if the application does not have the + appropriate rights, an exception will be thrown at the time Save() + is called. + + + + There is no temporary file created when reading a zip archive. When + saving to a Stream, there is no temporary file created. For example, if + the application is an ASP.NET application and calls Save() + specifying the Response.OutputStream as the output stream, there is + no temporary file created. + + + + + Thrown when setting the property if the directory does not exist. + + + + + + Sets the password to be used on the ZipFile instance. + + + + + + When writing a zip archive, this password is applied to the entries, not + to the zip archive itself. It applies to any ZipEntry subsequently + added to the ZipFile, using one of the AddFile, + AddDirectory, AddEntry, or AddItem methods, etc. + When reading a zip archive, this property applies to any entry + subsequently extracted from the ZipFile using one of the Extract + methods on the ZipFile class. + + + + When writing a zip archive, keep this in mind: though the password is set + on the ZipFile object, according to the Zip spec, the "directory" of the + archive - in other words the list of entries or files contained in the archive - is + not encrypted with the password, or protected in any way. If you set the + Password property, the password actually applies to individual entries + that are added to the archive, subsequent to the setting of this property. + The list of filenames in the archive that is eventually created will + appear in clear text, but the contents of the individual files are + encrypted. This is how Zip encryption works. + + + + One simple way around this limitation is to simply double-wrap sensitive + filenames: Store the files in a zip file, and then store that zip file + within a second, "outer" zip file. If you apply a password to the outer + zip file, then readers will be able to see that the outer zip file + contains an inner zip file. But readers will not be able to read the + directory or file list of the inner zip file. + + + + If you set the password on the ZipFile, and then add a set of files + to the archive, then each entry is encrypted with that password. You may + also want to change the password between adding different entries. If you + set the password, add an entry, then set the password to null + (Nothing in VB), and add another entry, the first entry is + encrypted and the second is not. If you call AddFile(), then set + the Password property, then call ZipFile.Save, the file + added will not be password-protected, and no warning will be generated. + + + + When setting the Password, you may also want to explicitly set the property, to specify how to encrypt the entries added + to the ZipFile. If you set the Password to a non-null value and do not + set , then PKZip 2.0 ("Weak") encryption is used. + This encryption is relatively weak but is very interoperable. If you set + the password to a null value (Nothing in VB), Encryption is + reset to None. + + + + All of the preceding applies to writing zip archives, in other words when + you use one of the Save methods. To use this property when reading or an + existing ZipFile, do the following: set the Password property on the + ZipFile, then call one of the Extract() overloads on the . In this case, the entry is extracted using the + Password that is specified on the ZipFile instance. If you + have not set the Password property, then the password is + null, and the entry is extracted with no password. + + + + If you set the Password property on the ZipFile, then call + Extract() an entry that has not been encrypted with a password, the + password is not used for that entry, and the ZipEntry is extracted + as normal. In other words, the password is used only if necessary. + + + + The class also has a Password property. It takes precedence + over this property on the ZipFile. Typically, you would use the + per-entry Password when most entries in the zip archive use one password, + and a few entries use a different password. If all entries in the zip + file use the same password, then it is simpler to just set this property + on the ZipFile itself, whether creating a zip archive or extracting + a zip archive. + + + + + + + This example creates a zip file, using password protection for the + entries, and then extracts the entries from the zip file. When creating + the zip file, the Readme.txt file is not protected with a password, but + the other two are password-protected as they are saved. During extraction, + each file is extracted with the appropriate password. + + + // create a file with encryption + using (ZipFile zip = new ZipFile()) + { + zip.AddFile("ReadMe.txt"); + zip.Password= "!Secret1"; + zip.AddFile("MapToTheSite-7440-N49th.png"); + zip.AddFile("2008-Regional-Sales-Report.pdf"); + zip.Save("EncryptedArchive.zip"); + } + + // extract entries that use encryption + using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) + { + zip.Password= "!Secret1"; + zip.ExtractAll("extractDir"); + } + + + + + Using zip As New ZipFile + zip.AddFile("ReadMe.txt") + zip.Password = "123456!" + zip.AddFile("MapToTheSite-7440-N49th.png") + zip.Password= "!Secret1"; + zip.AddFile("2008-Regional-Sales-Report.pdf") + zip.Save("EncryptedArchive.zip") + End Using + + + ' extract entries that use encryption + Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) + zip.Password= "!Secret1" + zip.ExtractAll("extractDir") + End Using + + + + + + ZipFile.Encryption + ZipEntry.Password + + + + The action the library should take when extracting a file that already + exists. + + + + + This property affects the behavior of the Extract methods (one of the + Extract() or ExtractWithPassword() overloads), when + extraction would would overwrite an existing filesystem file. If you do + not set this property, the library throws an exception when extracting an + entry would overwrite an existing file. + + + + This property has no effect when extracting to a stream, or when the file + to be extracted does not already exist. + + + + + + + The action the library should take when an error is encountered while + opening or reading files as they are saved into a zip archive. + + + + + Errors can occur as a file is being saved to the zip archive. For + example, the File.Open may fail, or a File.Read may fail, because of + lock conflicts or other reasons. + + + + The first problem might occur after having called AddDirectory() on a + directory that contains a Clipper .dbf file; the file is locked by + Clipper and cannot be opened for read by another process. An example of + the second problem might occur when trying to zip a .pst file that is in + use by Microsoft Outlook. Outlook locks a range on the file, which allows + other processes to open the file, but not read it in its entirety. + + + + This property tells DotNetZip what you would like to do in the case of + these errors. The primary options are: ZipErrorAction.Throw to + throw an exception (this is the default behavior if you don't set this + property); ZipErrorAction.Skip to Skip the file for which there + was an error and continue saving; ZipErrorAction.Retry to Retry + the entry that caused the problem; or + ZipErrorAction.InvokeErrorEvent to invoke an event handler. + + + + This property is implicitly set to ZipErrorAction.InvokeErrorEvent + if you add a handler to the event. If you set + this property to something other than + ZipErrorAction.InvokeErrorEvent, then the ZipError + event is implicitly cleared. What it means is you can set one or the + other (or neither), depending on what you want, but you never need to set + both. + + + + As with some other properties on the ZipFile class, like , , and , setting this property on a ZipFile + instance will cause the specified ZipErrorAction to be used on all + items that are subsequently added to the + ZipFile instance. If you set this property after you have added + items to the ZipFile, but before you have called Save(), + those items will not use the specified error handling action. + + + + If you want to handle any errors that occur with any entry in the zip + file in the same way, then set this property once, before adding any + entries to the zip archive. + + + + If you set this property to ZipErrorAction.Skip and you'd like to + learn which files may have been skipped after a Save(), you can + set the on the ZipFile before + calling Save(). A message will be emitted into that writer for + each skipped file, if any. + + + + + + This example shows how to tell DotNetZip to skip any files for which an + error is generated during the Save(). + + Public Sub SaveZipFile() + Dim SourceFolder As String = "fodder" + Dim DestFile As String = "eHandler.zip" + Dim sw as New StringWriter + Using zipArchive As ZipFile = New ZipFile + ' Tell DotNetZip to skip any files for which it encounters an error + zipArchive.ZipErrorAction = ZipErrorAction.Skip + zipArchive.StatusMessageTextWriter = sw + zipArchive.AddDirectory(SourceFolder) + zipArchive.Save(DestFile) + End Using + ' examine sw here to see any messages + End Sub + + + + + + + + + + The Encryption to use for entries added to the ZipFile. + + + + + Set this when creating a zip archive, or when updating a zip archive. The + specified Encryption is applied to the entries subsequently added to the + ZipFile instance. Applications do not need to set the + Encryption property when reading or extracting a zip archive. + + + + If you set this to something other than EncryptionAlgorithm.None, you + will also need to set the . + + + + As with some other properties on the ZipFile class, like and , setting this + property on a ZipFile instance will cause the specified + EncryptionAlgorithm to be used on all items + that are subsequently added to the ZipFile instance. In other + words, if you set this property after you have added items to the + ZipFile, but before you have called Save(), those items will + not be encrypted or protected with a password in the resulting zip + archive. To get a zip archive with encrypted entries, set this property, + along with the property, before calling + AddFile, AddItem, or AddDirectory (etc.) on the + ZipFile instance. + + + + If you read a ZipFile, you can modify the Encryption on an + encrypted entry, only by setting the Encryption property on the + ZipEntry itself. Setting the Encryption property on the + ZipFile, once it has been created via a call to + ZipFile.Read(), does not affect entries that were previously read. + + + + For example, suppose you read a ZipFile, and there is an encrypted + entry. Setting the Encryption property on that ZipFile and + then calling Save() on the ZipFile does not update the + Encryption used for the entries in the archive. Neither is an + exception thrown. Instead, what happens during the Save() is that + all previously existing entries are copied through to the new zip archive, + with whatever encryption and password that was used when originally + creating the zip archive. Upon re-reading that archive, to extract + entries, applications should use the original password or passwords, if + any. + + + + Suppose an application reads a ZipFile, and there is an encrypted + entry. Setting the Encryption property on that ZipFile and + then adding new entries (via AddFile(), AddEntry(), etc) + and then calling Save() on the ZipFile does not update the + Encryption on any of the entries that had previously been in the + ZipFile. The Encryption property applies only to the + newly-added entries. + + + + + + + This example creates a zip archive that uses encryption, and then extracts + entries from the archive. When creating the zip archive, the ReadMe.txt + file is zipped without using a password or encryption. The other files + use encryption. + + + + // Create a zip archive with AES Encryption. + using (ZipFile zip = new ZipFile()) + { + zip.AddFile("ReadMe.txt"); + zip.Encryption= EncryptionAlgorithm.WinZipAes256; + zip.Password= "Top.Secret.No.Peeking!"; + zip.AddFile("7440-N49th.png"); + zip.AddFile("2008-Regional-Sales-Report.pdf"); + zip.Save("EncryptedArchive.zip"); + } + + // Extract a zip archive that uses AES Encryption. + // You do not need to specify the algorithm during extraction. + using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) + { + zip.Password= "Top.Secret.No.Peeking!"; + zip.ExtractAll("extractDirectory"); + } + + + + ' Create a zip that uses Encryption. + Using zip As New ZipFile() + zip.Encryption= EncryptionAlgorithm.WinZipAes256 + zip.Password= "Top.Secret.No.Peeking!" + zip.AddFile("ReadMe.txt") + zip.AddFile("7440-N49th.png") + zip.AddFile("2008-Regional-Sales-Report.pdf") + zip.Save("EncryptedArchive.zip") + End Using + + ' Extract a zip archive that uses AES Encryption. + ' You do not need to specify the algorithm during extraction. + Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) + zip.Password= "Top.Secret.No.Peeking!" + zip.ExtractAll("extractDirectory") + End Using + + + + + ZipFile.Password + ZipEntry.Encryption + + + + A callback that allows the application to specify the compression level + to use for entries subsequently added to the zip archive. + + + + + + With this callback, the DotNetZip library allows the application to + determine whether compression will be used, at the time of the + Save. This may be useful if the application wants to favor + speed over size, and wants to defer the decision until the time of + Save. + + + + Typically applications set the property on + the ZipFile or on each ZipEntry to determine the level of + compression used. This is done at the time the entry is added to the + ZipFile. Setting the property to + Ionic.Zlib.CompressionLevel.None means no compression will be used. + + + + This callback allows the application to defer the decision on the + CompressionLevel to use, until the time of the call to + ZipFile.Save(). The callback is invoked once per ZipEntry, + at the time the data for the entry is being written out as part of a + Save() operation. The application can use whatever criteria it + likes in determining the level to return. For example, an application may + wish that no .mp3 files should be compressed, because they are already + compressed and the extra compression is not worth the CPU time incurred, + and so can return None for all .mp3 entries. + + + + The library determines whether compression will be attempted for an entry + this way: If the entry is a zero length file, or a directory, no + compression is used. Otherwise, if this callback is set, it is invoked + and the CompressionLevel is set to the return value. If this + callback has not been set, then the previously set value for + CompressionLevel is used. + + + + + + + The maximum size of an output segment, when saving a split Zip file. + + + + Make sure you do not read from this field if you've set the value using + + + + Set this to a non-zero value before calling or to specify that the ZipFile should be saved as a + split archive, also sometimes called a spanned archive. Some also + call them multi-file archives. + + + + A split zip archive is saved in a set of discrete filesystem files, + rather than in a single file. This is handy when transmitting the + archive in email or some other mechanism that has a limit to the size of + each file. The first file in a split archive will be named + basename.z01, the second will be named basename.z02, and + so on. The final file is named basename.zip. According to the zip + specification from PKWare, the minimum value is 65536, for a 64k segment + size. The maximum number of segments allows in a split archive is 99. + + + + The value of this property determines the maximum size of a split + segment when writing a split archive. For example, suppose you have a + ZipFile that would save to a single file of 200k. If you set the + MaxOutputSegmentSize to 65536 before calling Save(), you + will get four distinct output files. On the other hand if you set this + property to 256k, then you will get a single-file archive for that + ZipFile. + + + + The size of each split output file will be as large as possible, up to + the maximum size set here. The zip specification requires that some data + fields in a zip archive may not span a split boundary, and an output + segment may be smaller than the maximum if necessary to avoid that + problem. Also, obviously the final segment of the archive may be smaller + than the maximum segment size. Segments will never be larger than the + value set with this property. + + + + You can save a split Zip file only when saving to a regular filesystem + file. It's not possible to save a split zip file as a self-extracting + archive, nor is it possible to save a split zip file to a stream. When + saving to a SFX or to a Stream, this property is ignored. + + + + About interoperability: Split or spanned zip files produced by DotNetZip + can be read by WinZip or PKZip, and vice-versa. Segmented zip files may + not be readable by other tools, if those other tools don't support zip + spanning or splitting. When in doubt, test. I don't believe Windows + Explorer can extract a split archive. + + + + This property has no effect when reading a split archive. You can read + a split archive in the normal way with DotNetZip. + + + + When saving a zip file, if you want a regular zip file rather than a + split zip file, don't set this property, or set it to Zero. + + + + If you read a split archive, with and + then subsequently call ZipFile.Save(), unless you set this + property before calling Save(), you will get a normal, + single-file archive. + + + + + + + + The maximum size of an output segment, when saving a split Zip file. + + + + If you set this value, make sure you do not accidently use in your code + + + + Set this to a non-zero value before calling or to specify that the ZipFile should be saved as a + split archive, also sometimes called a spanned archive. Some also + call them multi-file archives. + + + + A split zip archive is saved in a set of discrete filesystem files, + rather than in a single file. This is handy when transmitting the + archive in email or some other mechanism that has a limit to the size of + each file. The first file in a split archive will be named + basename.z01, the second will be named basename.z02, and + so on. The final file is named basename.zip. According to the zip + specification from PKWare, the minimum value is 65536, for a 64k segment + size. The maximum number of segments allows in a split archive is 99. + + + + The value of this property determines the maximum size of a split + segment when writing a split archive. For example, suppose you have a + ZipFile that would save to a single file of 200k. If you set the + MaxOutputSegmentSize to 65536 before calling Save(), you + will get four distinct output files. On the other hand if you set this + property to 256k, then you will get a single-file archive for that + ZipFile. + + + + The size of each split output file will be as large as possible, up to + the maximum size set here. The zip specification requires that some data + fields in a zip archive may not span a split boundary, and an output + segment may be smaller than the maximum if necessary to avoid that + problem. Also, obviously the final segment of the archive may be smaller + than the maximum segment size. Segments will never be larger than the + value set with this property. + + + + You can save a split Zip file only when saving to a regular filesystem + file. It's not possible to save a split zip file as a self-extracting + archive, nor is it possible to save a split zip file to a stream. When + saving to a SFX or to a Stream, this property is ignored. + + + + About interoperability: Split or spanned zip files produced by DotNetZip + can be read by WinZip or PKZip, and vice-versa. Segmented zip files may + not be readable by other tools, if those other tools don't support zip + spanning or splitting. When in doubt, test. I don't believe Windows + Explorer can extract a split archive. + + + + This property has no effect when reading a split archive. You can read + a split archive in the normal way with DotNetZip. + + + + When saving a zip file, if you want a regular zip file rather than a + split zip file, don't set this property, or set it to Zero. + + + + If you read a split archive, with and + then subsequently call ZipFile.Save(), unless you set this + property before calling Save(), you will get a normal, + single-file archive. + + + + + + + + Returns the number of segments used in the most recent Save() operation. + + + + This is normally zero, unless you have set the property. If you have set , and then you save a file, after the call to + Save() completes, you can read this value to learn the number of segments that + were created. + + + If you call Save("Archive.zip"), and it creates 5 segments, then you + will have filesystem files named Archive.z01, Archive.z02, Archive.z03, + Archive.z04, and Archive.zip, and the value of this property will be 5. + + + + + + + The size threshold for an entry, above which a parallel deflate is used. + + + + + + DotNetZip will use multiple threads to compress any ZipEntry, + if the entry is larger than the given size. Zero means "always + use parallel deflate", while -1 means "never use parallel + deflate". The default value for this property is 512k. Aside + from the special values of 0 and 1, the minimum value is 65536. + + + + If the entry size cannot be known before compression, as with a + read-forward stream, then Parallel deflate will never be + performed, unless the value of this property is zero. + + + + A parallel deflate operations will speed up the compression of + large files, on computers with multiple CPUs or multiple CPU + cores. For files above 1mb, on a dual core or dual-cpu (2p) + machine, the time required to compress the file can be 70% of the + single-threaded deflate. For very large files on 4p machines the + compression can be done in 30% of the normal time. The downside + is that parallel deflate consumes extra memory during the deflate, + and the deflation is not as effective. + + + + Parallel deflate tends to yield slightly less compression when + compared to as single-threaded deflate; this is because the original + data stream is split into multiple independent buffers, each of which + is compressed in parallel. But because they are treated + independently, there is no opportunity to share compression + dictionaries. For that reason, a deflated stream may be slightly + larger when compressed using parallel deflate, as compared to a + traditional single-threaded deflate. Sometimes the increase over the + normal deflate is as much as 5% of the total compressed size. For + larger files it can be as small as 0.1%. + + + + Multi-threaded compression does not give as much an advantage when + using Encryption. This is primarily because encryption tends to slow + down the entire pipeline. Also, multi-threaded compression gives less + of an advantage when using lower compression levels, for example . You may have to + perform some tests to determine the best approach for your situation. + + + + + + + + + + The maximum number of buffer pairs to use when performing + parallel compression. + + + + + This property sets an upper limit on the number of memory + buffer pairs to create when performing parallel + compression. The implementation of the parallel + compression stream allocates multiple buffers to + facilitate parallel compression. As each buffer fills up, + the stream uses + ThreadPool.QueueUserWorkItem() to compress those + buffers in a background threadpool thread. After a buffer + is compressed, it is re-ordered and written to the output + stream. + + + + A higher number of buffer pairs enables a higher degree of + parallelism, which tends to increase the speed of compression on + multi-cpu computers. On the other hand, a higher number of buffer + pairs also implies a larger memory consumption, more active worker + threads, and a higher cpu utilization for any compression. This + property enables the application to limit its memory consumption and + CPU utilization behavior depending on requirements. + + + + For each compression "task" that occurs in parallel, there are 2 + buffers allocated: one for input and one for output. This property + sets a limit for the number of pairs. The total amount of storage + space allocated for buffering will then be (N*S*2), where N is the + number of buffer pairs, S is the size of each buffer (). By default, DotNetZip allocates 4 buffer + pairs per CPU core, so if your machine has 4 cores, and you retain + the default buffer size of 128k, then the + ParallelDeflateOutputStream will use 4 * 4 * 2 * 128kb of buffer + memory in total, or 4mb, in blocks of 128kb. If you then set this + property to 8, then the number will be 8 * 2 * 128kb of buffer + memory, or 2mb. + + + + CPU utilization will also go up with additional buffers, because a + larger number of buffer pairs allows a larger number of background + threads to compress in parallel. If you find that parallel + compression is consuming too much memory or CPU, you can adjust this + value downward. + + + + The default value is 16. Different values may deliver better or + worse results, depending on your priorities and the dynamic + performance characteristics of your storage and compute resources. + + + + This property is not the number of buffer pairs to use; it is an + upper limit. An illustration: Suppose you have an application that + uses the default value of this property (which is 16), and it runs + on a machine with 2 CPU cores. In that case, DotNetZip will allocate + 4 buffer pairs per CPU core, for a total of 8 pairs. The upper + limit specified by this property has no effect. + + + + The application can set this value at any time + before calling ZipFile.Save(). + + + + + + + + Provides a string representation of the instance. + a string representation of the instance. + + + + Returns the version number on the DotNetZip assembly. + + + + + This property is exposed as a convenience. Callers could also get the + version value by retrieving GetName().Version on the + System.Reflection.Assembly object pointing to the DotNetZip + assembly. But sometimes it is not clear which assembly is being loaded. + This property makes it clear. + + + This static property is primarily useful for diagnostic purposes. + + + + + + Creates a new ZipFile instance, using the specified filename. + + + + + Applications can use this constructor to create a new ZipFile for writing, + or to slurp in an existing zip archive for read and update purposes. + + + + To create a new zip archive, an application can call this constructor, + passing the name of a file that does not exist. The name may be a fully + qualified path. Then the application can add directories or files to the + ZipFile via AddDirectory(), AddFile(), AddItem() + and then write the zip archive to the disk by calling Save(). The + zip file is not actually opened and written to the disk until the + application calls ZipFile.Save(). At that point the new zip file + with the given name is created. + + + + If you won't know the name of the Zipfile until the time you call + ZipFile.Save(), or if you plan to save to a stream (which has no + name), then you should use the no-argument constructor. + + + + The application can also call this constructor to read an existing zip + archive. passing the name of a valid zip file that does exist. But, it's + better form to use the static method, + passing the name of the zip file, because using ZipFile.Read() in + your code communicates very clearly what you are doing. In either case, + the file is then read into the ZipFile instance. The app can then + enumerate the entries or can modify the zip file, for example adding + entries, removing entries, changing comments, and so on. + + + + One advantage to this parameterized constructor: it allows applications to + use the same code to add items to a zip archive, regardless of whether the + zip file exists. + + + + Instances of the ZipFile class are not multi-thread safe. You may + not party on a single instance with multiple threads. You may have + multiple threads that each use a distinct ZipFile instance, or you + can synchronize multi-thread access to a single instance. + + + + By the way, since DotNetZip is so easy to use, don't you think you should + donate $5 or $10? + + + + + + Thrown if name refers to an existing file that is not a valid zip file. + + + + This example shows how to create a zipfile, and add a few files into it. + + String ZipFileToCreate = "archive1.zip"; + String DirectoryToZip = "c:\\reports"; + using (ZipFile zip = new ZipFile()) + { + // Store all files found in the top level directory, into the zip archive. + String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); + zip.AddFiles(filenames, "files"); + zip.Save(ZipFileToCreate); + } + + + + Dim ZipFileToCreate As String = "archive1.zip" + Dim DirectoryToZip As String = "c:\reports" + Using zip As ZipFile = New ZipFile() + Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) + zip.AddFiles(filenames, "files") + zip.Save(ZipFileToCreate) + End Using + + + + The filename to use for the new zip archive. + + + + + Creates a new ZipFile instance, using the specified name for the + filename, and the specified Encoding. + + + + + See the documentation on the ZipFile + constructor that accepts a single string argument for basic + information on all the ZipFile constructors. + + + + The Encoding is used as the default alternate encoding for entries with + filenames or comments that cannot be encoded with the IBM437 code page. + This is equivalent to setting the property on the ZipFile + instance after construction. + + + + Instances of the ZipFile class are not multi-thread safe. You may + not party on a single instance with multiple threads. You may have + multiple threads that each use a distinct ZipFile instance, or you + can synchronize multi-thread access to a single instance. + + + + + + Thrown if name refers to an existing file that is not a valid zip file. + + + The filename to use for the new zip archive. + The Encoding is used as the default alternate + encoding for entries with filenames or comments that cannot be encoded + with the IBM437 code page. + + + + Create a zip file, without specifying a target filename or stream to save to. + + + + + See the documentation on the ZipFile + constructor that accepts a single string argument for basic + information on all the ZipFile constructors. + + + + After instantiating with this constructor and adding entries to the + archive, the application should call or + to save to a file or a + stream, respectively. The application can also set the + property and then call the no-argument method. (This + is the preferred approach for applications that use the library through + COM interop.) If you call the no-argument method + without having set the Name of the ZipFile, either through + the parameterized constructor or through the explicit property , the + Save() will throw, because there is no place to save the file. + + + Instances of the ZipFile class are not multi-thread safe. You may + have multiple threads that each use a distinct ZipFile instance, or + you can synchronize multi-thread access to a single instance. + + + + + This example creates a Zip archive called Backup.zip, containing all the files + in the directory DirectoryToZip. Files within subdirectories are not zipped up. + + using (ZipFile zip = new ZipFile()) + { + // Store all files found in the top level directory, into the zip archive. + // note: this code does not recurse subdirectories! + String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); + zip.AddFiles(filenames, "files"); + zip.Save("Backup.zip"); + } + + + + Using zip As New ZipFile + ' Store all files found in the top level directory, into the zip archive. + ' note: this code does not recurse subdirectories! + Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) + zip.AddFiles(filenames, "files") + zip.Save("Backup.zip") + End Using + + + + + + Create a zip file, specifying a text Encoding, but without specifying a + target filename or stream to save to. + + + + + See the documentation on the ZipFile + constructor that accepts a single string argument for basic + information on all the ZipFile constructors. + + + + + + The Encoding is used as the default alternate encoding for entries with + filenames or comments that cannot be encoded with the IBM437 code page. + + + + + Creates a new ZipFile instance, using the specified name for the + filename, and the specified status message writer. + + + + + See the documentation on the ZipFile + constructor that accepts a single string argument for basic + information on all the ZipFile constructors. + + + + This version of the constructor allows the caller to pass in a TextWriter, + to which verbose messages will be written during extraction or creation of + the zip archive. A console application may wish to pass + System.Console.Out to get messages on the Console. A graphical or headless + application may wish to capture the messages in a different + TextWriter, for example, a StringWriter, and then display + the messages in a TextBox, or generate an audit log of ZipFile operations. + + + + To encrypt the data for the files added to the ZipFile instance, + set the Password property after creating the ZipFile instance. + + + + Instances of the ZipFile class are not multi-thread safe. You may + not party on a single instance with multiple threads. You may have + multiple threads that each use a distinct ZipFile instance, or you + can synchronize multi-thread access to a single instance. + + + + + + Thrown if name refers to an existing file that is not a valid zip file. + + + + + using (ZipFile zip = new ZipFile("Backup.zip", Console.Out)) + { + // Store all files found in the top level directory, into the zip archive. + // note: this code does not recurse subdirectories! + // Status messages will be written to Console.Out + String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); + zip.AddFiles(filenames); + zip.Save(); + } + + + + Using zip As New ZipFile("Backup.zip", Console.Out) + ' Store all files found in the top level directory, into the zip archive. + ' note: this code does not recurse subdirectories! + ' Status messages will be written to Console.Out + Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) + zip.AddFiles(filenames) + zip.Save() + End Using + + + + The filename to use for the new zip archive. + A TextWriter to use for writing + verbose status messages. + + + + Creates a new ZipFile instance, using the specified name for the + filename, the specified status message writer, and the specified Encoding. + + + + + This constructor works like the ZipFile + constructor that accepts a single string argument. See that + reference for detail on what this constructor does. + + + + This version of the constructor allows the caller to pass in a + TextWriter, and an Encoding. The TextWriter will collect + verbose messages that are generated by the library during extraction or + creation of the zip archive. A console application may wish to pass + System.Console.Out to get messages on the Console. A graphical or + headless application may wish to capture the messages in a different + TextWriter, for example, a StringWriter, and then display + the messages in a TextBox, or generate an audit log of + ZipFile operations. + + + + The Encoding is used as the default alternate encoding for entries + with filenames or comments that cannot be encoded with the IBM437 code + page. This is a equivalent to setting the property on the ZipFile + instance after construction. + + + + To encrypt the data for the files added to the ZipFile instance, + set the Password property after creating the ZipFile + instance. + + + + Instances of the ZipFile class are not multi-thread safe. You may + not party on a single instance with multiple threads. You may have + multiple threads that each use a distinct ZipFile instance, or you + can synchronize multi-thread access to a single instance. + + + + + + Thrown if fileName refers to an existing file that is not a valid zip file. + + + The filename to use for the new zip archive. + A TextWriter to use for writing verbose + status messages. + + The Encoding is used as the default alternate encoding for entries with + filenames or comments that cannot be encoded with the IBM437 code page. + + + + + Initialize a ZipFile instance by reading in a zip file. + + + + + + This method is primarily useful from COM Automation environments, when + reading or extracting zip files. In COM, it is not possible to invoke + parameterized constructors for a class. A COM Automation application can + update a zip file by using the default (no argument) + constructor, then calling Initialize() to read the contents + of an on-disk zip archive into the ZipFile instance. + + + + .NET applications are encouraged to use the ZipFile.Read() methods + for better clarity. + + + + the name of the existing zip file to read in. + + + + This is an integer indexer into the Zip archive. + + + + + This property is read-only. + + + + Internally, the ZipEntry instances that belong to the + ZipFile are stored in a Dictionary. When you use this + indexer the first time, it creates a read-only + List<ZipEntry> from the Dictionary.Values Collection. + If at any time you modify the set of entries in the ZipFile, + either by adding an entry, removing an entry, or renaming an + entry, a new List will be created, and the numeric indexes for the + remaining entries may be different. + + + + This means you cannot rename any ZipEntry from + inside an enumeration of the zip file. + + + + The index value. + + + + + + The ZipEntry within the Zip archive at the specified index. If the + entry does not exist in the archive, this indexer throws. + + + + + + This is a name-based indexer into the Zip archive. + + + + + This property is read-only. + + + + The property on the ZipFile + determines whether retrieval via this indexer is done via case-sensitive + comparisons. By default, retrieval is not case sensitive. This makes + sense on Windows, in which filesystems are not case sensitive. + + + + Regardless of case-sensitivity, it is not always the case that + this[value].FileName == value. In other words, the FileName + property of the ZipEntry retrieved with this indexer, may or may + not be equal to the index value. + + + + This is because DotNetZip performs a normalization of filenames passed to + this indexer, before attempting to retrieve the item. That normalization + includes: removal of a volume letter and colon, swapping backward slashes + for forward slashes. So, zip["dir1\\entry1.txt"].FileName == + "dir1/entry.txt". + + + + Directory entries in the zip file may be retrieved via this indexer only + with names that have a trailing slash. DotNetZip automatically appends a + trailing slash to the names of any directory entries added to a zip. + + + + + + This example extracts only the entries in a zip file that are .txt files. + + using (ZipFile zip = ZipFile.Read("PackedDocuments.zip")) + { + foreach (string s1 in zip.EntryFilenames) + { + if (s1.EndsWith(".txt")) + zip[s1].Extract("textfiles"); + } + } + + + Using zip As ZipFile = ZipFile.Read("PackedDocuments.zip") + Dim s1 As String + For Each s1 In zip.EntryFilenames + If s1.EndsWith(".txt") Then + zip(s1).Extract("textfiles") + End If + Next + End Using + + + + + + Thrown if the caller attempts to assign a non-null value to the indexer. + + + + The name of the file, including any directory path, to retrieve from the + zip. The filename match is not case-sensitive by default; you can use the + property to change this behavior. The + pathname can use forward-slashes or backward slashes. + + + + The ZipEntry within the Zip archive, given by the specified + filename. If the named entry does not exist in the archive, this indexer + returns null (Nothing in VB). + + + + + + The list of filenames for the entries contained within the zip archive. + + + + According to the ZIP specification, the names of the entries use forward + slashes in pathnames. If you are scanning through the list, you may have + to swap forward slashes for backslashes. + + + + + + This example shows one way to test if a filename is already contained + within a zip archive. + + String zipFileToRead= "PackedDocuments.zip"; + string candidate = "DatedMaterial.xps"; + using (ZipFile zip = new ZipFile(zipFileToRead)) + { + if (zip.EntryFilenames.Contains(candidate)) + Console.WriteLine("The file '{0}' exists in the zip archive '{1}'", + candidate, + zipFileName); + else + Console.WriteLine("The file, '{0}', does not exist in the zip archive '{1}'", + candidate, + zipFileName); + Console.WriteLine(); + } + + + Dim zipFileToRead As String = "PackedDocuments.zip" + Dim candidate As String = "DatedMaterial.xps" + Using zip As ZipFile.Read(ZipFileToRead) + If zip.EntryFilenames.Contains(candidate) Then + Console.WriteLine("The file '{0}' exists in the zip archive '{1}'", _ + candidate, _ + zipFileName) + Else + Console.WriteLine("The file, '{0}', does not exist in the zip archive '{1}'", _ + candidate, _ + zipFileName) + End If + Console.WriteLine + End Using + + + + + The list of strings for the filenames contained within the Zip archive. + + + + + + Returns the readonly collection of entries in the Zip archive. + + + + + + If there are no entries in the current ZipFile, the value returned is a + non-null zero-element collection. If there are entries in the zip file, + the elements are returned in no particular order. + + + This is the implied enumerator on the ZipFile class. If you use a + ZipFile instance in a context that expects an enumerator, you will + get this collection. + + + + + + + Returns a readonly collection of entries in the Zip archive, sorted by FileName. + + + + If there are no entries in the current ZipFile, the value returned + is a non-null zero-element collection. If there are entries in the zip + file, the elements are returned sorted by the name of the entry. + + + + + This example fills a Windows Forms ListView with the entries in a zip file. + + + using (ZipFile zip = ZipFile.Read(zipFile)) + { + foreach (ZipEntry entry in zip.EntriesSorted) + { + ListViewItem item = new ListViewItem(n.ToString()); + n++; + string[] subitems = new string[] { + entry.FileName.Replace("/","\\"), + entry.LastModified.ToString("yyyy-MM-dd HH:mm:ss"), + entry.UncompressedSize.ToString(), + String.Format("{0,5:F0}%", entry.CompressionRatio), + entry.CompressedSize.ToString(), + (entry.UsesEncryption) ? "Y" : "N", + String.Format("{0:X8}", entry.Crc)}; + + foreach (String s in subitems) + { + ListViewItem.ListViewSubItem subitem = new ListViewItem.ListViewSubItem(); + subitem.Text = s; + item.SubItems.Add(subitem); + } + + this.listView1.Items.Add(item); + } + } + + + + + + + + Returns the number of entries in the Zip archive. + + + + + Removes the given ZipEntry from the zip archive. + + + + + After calling RemoveEntry, the application must call Save to + make the changes permanent. + + + + + Thrown if the specified ZipEntry does not exist in the ZipFile. + + + + In this example, all entries in the zip archive dating from before + December 31st, 2007, are removed from the archive. This is actually much + easier if you use the RemoveSelectedEntries method. But I needed an + example for RemoveEntry, so here it is. + + String ZipFileToRead = "ArchiveToModify.zip"; + System.DateTime Threshold = new System.DateTime(2007,12,31); + using (ZipFile zip = ZipFile.Read(ZipFileToRead)) + { + var EntriesToRemove = new System.Collections.Generic.List<ZipEntry>(); + foreach (ZipEntry e in zip) + { + if (e.LastModified < Threshold) + { + // We cannot remove the entry from the list, within the context of + // an enumeration of said list. + // So we add the doomed entry to a list to be removed later. + EntriesToRemove.Add(e); + } + } + + // actually remove the doomed entries. + foreach (ZipEntry zombie in EntriesToRemove) + zip.RemoveEntry(zombie); + + zip.Comment= String.Format("This zip archive was updated at {0}.", + System.DateTime.Now.ToString("G")); + + // save with a different name + zip.Save("Archive-Updated.zip"); + } + + + + Dim ZipFileToRead As String = "ArchiveToModify.zip" + Dim Threshold As New DateTime(2007, 12, 31) + Using zip As ZipFile = ZipFile.Read(ZipFileToRead) + Dim EntriesToRemove As New System.Collections.Generic.List(Of ZipEntry) + Dim e As ZipEntry + For Each e In zip + If (e.LastModified < Threshold) Then + ' We cannot remove the entry from the list, within the context of + ' an enumeration of said list. + ' So we add the doomed entry to a list to be removed later. + EntriesToRemove.Add(e) + End If + Next + + ' actually remove the doomed entries. + Dim zombie As ZipEntry + For Each zombie In EntriesToRemove + zip.RemoveEntry(zombie) + Next + zip.Comment = String.Format("This zip archive was updated at {0}.", DateTime.Now.ToString("G")) + 'save as a different name + zip.Save("Archive-Updated.zip") + End Using + + + + + The ZipEntry to remove from the zip. + + + + + + + + Removes the ZipEntry with the given filename from the zip archive. + + + + + After calling RemoveEntry, the application must call Save to + make the changes permanent. + + + + + + Thrown if the ZipFile is not updatable. + + + + Thrown if a ZipEntry with the specified filename does not exist in + the ZipFile. + + + + + This example shows one way to remove an entry with a given filename from + an existing zip archive. + + + String zipFileToRead= "PackedDocuments.zip"; + string candidate = "DatedMaterial.xps"; + using (ZipFile zip = ZipFile.Read(zipFileToRead)) + { + if (zip.EntryFilenames.Contains(candidate)) + { + zip.RemoveEntry(candidate); + zip.Comment= String.Format("The file '{0}' has been removed from this archive.", + Candidate); + zip.Save(); + } + } + + + Dim zipFileToRead As String = "PackedDocuments.zip" + Dim candidate As String = "DatedMaterial.xps" + Using zip As ZipFile = ZipFile.Read(zipFileToRead) + If zip.EntryFilenames.Contains(candidate) Then + zip.RemoveEntry(candidate) + zip.Comment = String.Format("The file '{0}' has been removed from this archive.", Candidate) + zip.Save + End If + End Using + + + + + The name of the file, including any directory path, to remove from the zip. + The filename match is not case-sensitive by default; you can use the + CaseSensitiveRetrieval property to change this behavior. The + pathname can use forward-slashes or backward slashes. + + + + + + Closes the read and write streams associated + to the ZipFile, if necessary. + + + + The Dispose() method is generally employed implicitly, via a using(..) {..} + statement. (Using...End Using in VB) If you do not employ a using + statement, insure that your application calls Dispose() explicitly. For + example, in a Powershell application, or an application that uses the COM + interop interface, you must call Dispose() explicitly. + + + + This example extracts an entry selected by name, from the Zip file to the + Console. + + using (ZipFile zip = ZipFile.Read(zipfile)) + { + foreach (ZipEntry e in zip) + { + if (WantThisEntry(e.FileName)) + zip.Extract(e.FileName, Console.OpenStandardOutput()); + } + } // Dispose() is called implicitly here. + + + + Using zip As ZipFile = ZipFile.Read(zipfile) + Dim e As ZipEntry + For Each e In zip + If WantThisEntry(e.FileName) Then + zip.Extract(e.FileName, Console.OpenStandardOutput()) + End If + Next + End Using ' Dispose is implicity called here + + + + + + Disposes any managed resources, if the flag is set, then marks the + instance disposed. This method is typically not called explicitly from + application code. + + + + Applications should call the no-arg Dispose method. + + + + indicates whether the method should dispose streams or not. + + + + + Default size of the buffer used for IO. + + + + + An event handler invoked when a Save() starts, before and after each + entry has been written to the archive, when a Save() completes, and + during other Save events. + + + + + Depending on the particular event, different properties on the parameter are set. The following + table summarizes the available EventTypes and the conditions under + which this event handler is invoked with a + SaveProgressEventArgs with the given EventType. + + + + + value of EntryType + Meaning and conditions + + + + ZipProgressEventType.Saving_Started + Fired when ZipFile.Save() begins. + + + + + ZipProgressEventType.Saving_BeforeSaveEntry + + Fired within ZipFile.Save(), just before writing data for each + particular entry. + + + + + ZipProgressEventType.Saving_AfterSaveEntry + + Fired within ZipFile.Save(), just after having finished writing data + for each particular entry. + + + + + ZipProgressEventType.Saving_Completed + Fired when ZipFile.Save() has completed. + + + + + ZipProgressEventType.Saving_AfterSaveTempArchive + + Fired after the temporary file has been created. This happens only + when saving to a disk file. This event will not be invoked when + saving to a stream. + + + + + ZipProgressEventType.Saving_BeforeRenameTempArchive + + Fired just before renaming the temporary file to the permanent + location. This happens only when saving to a disk file. This event + will not be invoked when saving to a stream. + + + + + ZipProgressEventType.Saving_AfterRenameTempArchive + + Fired just after renaming the temporary file to the permanent + location. This happens only when saving to a disk file. This event + will not be invoked when saving to a stream. + + + + + ZipProgressEventType.Saving_AfterCompileSelfExtractor + + Fired after a self-extracting archive has finished compiling. This + EventType is used only within SaveSelfExtractor(). + + + + + ZipProgressEventType.Saving_BytesRead + + Set during the save of a particular entry, to update progress of the + Save(). When this EventType is set, the BytesTransferred is the + number of bytes that have been read from the source stream. The + TotalBytesToTransfer is the number of bytes in the uncompressed + file. + + + + + + + + + This example uses an anonymous method to handle the + SaveProgress event, by updating a progress bar. + + + progressBar1.Value = 0; + progressBar1.Max = listbox1.Items.Count; + using (ZipFile zip = new ZipFile()) + { + // listbox1 contains a list of filenames + zip.AddFiles(listbox1.Items); + + // do the progress bar: + zip.SaveProgress += (sender, e) => { + if (e.EventType == ZipProgressEventType.Saving_BeforeWriteEntry) { + progressBar1.PerformStep(); + } + }; + + zip.Save(fs); + } + + + + + This example uses a named method as the + SaveProgress event handler, to update the user, in a + console-based application. + + + static bool justHadByteUpdate= false; + public static void SaveProgress(object sender, SaveProgressEventArgs e) + { + if (e.EventType == ZipProgressEventType.Saving_Started) + Console.WriteLine("Saving: {0}", e.ArchiveName); + + else if (e.EventType == ZipProgressEventType.Saving_Completed) + { + justHadByteUpdate= false; + Console.WriteLine(); + Console.WriteLine("Done: {0}", e.ArchiveName); + } + + else if (e.EventType == ZipProgressEventType.Saving_BeforeWriteEntry) + { + if (justHadByteUpdate) + Console.WriteLine(); + Console.WriteLine(" Writing: {0} ({1}/{2})", + e.CurrentEntry.FileName, e.EntriesSaved, e.EntriesTotal); + justHadByteUpdate= false; + } + + else if (e.EventType == ZipProgressEventType.Saving_EntryBytesRead) + { + if (justHadByteUpdate) + Console.SetCursorPosition(0, Console.CursorTop); + Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, e.TotalBytesToTransfer, + e.BytesTransferred / (0.01 * e.TotalBytesToTransfer )); + justHadByteUpdate= true; + } + } + + public static ZipUp(string targetZip, string directory) + { + using (var zip = new ZipFile()) { + zip.SaveProgress += SaveProgress; + zip.AddDirectory(directory); + zip.Save(targetZip); + } + } + + + + + Public Sub ZipUp(ByVal targetZip As String, ByVal directory As String) + Using zip As ZipFile = New ZipFile + AddHandler zip.SaveProgress, AddressOf MySaveProgress + zip.AddDirectory(directory) + zip.Save(targetZip) + End Using + End Sub + + Private Shared justHadByteUpdate As Boolean = False + + Public Shared Sub MySaveProgress(ByVal sender As Object, ByVal e As SaveProgressEventArgs) + If (e.EventType Is ZipProgressEventType.Saving_Started) Then + Console.WriteLine("Saving: {0}", e.ArchiveName) + + ElseIf (e.EventType Is ZipProgressEventType.Saving_Completed) Then + justHadByteUpdate = False + Console.WriteLine + Console.WriteLine("Done: {0}", e.ArchiveName) + + ElseIf (e.EventType Is ZipProgressEventType.Saving_BeforeWriteEntry) Then + If justHadByteUpdate Then + Console.WriteLine + End If + Console.WriteLine(" Writing: {0} ({1}/{2})", e.CurrentEntry.FileName, e.EntriesSaved, e.EntriesTotal) + justHadByteUpdate = False + + ElseIf (e.EventType Is ZipProgressEventType.Saving_EntryBytesRead) Then + If justHadByteUpdate Then + Console.SetCursorPosition(0, Console.CursorTop) + End If + Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, _ + e.TotalBytesToTransfer, _ + (CDbl(e.BytesTransferred) / (0.01 * e.TotalBytesToTransfer))) + justHadByteUpdate = True + End If + End Sub + + + + + + This is a more complete example of using the SaveProgress + events in a Windows Forms application, with a + Thread object. + + + delegate void SaveEntryProgress(SaveProgressEventArgs e); + delegate void ButtonClick(object sender, EventArgs e); + + public class WorkerOptions + { + public string ZipName; + public string Folder; + public string Encoding; + public string Comment; + public int ZipFlavor; + public Zip64Option Zip64; + } + + private int _progress2MaxFactor; + private bool _saveCanceled; + private long _totalBytesBeforeCompress; + private long _totalBytesAfterCompress; + private Thread _workerThread; + + + private void btnZipup_Click(object sender, EventArgs e) + { + KickoffZipup(); + } + + private void btnCancel_Click(object sender, EventArgs e) + { + if (this.lblStatus.InvokeRequired) + { + this.lblStatus.Invoke(new ButtonClick(this.btnCancel_Click), new object[] { sender, e }); + } + else + { + _saveCanceled = true; + lblStatus.Text = "Canceled..."; + ResetState(); + } + } + + private void KickoffZipup() + { + _folderName = tbDirName.Text; + + if (_folderName == null || _folderName == "") return; + if (this.tbZipName.Text == null || this.tbZipName.Text == "") return; + + // check for existence of the zip file: + if (System.IO.File.Exists(this.tbZipName.Text)) + { + var dlgResult = MessageBox.Show(String.Format("The file you have specified ({0}) already exists." + + " Do you want to overwrite this file?", this.tbZipName.Text), + "Confirmation is Required", MessageBoxButtons.YesNo, MessageBoxIcon.Question); + if (dlgResult != DialogResult.Yes) return; + System.IO.File.Delete(this.tbZipName.Text); + } + + _saveCanceled = false; + _nFilesCompleted = 0; + _totalBytesAfterCompress = 0; + _totalBytesBeforeCompress = 0; + this.btnOk.Enabled = false; + this.btnOk.Text = "Zipping..."; + this.btnCancel.Enabled = true; + lblStatus.Text = "Zipping..."; + + var options = new WorkerOptions + { + ZipName = this.tbZipName.Text, + Folder = _folderName, + Encoding = "ibm437" + }; + + if (this.comboBox1.SelectedIndex != 0) + { + options.Encoding = this.comboBox1.SelectedItem.ToString(); + } + + if (this.radioFlavorSfxCmd.Checked) + options.ZipFlavor = 2; + else if (this.radioFlavorSfxGui.Checked) + options.ZipFlavor = 1; + else options.ZipFlavor = 0; + + if (this.radioZip64AsNecessary.Checked) + options.Zip64 = Zip64Option.AsNecessary; + else if (this.radioZip64Always.Checked) + options.Zip64 = Zip64Option.Always; + else options.Zip64 = Zip64Option.Never; + + options.Comment = String.Format("Encoding:{0} || Flavor:{1} || ZIP64:{2}\r\nCreated at {3} || {4}\r\n", + options.Encoding, + FlavorToString(options.ZipFlavor), + options.Zip64.ToString(), + System.DateTime.Now.ToString("yyyy-MMM-dd HH:mm:ss"), + this.Text); + + if (this.tbComment.Text != TB_COMMENT_NOTE) + options.Comment += this.tbComment.Text; + + _workerThread = new Thread(this.DoSave); + _workerThread.Name = "Zip Saver thread"; + _workerThread.Start(options); + this.Cursor = Cursors.WaitCursor; + } + + + private void DoSave(Object p) + { + WorkerOptions options = p as WorkerOptions; + try + { + using (var zip1 = new ZipFile()) + { + zip1.ProvisionalAlternateEncoding = System.Text.Encoding.GetEncoding(options.Encoding); + zip1.Comment = options.Comment; + zip1.AddDirectory(options.Folder); + _entriesToZip = zip1.EntryFileNames.Count; + SetProgressBars(); + zip1.SaveProgress += this.zip1_SaveProgress; + + zip1.UseZip64WhenSaving = options.Zip64; + + if (options.ZipFlavor == 1) + zip1.SaveSelfExtractor(options.ZipName, SelfExtractorFlavor.WinFormsApplication); + else if (options.ZipFlavor == 2) + zip1.SaveSelfExtractor(options.ZipName, SelfExtractorFlavor.ConsoleApplication); + else + zip1.Save(options.ZipName); + } + } + catch (System.Exception exc1) + { + MessageBox.Show(String.Format("Exception while zipping: {0}", exc1.Message)); + btnCancel_Click(null, null); + } + } + + + + void zip1_SaveProgress(object sender, SaveProgressEventArgs e) + { + switch (e.EventType) + { + case ZipProgressEventType.Saving_AfterWriteEntry: + StepArchiveProgress(e); + break; + case ZipProgressEventType.Saving_EntryBytesRead: + StepEntryProgress(e); + break; + case ZipProgressEventType.Saving_Completed: + SaveCompleted(); + break; + case ZipProgressEventType.Saving_AfterSaveTempArchive: + // this event only occurs when saving an SFX file + TempArchiveSaved(); + break; + } + if (_saveCanceled) + e.Cancel = true; + } + + + + private void StepArchiveProgress(SaveProgressEventArgs e) + { + if (this.progressBar1.InvokeRequired) + { + this.progressBar1.Invoke(new SaveEntryProgress(this.StepArchiveProgress), new object[] { e }); + } + else + { + if (!_saveCanceled) + { + _nFilesCompleted++; + this.progressBar1.PerformStep(); + _totalBytesAfterCompress += e.CurrentEntry.CompressedSize; + _totalBytesBeforeCompress += e.CurrentEntry.UncompressedSize; + + // reset the progress bar for the entry: + this.progressBar2.Value = this.progressBar2.Maximum = 1; + + this.Update(); + } + } + } + + + private void StepEntryProgress(SaveProgressEventArgs e) + { + if (this.progressBar2.InvokeRequired) + { + this.progressBar2.Invoke(new SaveEntryProgress(this.StepEntryProgress), new object[] { e }); + } + else + { + if (!_saveCanceled) + { + if (this.progressBar2.Maximum == 1) + { + // reset + Int64 max = e.TotalBytesToTransfer; + _progress2MaxFactor = 0; + while (max > System.Int32.MaxValue) + { + max /= 2; + _progress2MaxFactor++; + } + this.progressBar2.Maximum = (int)max; + lblStatus.Text = String.Format("{0} of {1} files...({2})", + _nFilesCompleted + 1, _entriesToZip, e.CurrentEntry.FileName); + } + + int xferred = e.BytesTransferred >> _progress2MaxFactor; + + this.progressBar2.Value = (xferred >= this.progressBar2.Maximum) + ? this.progressBar2.Maximum + : xferred; + + this.Update(); + } + } + } + + private void SaveCompleted() + { + if (this.lblStatus.InvokeRequired) + { + this.lblStatus.Invoke(new MethodInvoker(this.SaveCompleted)); + } + else + { + lblStatus.Text = String.Format("Done, Compressed {0} files, {1:N0}% of original.", + _nFilesCompleted, (100.00 * _totalBytesAfterCompress) / _totalBytesBeforeCompress); + ResetState(); + } + } + + private void ResetState() + { + this.btnCancel.Enabled = false; + this.btnOk.Enabled = true; + this.btnOk.Text = "Zip it!"; + this.progressBar1.Value = 0; + this.progressBar2.Value = 0; + this.Cursor = Cursors.Default; + if (!_workerThread.IsAlive) + _workerThread.Join(); + } + + + + + + + + + + + An event handler invoked before, during, and after the reading of a zip archive. + + + + + Depending on the particular event being signaled, different properties on the + parameter are set. The following table + summarizes the available EventTypes and the conditions under which this + event handler is invoked with a ReadProgressEventArgs with the given EventType. + + + + + value of EntryType + Meaning and conditions + + + + ZipProgressEventType.Reading_Started + Fired just as ZipFile.Read() begins. Meaningful properties: ArchiveName. + + + + + ZipProgressEventType.Reading_Completed + Fired when ZipFile.Read() has completed. Meaningful properties: ArchiveName. + + + + + ZipProgressEventType.Reading_ArchiveBytesRead + Fired while reading, updates the number of bytes read for the entire archive. + Meaningful properties: ArchiveName, CurrentEntry, BytesTransferred, TotalBytesToTransfer. + + + + + ZipProgressEventType.Reading_BeforeReadEntry + Indicates an entry is about to be read from the archive. + Meaningful properties: ArchiveName, EntriesTotal. + + + + + ZipProgressEventType.Reading_AfterReadEntry + Indicates an entry has just been read from the archive. + Meaningful properties: ArchiveName, EntriesTotal, CurrentEntry. + + + + + + + + + + + + + An event handler invoked before, during, and after extraction of + entries in the zip archive. + + + + + Depending on the particular event, different properties on the parameter are set. The following + table summarizes the available EventTypes and the conditions under + which this event handler is invoked with a + ExtractProgressEventArgs with the given EventType. + + + + + value of EntryType + Meaning and conditions + + + + ZipProgressEventType.Extracting_BeforeExtractAll + + Set when ExtractAll() begins. The ArchiveName, Overwrite, and + ExtractLocation properties are meaningful. + + + + ZipProgressEventType.Extracting_AfterExtractAll + + Set when ExtractAll() has completed. The ArchiveName, Overwrite, + and ExtractLocation properties are meaningful. + + + + + ZipProgressEventType.Extracting_BeforeExtractEntry + + Set when an Extract() on an entry in the ZipFile has begun. + Properties that are meaningful: ArchiveName, EntriesTotal, + CurrentEntry, Overwrite, ExtractLocation, EntriesExtracted. + + + + + ZipProgressEventType.Extracting_AfterExtractEntry + + Set when an Extract() on an entry in the ZipFile has completed. + Properties that are meaningful: ArchiveName, EntriesTotal, + CurrentEntry, Overwrite, ExtractLocation, EntriesExtracted. + + + + + ZipProgressEventType.Extracting_EntryBytesWritten + + Set within a call to Extract() on an entry in the ZipFile, as data + is extracted for the entry. Properties that are meaningful: + ArchiveName, CurrentEntry, BytesTransferred, TotalBytesToTransfer. + + + + + ZipProgressEventType.Extracting_ExtractEntryWouldOverwrite + + Set within a call to Extract() on an entry in the ZipFile, when the + extraction would overwrite an existing file. This event type is used + only when ExtractExistingFileAction on the ZipFile or + ZipEntry is set to InvokeExtractProgressEvent. + + + + + + + + + + private static bool justHadByteUpdate = false; + public static void ExtractProgress(object sender, ExtractProgressEventArgs e) + { + if(e.EventType == ZipProgressEventType.Extracting_EntryBytesWritten) + { + if (justHadByteUpdate) + Console.SetCursorPosition(0, Console.CursorTop); + + Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, e.TotalBytesToTransfer, + e.BytesTransferred / (0.01 * e.TotalBytesToTransfer )); + justHadByteUpdate = true; + } + else if(e.EventType == ZipProgressEventType.Extracting_BeforeExtractEntry) + { + if (justHadByteUpdate) + Console.WriteLine(); + Console.WriteLine("Extracting: {0}", e.CurrentEntry.FileName); + justHadByteUpdate= false; + } + } + + public static ExtractZip(string zipToExtract, string directory) + { + string TargetDirectory= "extract"; + using (var zip = ZipFile.Read(zipToExtract)) { + zip.ExtractProgress += ExtractProgress; + foreach (var e in zip1) + { + e.Extract(TargetDirectory, true); + } + } + } + + + + Public Shared Sub Main(ByVal args As String()) + Dim ZipToUnpack As String = "C1P3SML.zip" + Dim TargetDir As String = "ExtractTest_Extract" + Console.WriteLine("Extracting file {0} to {1}", ZipToUnpack, TargetDir) + Using zip1 As ZipFile = ZipFile.Read(ZipToUnpack) + AddHandler zip1.ExtractProgress, AddressOf MyExtractProgress + Dim e As ZipEntry + For Each e In zip1 + e.Extract(TargetDir, True) + Next + End Using + End Sub + + Private Shared justHadByteUpdate As Boolean = False + + Public Shared Sub MyExtractProgress(ByVal sender As Object, ByVal e As ExtractProgressEventArgs) + If (e.EventType = ZipProgressEventType.Extracting_EntryBytesWritten) Then + If ExtractTest.justHadByteUpdate Then + Console.SetCursorPosition(0, Console.CursorTop) + End If + Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, e.TotalBytesToTransfer, (CDbl(e.BytesTransferred) / (0.01 * e.TotalBytesToTransfer))) + ExtractTest.justHadByteUpdate = True + ElseIf (e.EventType = ZipProgressEventType.Extracting_BeforeExtractEntry) Then + If ExtractTest.justHadByteUpdate Then + Console.WriteLine + End If + Console.WriteLine("Extracting: {0}", e.CurrentEntry.FileName) + ExtractTest.justHadByteUpdate = False + End If + End Sub + + + + + + + + + + An event handler invoked before, during, and after Adding entries to a zip archive. + + + + Adding a large number of entries to a zip file can take a long + time. For example, when calling on a + directory that contains 50,000 files, it could take 3 minutes or so. + This event handler allws an application to track the progress of the Add + operation, and to optionally cancel a lengthy Add operation. + + + + + + int _numEntriesToAdd= 0; + int _numEntriesAdded= 0; + void AddProgressHandler(object sender, AddProgressEventArgs e) + { + switch (e.EventType) + { + case ZipProgressEventType.Adding_Started: + Console.WriteLine("Adding files to the zip..."); + break; + case ZipProgressEventType.Adding_AfterAddEntry: + _numEntriesAdded++; + Console.WriteLine(String.Format("Adding file {0}/{1} :: {2}", + _numEntriesAdded, _numEntriesToAdd, e.CurrentEntry.FileName)); + break; + case ZipProgressEventType.Adding_Completed: + Console.WriteLine("Added all files"); + break; + } + } + + void CreateTheZip() + { + using (ZipFile zip = new ZipFile()) + { + zip.AddProgress += AddProgressHandler; + zip.AddDirectory(System.IO.Path.GetFileName(DirToZip)); + zip.Save(ZipFileToCreate); + } + } + + + + + + Private Sub AddProgressHandler(ByVal sender As Object, ByVal e As AddProgressEventArgs) + Select Case e.EventType + Case ZipProgressEventType.Adding_Started + Console.WriteLine("Adding files to the zip...") + Exit Select + Case ZipProgressEventType.Adding_AfterAddEntry + Console.WriteLine(String.Format("Adding file {0}", e.CurrentEntry.FileName)) + Exit Select + Case ZipProgressEventType.Adding_Completed + Console.WriteLine("Added all files") + Exit Select + End Select + End Sub + + Sub CreateTheZip() + Using zip as ZipFile = New ZipFile + AddHandler zip.AddProgress, AddressOf AddProgressHandler + zip.AddDirectory(System.IO.Path.GetFileName(DirToZip)) + zip.Save(ZipFileToCreate); + End Using + End Sub + + + + + + + + + + + + An event that is raised when an error occurs during open or read of files + while saving a zip archive. + + + + + Errors can occur as a file is being saved to the zip archive. For + example, the File.Open may fail, or a File.Read may fail, because of + lock conflicts or other reasons. If you add a handler to this event, + you can handle such errors in your own code. If you don't add a + handler, the library will throw an exception if it encounters an I/O + error during a call to Save(). + + + + Setting a handler implicitly sets to + ZipErrorAction.InvokeErrorEvent. + + + + The handler you add applies to all items that are + subsequently added to the ZipFile instance. If you set this + property after you have added items to the ZipFile, but before you + have called Save(), errors that occur while saving those items + will not cause the error handler to be invoked. + + + + If you want to handle any errors that occur with any entry in the zip + file using the same error handler, then add your error handler once, + before adding any entries to the zip archive. + + + + In the error handler method, you need to set the property on the + ZipErrorEventArgs.CurrentEntry. This communicates back to + DotNetZip what you would like to do with this particular error. Within + an error handler, if you set the ZipEntry.ZipErrorAction property + on the ZipEntry to ZipErrorAction.InvokeErrorEvent or if + you don't set it at all, the library will throw the exception. (It is the + same as if you had set the ZipEntry.ZipErrorAction property on the + ZipEntry to ZipErrorAction.Throw.) If you set the + ZipErrorEventArgs.Cancel to true, the entire Save() will be + canceled. + + + + In the case that you use ZipErrorAction.Skip, implying that + you want to skip the entry for which there's been an error, DotNetZip + tries to seek backwards in the output stream, and truncate all bytes + written on behalf of that particular entry. This works only if the + output stream is seekable. It will not work, for example, when using + ASPNET's Response.OutputStream. + + + + + + + This example shows how to use an event handler to handle + errors during save of the zip file. + + + public static void MyZipError(object sender, ZipErrorEventArgs e) + { + Console.WriteLine("Error saving {0}...", e.FileName); + Console.WriteLine(" Exception: {0}", e.exception); + ZipEntry entry = e.CurrentEntry; + string response = null; + // Ask the user whether he wants to skip this error or not + do + { + Console.Write("Retry, Skip, Throw, or Cancel ? (R/S/T/C) "); + response = Console.ReadLine(); + Console.WriteLine(); + + } while (response != null && + response[0]!='S' && response[0]!='s' && + response[0]!='R' && response[0]!='r' && + response[0]!='T' && response[0]!='t' && + response[0]!='C' && response[0]!='c'); + + e.Cancel = (response[0]=='C' || response[0]=='c'); + + if (response[0]=='S' || response[0]=='s') + entry.ZipErrorAction = ZipErrorAction.Skip; + else if (response[0]=='R' || response[0]=='r') + entry.ZipErrorAction = ZipErrorAction.Retry; + else if (response[0]=='T' || response[0]=='t') + entry.ZipErrorAction = ZipErrorAction.Throw; + } + + public void SaveTheFile() + { + string directoryToZip = "fodder"; + string directoryInArchive = "files"; + string zipFileToCreate = "Archive.zip"; + using (var zip = new ZipFile()) + { + // set the event handler before adding any entries + zip.ZipError += MyZipError; + zip.AddDirectory(directoryToZip, directoryInArchive); + zip.Save(zipFileToCreate); + } + } + + + + Private Sub MyZipError(ByVal sender As Object, ByVal e As Ionic.Zip.ZipErrorEventArgs) + ' At this point, the application could prompt the user for an action to take. + ' But in this case, this application will simply automatically skip the file, in case of error. + Console.WriteLine("Zip Error, entry {0}", e.CurrentEntry.FileName) + Console.WriteLine(" Exception: {0}", e.exception) + ' set the desired ZipErrorAction on the CurrentEntry to communicate that to DotNetZip + e.CurrentEntry.ZipErrorAction = Zip.ZipErrorAction.Skip + End Sub + + Public Sub SaveTheFile() + Dim directoryToZip As String = "fodder" + Dim directoryInArchive As String = "files" + Dim zipFileToCreate as String = "Archive.zip" + Using zipArchive As ZipFile = New ZipFile + ' set the event handler before adding any entries + AddHandler zipArchive.ZipError, AddressOf MyZipError + zipArchive.AddDirectory(directoryToZip, directoryInArchive) + zipArchive.Save(zipFileToCreate) + End Using + End Sub + + + + + + + + + Extracts all of the items in the zip archive, to the specified path in the + filesystem. The path can be relative or fully-qualified. + + + + + This method will extract all entries in the ZipFile to the + specified path. + + + + If an extraction of a file from the zip archive would overwrite an + existing file in the filesystem, the action taken is dictated by the + ExtractExistingFile property, which overrides any setting you may have + made on individual ZipEntry instances. By default, if you have not + set that property on the ZipFile instance, the entry will not + be extracted, the existing file will not be overwritten and an + exception will be thrown. To change this, set the property, or use the + overload that allows you to + specify an ExtractExistingFileAction parameter. + + + + The action to take when an extract would overwrite an existing file + applies to all entries. If you want to set this on a per-entry basis, + then you must use one of the ZipEntry.Extract methods. + + + + This method will send verbose output messages to the , if it is set on the ZipFile + instance. + + + + You may wish to take advantage of the ExtractProgress event. + + + + About timestamps: When extracting a file entry from a zip archive, the + extracted file gets the last modified time of the entry as stored in + the archive. The archive may also store extended file timestamp + information, including last accessed and created times. If these are + present in the ZipEntry, then the extracted file will also get + these times. + + + + A Directory entry is somewhat different. It will get the times as + described for a file entry, but, if there are file entries in the zip + archive that, when extracted, appear in the just-created directory, + then when those file entries are extracted, the last modified and last + accessed times of the directory will change, as a side effect. The + result is that after an extraction of a directory and a number of + files within the directory, the last modified and last accessed + timestamps on the directory will reflect the time that the last file + was extracted into the directory, rather than the time stored in the + zip archive for the directory. + + + + To compensate, when extracting an archive with ExtractAll, + DotNetZip will extract all the file and directory entries as described + above, but it will then make a second pass on the directories, and + reset the times on the directories to reflect what is stored in the + zip archive. + + + + This compensation is performed only within the context of an + ExtractAll. If you call ZipEntry.Extract on a directory + entry, the timestamps on directory in the filesystem will reflect the + times stored in the zip. If you then call ZipEntry.Extract on + a file entry, which is extracted into the directory, the timestamps on + the directory will be updated to the current time. + + + + + This example extracts all the entries in a zip archive file, to the + specified target directory. The extraction will overwrite any + existing files silently. + + + String TargetDirectory= "unpack"; + using(ZipFile zip= ZipFile.Read(ZipFileToExtract)) + { + zip.ExtractExistingFile= ExtractExistingFileAction.OverwriteSilently; + zip.ExtractAll(TargetDirectory); + } + + + + Dim TargetDirectory As String = "unpack" + Using zip As ZipFile = ZipFile.Read(ZipFileToExtract) + zip.ExtractExistingFile= ExtractExistingFileAction.OverwriteSilently + zip.ExtractAll(TargetDirectory) + End Using + + + + + + + + The path to which the contents of the zipfile will be extracted. + The path can be relative or fully-qualified. + + + + + + Extracts all of the items in the zip archive, to the specified path in the + filesystem, using the specified behavior when extraction would overwrite an + existing file. + + + + + + This method will extract all entries in the ZipFile to the specified + path. For an extraction that would overwrite an existing file, the behavior + is dictated by , which overrides any + setting you may have made on individual ZipEntry instances. + + + + The action to take when an extract would overwrite an existing file + applies to all entries. If you want to set this on a per-entry basis, + then you must use or one of the similar methods. + + + + Calling this method is equivalent to setting the property and then calling . + + + + This method will send verbose output messages to the + , if it is set on the ZipFile instance. + + + + + This example extracts all the entries in a zip archive file, to the + specified target directory. It does not overwrite any existing files. + + String TargetDirectory= "c:\\unpack"; + using(ZipFile zip= ZipFile.Read(ZipFileToExtract)) + { + zip.ExtractAll(TargetDirectory, ExtractExistingFileAction.DontOverwrite); + } + + + + Dim TargetDirectory As String = "c:\unpack" + Using zip As ZipFile = ZipFile.Read(ZipFileToExtract) + zip.ExtractAll(TargetDirectory, ExtractExistingFileAction.DontOverwrite) + End Using + + + + + The path to which the contents of the zipfile will be extracted. + The path can be relative or fully-qualified. + + + + The action to take if extraction would overwrite an existing file. + + + + + + Reads a zip file archive and returns the instance. + + + + + The stream is read using the default System.Text.Encoding, which is the + IBM437 codepage. + + + + + Thrown if the ZipFile cannot be read. The implementation of this method + relies on System.IO.File.OpenRead, which can throw a variety of exceptions, + including specific exceptions if a file is not found, an unauthorized access + exception, exceptions for poorly formatted filenames, and so on. + + + + The name of the zip archive to open. This can be a fully-qualified or relative + pathname. + + + . + + The instance read from the zip archive. + + + + + Reads a zip file archive from the named filesystem file using the + specified options. + + + + + This version of the Read() method allows the caller to pass + in a TextWriter an Encoding, via an instance of the + ReadOptions class. The ZipFile is read in using the + specified encoding for entries where UTF-8 encoding is not + explicitly specified. + + + + + + + This example shows how to read a zip file using the Big-5 Chinese + code page (950), and extract each entry in the zip file, while + sending status messages out to the Console. + + + + For this code to work as intended, the zipfile must have been + created using the big5 code page (CP950). This is typical, for + example, when using WinRar on a machine with CP950 set as the + default code page. In that case, the names of entries within the + Zip archive will be stored in that code page, and reading the zip + archive must be done using that code page. If the application did + not use the correct code page in ZipFile.Read(), then names of + entries within the zip archive would not be correctly retrieved. + + + + string zipToExtract = "MyArchive.zip"; + string extractDirectory = "extract"; + var options = new ReadOptions + { + StatusMessageWriter = System.Console.Out, + Encoding = System.Text.Encoding.GetEncoding(950) + }; + using (ZipFile zip = ZipFile.Read(zipToExtract, options)) + { + foreach (ZipEntry e in zip) + { + e.Extract(extractDirectory); + } + } + + + + + Dim zipToExtract as String = "MyArchive.zip" + Dim extractDirectory as String = "extract" + Dim options as New ReadOptions + options.Encoding = System.Text.Encoding.GetEncoding(950) + options.StatusMessageWriter = System.Console.Out + Using zip As ZipFile = ZipFile.Read(zipToExtract, options) + Dim e As ZipEntry + For Each e In zip + e.Extract(extractDirectory) + Next + End Using + + + + + + + + This example shows how to read a zip file using the default + code page, to remove entries that have a modified date before a given threshold, + sending status messages out to a StringWriter. + + + + var options = new ReadOptions + { + StatusMessageWriter = new System.IO.StringWriter() + }; + using (ZipFile zip = ZipFile.Read("PackedDocuments.zip", options)) + { + var Threshold = new DateTime(2007,7,4); + // We cannot remove the entry from the list, within the context of + // an enumeration of said list. + // So we add the doomed entry to a list to be removed later. + // pass 1: mark the entries for removal + var MarkedEntries = new System.Collections.Generic.List<ZipEntry>(); + foreach (ZipEntry e in zip) + { + if (e.LastModified < Threshold) + MarkedEntries.Add(e); + } + // pass 2: actually remove the entry. + foreach (ZipEntry zombie in MarkedEntries) + zip.RemoveEntry(zombie); + zip.Comment = "This archive has been updated."; + zip.Save(); + } + // can now use contents of sw, eg store in an audit log + + + + Dim options as New ReadOptions + options.StatusMessageWriter = New System.IO.StringWriter + Using zip As ZipFile = ZipFile.Read("PackedDocuments.zip", options) + Dim Threshold As New DateTime(2007, 7, 4) + ' We cannot remove the entry from the list, within the context of + ' an enumeration of said list. + ' So we add the doomed entry to a list to be removed later. + ' pass 1: mark the entries for removal + Dim MarkedEntries As New System.Collections.Generic.List(Of ZipEntry) + Dim e As ZipEntry + For Each e In zip + If (e.LastModified < Threshold) Then + MarkedEntries.Add(e) + End If + Next + ' pass 2: actually remove the entry. + Dim zombie As ZipEntry + For Each zombie In MarkedEntries + zip.RemoveEntry(zombie) + Next + zip.Comment = "This archive has been updated." + zip.Save + End Using + ' can now use contents of sw, eg store in an audit log + + + + + Thrown if the zipfile cannot be read. The implementation of + this method relies on System.IO.File.OpenRead, which + can throw a variety of exceptions, including specific + exceptions if a file is not found, an unauthorized access + exception, exceptions for poorly formatted filenames, and so + on. + + + + The name of the zip archive to open. + This can be a fully-qualified or relative pathname. + + + + The set of options to use when reading the zip file. + + + The ZipFile instance read from the zip archive. + + + + + + + Reads a zip file archive using the specified text encoding, the specified + TextWriter for status messages, and the specified ReadProgress event handler, + and returns the instance. + + + + The name of the zip archive to open. + This can be a fully-qualified or relative pathname. + + + + An event handler for Read operations. + + + + The System.IO.TextWriter to use for writing verbose status messages + during operations on the zip archive. A console application may wish to + pass System.Console.Out to get messages on the Console. A graphical + or headless application may wish to capture the messages in a different + TextWriter, such as a System.IO.StringWriter. + + + + The System.Text.Encoding to use when reading in the zip archive. Be + careful specifying the encoding. If the value you use here is not the same + as the Encoding used when the zip archive was created (possibly by a + different archiver) you will get unexpected results and possibly exceptions. + + + The instance read from the zip archive. + + + + + Reads a zip archive from a stream. + + + + + + When reading from a file, it's probably easier to just use + ZipFile.Read(String, ReadOptions). This + overload is useful when when the zip archive content is + available from an already-open stream. The stream must be + open and readable and seekable when calling this method. The + stream is left open when the reading is completed. + + + + Using this overload, the stream is read using the default + System.Text.Encoding, which is the IBM437 + codepage. If you want to specify the encoding to use when + reading the zipfile content, see + ZipFile.Read(Stream, ReadOptions). This + + + + Reading of zip content begins at the current position in the + stream. This means if you have a stream that concatenates + regular data and zip data, if you position the open, readable + stream at the start of the zip data, you will be able to read + the zip archive using this constructor, or any of the ZipFile + constructors that accept a as + input. Some examples of where this might be useful: the zip + content is concatenated at the end of a regular EXE file, as + some self-extracting archives do. (Note: SFX files produced + by DotNetZip do not work this way; they can be read as normal + ZIP files). Another example might be a stream being read from + a database, where the zip content is embedded within an + aggregate stream of data. + + + + + + + This example shows how to Read zip content from a stream, and + extract one entry into a different stream. In this example, + the filename "NameOfEntryInArchive.doc", refers only to the + name of the entry within the zip archive. A file by that + name is not created in the filesystem. The I/O is done + strictly with the given streams. + + + + using (ZipFile zip = ZipFile.Read(InputStream)) + { + zip.Extract("NameOfEntryInArchive.doc", OutputStream); + } + + + + Using zip as ZipFile = ZipFile.Read(InputStream) + zip.Extract("NameOfEntryInArchive.doc", OutputStream) + End Using + + + + the stream containing the zip data. + + The ZipFile instance read from the stream + + + + + Reads a zip file archive from the given stream using the + specified options. + + + + + + When reading from a file, it's probably easier to just use + ZipFile.Read(String, ReadOptions). This + overload is useful when when the zip archive content is + available from an already-open stream. The stream must be + open and readable and seekable when calling this method. The + stream is left open when the reading is completed. + + + + Reading of zip content begins at the current position in the + stream. This means if you have a stream that concatenates + regular data and zip data, if you position the open, readable + stream at the start of the zip data, you will be able to read + the zip archive using this constructor, or any of the ZipFile + constructors that accept a as + input. Some examples of where this might be useful: the zip + content is concatenated at the end of a regular EXE file, as + some self-extracting archives do. (Note: SFX files produced + by DotNetZip do not work this way; they can be read as normal + ZIP files). Another example might be a stream being read from + a database, where the zip content is embedded within an + aggregate stream of data. + + + + the stream containing the zip data. + + + The set of options to use when reading the zip file. + + + + Thrown if the zip archive cannot be read. + + + The ZipFile instance read from the stream. + + + + + + + Reads a zip archive from a stream, using the specified text Encoding, the + specified TextWriter for status messages, + and the specified ReadProgress event handler. + + + + + Reading of zip content begins at the current position in the stream. This + means if you have a stream that concatenates regular data and zip data, if + you position the open, readable stream at the start of the zip data, you + will be able to read the zip archive using this constructor, or any of the + ZipFile constructors that accept a as + input. Some examples of where this might be useful: the zip content is + concatenated at the end of a regular EXE file, as some self-extracting + archives do. (Note: SFX files produced by DotNetZip do not work this + way). Another example might be a stream being read from a database, where + the zip content is embedded within an aggregate stream of data. + + + + the stream containing the zip data. + + + The System.IO.TextWriter to which verbose status messages are written + during operations on the ZipFile. For example, in a console + application, System.Console.Out works, and will get a message for each entry + added to the ZipFile. If the TextWriter is null, no verbose messages + are written. + + + + The text encoding to use when reading entries that do not have the UTF-8 + encoding bit set. Be careful specifying the encoding. If the value you use + here is not the same as the Encoding used when the zip archive was created + (possibly by a different archiver) you will get unexpected results and + possibly exceptions. See the + property for more information. + + + + An event handler for Read operations. + + + an instance of ZipFile + + + + Checks the given file to see if it appears to be a valid zip file. + + + + + Calling this method is equivalent to calling with the testExtract parameter set to false. + + + + The file to check. + true if the file appears to be a zip file. + + + + Checks a file to see if it is a valid zip file. + + + + + This method opens the specified zip file, reads in the zip archive, + verifying the ZIP metadata as it reads. + + + + If everything succeeds, then the method returns true. If anything fails - + for example if an incorrect signature or CRC is found, indicating a + corrupt file, the the method returns false. This method also returns + false for a file that does not exist. + + + + If is true, as part of its check, this + method reads in the content for each entry, expands it, and checks CRCs. + This provides an additional check beyond verifying the zip header and + directory data. + + + + If is true, and if any of the zip entries + are protected with a password, this method will return false. If you want + to verify a ZipFile that has entries which are protected with a + password, you will need to do that manually. + + + + + The zip file to check. + true if the caller wants to extract each entry. + true if the file contains a valid zip file. + + + + Checks a stream to see if it contains a valid zip archive. + + + + + This method reads the zip archive contained in the specified stream, verifying + the ZIP metadata as it reads. If testExtract is true, this method also extracts + each entry in the archive, dumping all the bits into . + + + + If everything succeeds, then the method returns true. If anything fails - + for example if an incorrect signature or CRC is found, indicating a corrupt + file, the the method returns false. This method also returns false for a + file that does not exist. + + + + If testExtract is true, this method reads in the content for each + entry, expands it, and checks CRCs. This provides an additional check + beyond verifying the zip header data. + + + + If testExtract is true, and if any of the zip entries are protected + with a password, this method will return false. If you want to verify a + ZipFile that has entries which are protected with a password, you will need + to do that manually. + + + + + + The stream to check. + true if the caller wants to extract each entry. + true if the stream contains a valid zip archive. + + + + Delete file with retry on UnauthorizedAccessException. + + + + + When calling File.Delete() on a file that has been "recently" + created, the call sometimes fails with + UnauthorizedAccessException. This method simply retries the Delete 3 + times with a sleep between tries. + + + + the name of the file to be deleted + + + + Saves the Zip archive to a file, specified by the Name property of the + ZipFile. + + + + + The ZipFile instance is written to storage, typically a zip file + in a filesystem, only when the caller calls Save. In the typical + case, the Save operation writes the zip content to a temporary file, and + then renames the temporary file to the desired name. If necessary, this + method will delete a pre-existing file before the rename. + + + + The property is specified either explicitly, + or implicitly using one of the parameterized ZipFile constructors. For + COM Automation clients, the Name property must be set explicitly, + because COM Automation clients cannot call parameterized constructors. + + + + When using a filesystem file for the Zip output, it is possible to call + Save multiple times on the ZipFile instance. With each + call the zip content is re-written to the same output file. + + + + Data for entries that have been added to the ZipFile instance is + written to the output when the Save method is called. This means + that the input streams for those entries must be available at the time + the application calls Save. If, for example, the application + adds entries with AddEntry using a dynamically-allocated + MemoryStream, the memory stream must not have been disposed + before the call to Save. See the property for more discussion of the + availability requirements of the input stream for an entry, and an + approach for providing just-in-time stream lifecycle management. + + + + + + + + Thrown if you haven't specified a location or stream for saving the zip, + either in the constructor or by setting the Name property, or if you try + to save a regular zip archive to a filename with a .exe extension. + + + + Thrown if or is non-zero, and the number + of segments that would be generated for the spanned zip file during the + save operation exceeds 99. If this happens, you need to increase the + segment size. + + + + + + Save the file to a new zipfile, with the given name. + + + + + This method allows the application to explicitly specify the name of the zip + file when saving. Use this when creating a new zip file, or when + updating a zip archive. + + + + An application can also save a zip archive in several places by calling this + method multiple times in succession, with different filenames. + + + + The ZipFile instance is written to storage, typically a zip file in a + filesystem, only when the caller calls Save. The Save operation writes + the zip content to a temporary file, and then renames the temporary file + to the desired name. If necessary, this method will delete a pre-existing file + before the rename. + + + + + + Thrown if you specify a directory for the filename. + + + + The name of the zip archive to save to. Existing files will + be overwritten with great prejudice. + + + + This example shows how to create and Save a zip file. + + using (ZipFile zip = new ZipFile()) + { + zip.AddDirectory(@"c:\reports\January"); + zip.Save("January.zip"); + } + + + + Using zip As New ZipFile() + zip.AddDirectory("c:\reports\January") + zip.Save("January.zip") + End Using + + + + + + This example shows how to update a zip file. + + using (ZipFile zip = ZipFile.Read("ExistingArchive.zip")) + { + zip.AddFile("NewData.csv"); + zip.Save("UpdatedArchive.zip"); + } + + + + Using zip As ZipFile = ZipFile.Read("ExistingArchive.zip") + zip.AddFile("NewData.csv") + zip.Save("UpdatedArchive.zip") + End Using + + + + + + + Save the zip archive to the specified stream. + + + + + The ZipFile instance is written to storage - typically a zip file + in a filesystem, but using this overload, the storage can be anything + accessible via a writable stream - only when the caller calls Save. + + + + Use this method to save the zip content to a stream directly. A common + scenario is an ASP.NET application that dynamically generates a zip file + and allows the browser to download it. The application can call + Save(Response.OutputStream) to write a zipfile directly to the + output stream, without creating a zip file on the disk on the ASP.NET + server. + + + + Be careful when saving a file to a non-seekable stream, including + Response.OutputStream. When DotNetZip writes to a non-seekable + stream, the zip archive is formatted in such a way that may not be + compatible with all zip tools on all platforms. It's a perfectly legal + and compliant zip file, but some people have reported problems opening + files produced this way using the Mac OS archive utility. + + + + + + + This example saves the zipfile content into a MemoryStream, and + then gets the array of bytes from that MemoryStream. + + + using (var zip = new Ionic.Zip.ZipFile()) + { + zip.CompressionLevel= Ionic.Zlib.CompressionLevel.BestCompression; + zip.Password = "VerySecret."; + zip.Encryption = EncryptionAlgorithm.WinZipAes128; + zip.AddFile(sourceFileName); + MemoryStream output = new MemoryStream(); + zip.Save(output); + + byte[] zipbytes = output.ToArray(); + } + + + + + + This example shows a pitfall you should avoid. DO NOT read + from a stream, then try to save to the same stream. DO + NOT DO THIS: + + + + using (var fs = new FileStream(filename, FileMode.Open)) + { + using (var zip = Ionic.Zip.ZipFile.Read(inputStream)) + { + zip.AddEntry("Name1.txt", "this is the content"); + zip.Save(inputStream); // NO NO NO!! + } + } + + + + Better like this: + + + + using (var zip = Ionic.Zip.ZipFile.Read(filename)) + { + zip.AddEntry("Name1.txt", "this is the content"); + zip.Save(); // YES! + } + + + + + + The System.IO.Stream to write to. It must be + writable. If you created the ZipFile instance by calling + ZipFile.Read(), this stream must not be the same stream + you passed to ZipFile.Read(). + + + + + Adds to the ZipFile a set of files from the current working directory on + disk, that conform to the specified criteria. + + + + + This method selects files from the the current working directory matching + the specified criteria, and adds them to the ZipFile. + + + + Specify the criteria in statements of 3 elements: a noun, an operator, and + a value. Consider the string "name != *.doc" . The noun is "name". The + operator is "!=", implying "Not Equal". The value is "*.doc". That + criterion, in English, says "all files with a name that does not end in + the .doc extension." + + + + Supported nouns include "name" (or "filename") for the filename; "atime", + "mtime", and "ctime" for last access time, last modfied time, and created + time of the file, respectively; "attributes" (or "attrs") for the file + attributes; "size" (or "length") for the file length (uncompressed), and + "type" for the type of object, either a file or a directory. The + "attributes", "name" and "type" nouns both support = and != as operators. + The "size", "atime", "mtime", and "ctime" nouns support = and !=, and + >, >=, <, <= as well. The times are taken to be expressed in + local time. + + + + Specify values for the file attributes as a string with one or more of the + characters H,R,S,A,I,L in any order, implying file attributes of Hidden, + ReadOnly, System, Archive, NotContextIndexed, and ReparsePoint (symbolic + link) respectively. + + + + To specify a time, use YYYY-MM-DD-HH:mm:ss or YYYY/MM/DD-HH:mm:ss as the + format. If you omit the HH:mm:ss portion, it is assumed to be 00:00:00 + (midnight). + + + + The value for a size criterion is expressed in integer quantities of bytes, + kilobytes (use k or kb after the number), megabytes (m or mb), or gigabytes + (g or gb). + + + + The value for a name is a pattern to match against the filename, potentially + including wildcards. The pattern follows CMD.exe glob rules: * implies one + or more of any character, while ? implies one character. If the name + pattern contains any slashes, it is matched to the entire filename, + including the path; otherwise, it is matched against only the filename + without the path. This means a pattern of "*\*.*" matches all files one + directory level deep, while a pattern of "*.*" matches all files in all + directories. + + + + To specify a name pattern that includes spaces, use single quotes around the + pattern. A pattern of "'* *.*'" will match all files that have spaces in + the filename. The full criteria string for that would be "name = '* *.*'" . + + + + The value for a type criterion is either F (implying a file) or D (implying + a directory). + + + + Some examples: + + + + + criteria + Files retrieved + + + + name != *.xls + any file with an extension that is not .xls + + + + + name = *.mp3 + any file with a .mp3 extension. + + + + + *.mp3 + (same as above) any file with a .mp3 extension. + + + + + attributes = A + all files whose attributes include the Archive bit. + + + + + attributes != H + all files whose attributes do not include the Hidden bit. + + + + + mtime > 2009-01-01 + all files with a last modified time after January 1st, 2009. + + + + + size > 2gb + all files whose uncompressed size is greater than 2gb. + + + + + type = D + all directories in the filesystem. + + + + + + You can combine criteria with the conjunctions AND or OR. Using a string + like "name = *.txt AND size >= 100k" for the selectionCriteria retrieves + entries whose names end in .txt, and whose uncompressed size is greater than + or equal to 100 kilobytes. + + + + For more complex combinations of criteria, you can use parenthesis to group + clauses in the boolean logic. Without parenthesis, the precedence of the + criterion atoms is determined by order of appearance. Unlike the C# + language, the AND conjunction does not take precendence over the logical OR. + This is important only in strings that contain 3 or more criterion atoms. + In other words, "name = *.txt and size > 1000 or attributes = H" implies + "((name = *.txt AND size > 1000) OR attributes = H)" while "attributes = + H OR name = *.txt and size > 1000" evaluates to "((attributes = H OR name + = *.txt) AND size > 1000)". When in doubt, use parenthesis. + + + + Using time properties requires some extra care. If you want to retrieve all + entries that were last updated on 2009 February 14, specify a time range + like so:"mtime >= 2009-02-14 AND mtime < 2009-02-15". Read this to + say: all files updated after 12:00am on February 14th, until 12:00am on + February 15th. You can use the same bracketing approach to specify any time + period - a year, a month, a week, and so on. + + + + The syntax allows one special case: if you provide a string with no spaces, it is + treated as a pattern to match for the filename. Therefore a string like "*.xls" + will be equivalent to specifying "name = *.xls". + + + + There is no logic in this method that insures that the file inclusion + criteria are internally consistent. For example, it's possible to specify + criteria that says the file must have a size of less than 100 bytes, as well + as a size that is greater than 1000 bytes. Obviously no file will ever + satisfy such criteria, but this method does not detect such logical + inconsistencies. The caller is responsible for insuring the criteria are + sensible. + + + + Using this method, the file selection does not recurse into + subdirectories, and the full path of the selected files is included in the + entries added into the zip archive. If you don't like these behaviors, + see the other overloads of this method. + + + + + This example zips up all *.csv files in the current working directory. + + using (ZipFile zip = new ZipFile()) + { + // To just match on filename wildcards, + // use the shorthand form of the selectionCriteria string. + zip.AddSelectedFiles("*.csv"); + zip.Save(PathToZipArchive); + } + + + Using zip As ZipFile = New ZipFile() + zip.AddSelectedFiles("*.csv") + zip.Save(PathToZipArchive) + End Using + + + + The criteria for file selection + + + + Adds to the ZipFile a set of files from the disk that conform to the + specified criteria, optionally recursing into subdirectories. + + + + + This method selects files from the the current working directory matching + the specified criteria, and adds them to the ZipFile. If + recurseDirectories is true, files are also selected from + subdirectories, and the directory structure in the filesystem is + reproduced in the zip archive, rooted at the current working directory. + + + + Using this method, the full path of the selected files is included in the + entries added into the zip archive. If you don't want this behavior, use + one of the overloads of this method that allows the specification of a + directoryInArchive. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + + + + This example zips up all *.xml files in the current working directory, or any + subdirectory, that are larger than 1mb. + + + using (ZipFile zip = new ZipFile()) + { + // Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.xml and size > 1024kb", true); + zip.Save(PathToZipArchive); + } + + + Using zip As ZipFile = New ZipFile() + ' Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.xml and size > 1024kb", true) + zip.Save(PathToZipArchive) + End Using + + + + The criteria for file selection + + + If true, the file selection will recurse into subdirectories. + + + + + Adds to the ZipFile a set of files from a specified directory in the + filesystem, that conform to the specified criteria. + + + + + This method selects files that conform to the specified criteria, from the + the specified directory on disk, and adds them to the ZipFile. The search + does not recurse into subdirectores. + + + + Using this method, the full filesystem path of the files on disk is + reproduced on the entries added to the zip file. If you don't want this + behavior, use one of the other overloads of this method. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + + + + This example zips up all *.xml files larger than 1mb in the directory + given by "d:\rawdata". + + + using (ZipFile zip = new ZipFile()) + { + // Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.xml and size > 1024kb", "d:\\rawdata"); + zip.Save(PathToZipArchive); + } + + + + Using zip As ZipFile = New ZipFile() + ' Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.xml and size > 1024kb", "d:\rawdata) + zip.Save(PathToZipArchive) + End Using + + + + The criteria for file selection + + + The name of the directory on the disk from which to select files. + + + + + Adds to the ZipFile a set of files from the specified directory on disk, + that conform to the specified criteria. + + + + + + This method selects files from the the specified disk directory matching + the specified selection criteria, and adds them to the ZipFile. If + recurseDirectories is true, files are also selected from + subdirectories. + + + + The full directory structure in the filesystem is reproduced on the + entries added to the zip archive. If you don't want this behavior, use + one of the overloads of this method that allows the specification of a + directoryInArchive. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + + + This example zips up all *.csv files in the "files" directory, or any + subdirectory, that have been saved since 2009 February 14th. + + + using (ZipFile zip = new ZipFile()) + { + // Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.csv and mtime > 2009-02-14", "files", true); + zip.Save(PathToZipArchive); + } + + + Using zip As ZipFile = New ZipFile() + ' Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.csv and mtime > 2009-02-14", "files", true) + zip.Save(PathToZipArchive) + End Using + + + + + This example zips up all files in the current working + directory, and all its child directories, except those in + the excludethis subdirectory. + + Using Zip As ZipFile = New ZipFile(zipfile) + Zip.AddSelectedFfiles("name != 'excludethis\*.*'", datapath, True) + Zip.Save() + End Using + + + + The criteria for file selection + + + The filesystem path from which to select files. + + + + If true, the file selection will recurse into subdirectories. + + + + + Adds to the ZipFile a selection of files from the specified directory on + disk, that conform to the specified criteria, and using a specified root + path for entries added to the zip archive. + + + + + This method selects files from the specified disk directory matching the + specified selection criteria, and adds those files to the ZipFile, using + the specified directory path in the archive. The search does not recurse + into subdirectories. For details on the syntax for the selectionCriteria + parameter, see . + + + + + + + This example zips up all *.psd files in the "photos" directory that have + been saved since 2009 February 14th, and puts them all in a zip file, + using the directory name of "content" in the zip archive itself. When the + zip archive is unzipped, the folder containing the .psd files will be + named "content". + + + using (ZipFile zip = new ZipFile()) + { + // Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.psd and mtime > 2009-02-14", "photos", "content"); + zip.Save(PathToZipArchive); + } + + + Using zip As ZipFile = New ZipFile + zip.AddSelectedFiles("name = *.psd and mtime > 2009-02-14", "photos", "content") + zip.Save(PathToZipArchive) + End Using + + + + + The criteria for selection of files to add to the ZipFile. + + + + The path to the directory in the filesystem from which to select files. + + + + Specifies a directory path to use to in place of the + directoryOnDisk. This path may, or may not, correspond to a real + directory in the current filesystem. If the files within the zip are + later extracted, this is the path used for the extracted file. Passing + null (nothing in VB) will use the path on the file name, if any; in other + words it would use directoryOnDisk, plus any subdirectory. Passing + the empty string ("") will insert the item at the root path within the + archive. + + + + + Adds to the ZipFile a selection of files from the specified directory on + disk, that conform to the specified criteria, optionally recursing through + subdirectories, and using a specified root path for entries added to the + zip archive. + + + + This method selects files from the specified disk directory that match the + specified selection criteria, and adds those files to the ZipFile, using + the specified directory path in the archive. If recurseDirectories + is true, files are also selected from subdirectories, and the directory + structure in the filesystem is reproduced in the zip archive, rooted at + the directory specified by directoryOnDisk. For details on the + syntax for the selectionCriteria parameter, see . + + + + + This example zips up all files that are NOT *.pst files, in the current + working directory and any subdirectories. + + + using (ZipFile zip = new ZipFile()) + { + zip.AddSelectedFiles("name != *.pst", SourceDirectory, "backup", true); + zip.Save(PathToZipArchive); + } + + + Using zip As ZipFile = New ZipFile + zip.AddSelectedFiles("name != *.pst", SourceDirectory, "backup", true) + zip.Save(PathToZipArchive) + End Using + + + + + The criteria for selection of files to add to the ZipFile. + + + + The path to the directory in the filesystem from which to select files. + + + + Specifies a directory path to use to in place of the + directoryOnDisk. This path may, or may not, correspond to a real + directory in the current filesystem. If the files within the zip are + later extracted, this is the path used for the extracted file. Passing + null (nothing in VB) will use the path on the file name, if any; in other + words it would use directoryOnDisk, plus any subdirectory. Passing + the empty string ("") will insert the item at the root path within the + archive. + + + + If true, the method also scans subdirectories for files matching the + criteria. + + + + + Updates the ZipFile with a selection of files from the disk that conform + to the specified criteria. + + + + This method selects files from the specified disk directory that match the + specified selection criteria, and Updates the ZipFile with those + files, using the specified directory path in the archive. If + recurseDirectories is true, files are also selected from + subdirectories, and the directory structure in the filesystem is + reproduced in the zip archive, rooted at the directory specified by + directoryOnDisk. For details on the syntax for the + selectionCriteria parameter, see . + + + + The criteria for selection of files to add to the ZipFile. + + + + The path to the directory in the filesystem from which to select files. + + + + Specifies a directory path to use to in place of the + directoryOnDisk. This path may, or may not, correspond to a + real directory in the current filesystem. If the files within the zip + are later extracted, this is the path used for the extracted file. + Passing null (nothing in VB) will use the path on the file name, if + any; in other words it would use directoryOnDisk, plus any + subdirectory. Passing the empty string ("") will insert the item at + the root path within the archive. + + + + If true, the method also scans subdirectories for files matching the criteria. + + + + + + + Retrieve entries from the zipfile by specified criteria. + + + + + This method allows callers to retrieve the collection of entries from the zipfile + that fit the specified criteria. The criteria are described in a string format, and + can include patterns for the filename; constraints on the size of the entry; + constraints on the last modified, created, or last accessed time for the file + described by the entry; or the attributes of the entry. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + This method is intended for use with a ZipFile that has been read from storage. + When creating a new ZipFile, this method will work only after the ZipArchive has + been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip + archive from storage.) Calling SelectEntries on a ZipFile that has not yet been + saved will deliver undefined results. + + + + + Thrown if selectionCriteria has an invalid syntax. + + + + This example selects all the PhotoShop files from within an archive, and extracts them + to the current working directory. + + using (ZipFile zip1 = ZipFile.Read(ZipFileName)) + { + var PhotoShopFiles = zip1.SelectEntries("*.psd"); + foreach (ZipEntry psd in PhotoShopFiles) + { + psd.Extract(); + } + } + + + Using zip1 As ZipFile = ZipFile.Read(ZipFileName) + Dim PhotoShopFiles as ICollection(Of ZipEntry) + PhotoShopFiles = zip1.SelectEntries("*.psd") + Dim psd As ZipEntry + For Each psd In PhotoShopFiles + psd.Extract + Next + End Using + + + the string that specifies which entries to select + a collection of ZipEntry objects that conform to the inclusion spec + + + + Retrieve entries from the zipfile by specified criteria. + + + + + This method allows callers to retrieve the collection of entries from the zipfile + that fit the specified criteria. The criteria are described in a string format, and + can include patterns for the filename; constraints on the size of the entry; + constraints on the last modified, created, or last accessed time for the file + described by the entry; or the attributes of the entry. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + This method is intended for use with a ZipFile that has been read from storage. + When creating a new ZipFile, this method will work only after the ZipArchive has + been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip + archive from storage.) Calling SelectEntries on a ZipFile that has not yet been + saved will deliver undefined results. + + + + + Thrown if selectionCriteria has an invalid syntax. + + + + + using (ZipFile zip1 = ZipFile.Read(ZipFileName)) + { + var UpdatedPhotoShopFiles = zip1.SelectEntries("*.psd", "UpdatedFiles"); + foreach (ZipEntry e in UpdatedPhotoShopFiles) + { + // prompt for extract here + if (WantExtract(e.FileName)) + e.Extract(); + } + } + + + Using zip1 As ZipFile = ZipFile.Read(ZipFileName) + Dim UpdatedPhotoShopFiles As ICollection(Of ZipEntry) = zip1.SelectEntries("*.psd", "UpdatedFiles") + Dim e As ZipEntry + For Each e In UpdatedPhotoShopFiles + ' prompt for extract here + If Me.WantExtract(e.FileName) Then + e.Extract + End If + Next + End Using + + + the string that specifies which entries to select + + + the directory in the archive from which to select entries. If null, then + all directories in the archive are used. + + + a collection of ZipEntry objects that conform to the inclusion spec + + + + Remove entries from the zipfile by specified criteria. + + + + + This method allows callers to remove the collection of entries from the zipfile + that fit the specified criteria. The criteria are described in a string format, and + can include patterns for the filename; constraints on the size of the entry; + constraints on the last modified, created, or last accessed time for the file + described by the entry; or the attributes of the entry. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + This method is intended for use with a ZipFile that has been read from storage. + When creating a new ZipFile, this method will work only after the ZipArchive has + been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip + archive from storage.) Calling SelectEntries on a ZipFile that has not yet been + saved will deliver undefined results. + + + + + Thrown if selectionCriteria has an invalid syntax. + + + + This example removes all entries in a zip file that were modified prior to January 1st, 2008. + + using (ZipFile zip1 = ZipFile.Read(ZipFileName)) + { + // remove all entries from prior to Jan 1, 2008 + zip1.RemoveEntries("mtime < 2008-01-01"); + // don't forget to save the archive! + zip1.Save(); + } + + + Using zip As ZipFile = ZipFile.Read(ZipFileName) + ' remove all entries from prior to Jan 1, 2008 + zip1.RemoveEntries("mtime < 2008-01-01") + ' do not forget to save the archive! + zip1.Save + End Using + + + the string that specifies which entries to select + the number of entries removed + + + + Remove entries from the zipfile by specified criteria, and within the specified + path in the archive. + + + + + This method allows callers to remove the collection of entries from the zipfile + that fit the specified criteria. The criteria are described in a string format, and + can include patterns for the filename; constraints on the size of the entry; + constraints on the last modified, created, or last accessed time for the file + described by the entry; or the attributes of the entry. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + This method is intended for use with a ZipFile that has been read from storage. + When creating a new ZipFile, this method will work only after the ZipArchive has + been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip + archive from storage.) Calling SelectEntries on a ZipFile that has not yet been + saved will deliver undefined results. + + + + + Thrown if selectionCriteria has an invalid syntax. + + + + + using (ZipFile zip1 = ZipFile.Read(ZipFileName)) + { + // remove all entries from prior to Jan 1, 2008 + zip1.RemoveEntries("mtime < 2008-01-01", "documents"); + // a call to ZipFile.Save will make the modifications permanent + zip1.Save(); + } + + + Using zip As ZipFile = ZipFile.Read(ZipFileName) + ' remove all entries from prior to Jan 1, 2008 + zip1.RemoveEntries("mtime < 2008-01-01", "documents") + ' a call to ZipFile.Save will make the modifications permanent + zip1.Save + End Using + + + + the string that specifies which entries to select + + the directory in the archive from which to select entries. If null, then + all directories in the archive are used. + + the number of entries removed + + + + Selects and Extracts a set of Entries from the ZipFile. + + + + + The entries are extracted into the current working directory. + + + + If any of the files to be extracted already exist, then the action taken is as + specified in the property on the + corresponding ZipEntry instance. By default, the action taken in this case is to + throw an exception. + + + + For information on the syntax of the selectionCriteria string, + see . + + + + + This example shows how extract all XML files modified after 15 January 2009. + + using (ZipFile zip = ZipFile.Read(zipArchiveName)) + { + zip.ExtractSelectedEntries("name = *.xml and mtime > 2009-01-15"); + } + + + the selection criteria for entries to extract. + + + + + + Selects and Extracts a set of Entries from the ZipFile. + + + + + The entries are extracted into the current working directory. When extraction would would + overwrite an existing filesystem file, the action taken is as specified in the + parameter. + + + + For information on the syntax of the string describing the entry selection criteria, + see . + + + + + This example shows how extract all XML files modified after 15 January 2009, + overwriting any existing files. + + using (ZipFile zip = ZipFile.Read(zipArchiveName)) + { + zip.ExtractSelectedEntries("name = *.xml and mtime > 2009-01-15", + ExtractExistingFileAction.OverwriteSilently); + } + + + + the selection criteria for entries to extract. + + + The action to take if extraction would overwrite an existing file. + + + + + Selects and Extracts a set of Entries from the ZipFile. + + + + + The entries are selected from the specified directory within the archive, and then + extracted into the current working directory. + + + + If any of the files to be extracted already exist, then the action taken is as + specified in the property on the + corresponding ZipEntry instance. By default, the action taken in this case is to + throw an exception. + + + + For information on the syntax of the string describing the entry selection criteria, + see . + + + + + This example shows how extract all XML files modified after 15 January 2009, + and writes them to the "unpack" directory. + + using (ZipFile zip = ZipFile.Read(zipArchiveName)) + { + zip.ExtractSelectedEntries("name = *.xml and mtime > 2009-01-15","unpack"); + } + + + + the selection criteria for entries to extract. + + + the directory in the archive from which to select entries. If null, then + all directories in the archive are used. + + + + + + + Selects and Extracts a set of Entries from the ZipFile. + + + + + The entries are extracted into the specified directory. If any of the files to be + extracted already exist, an exception will be thrown. + + + For information on the syntax of the string describing the entry selection criteria, + see . + + + + the selection criteria for entries to extract. + + + the directory in the archive from which to select entries. If null, then + all directories in the archive are used. + + + + the directory on the disk into which to extract. It will be created + if it does not exist. + + + + + Selects and Extracts a set of Entries from the ZipFile. + + + + + The entries are extracted into the specified directory. When extraction would would + overwrite an existing filesystem file, the action taken is as specified in the + parameter. + + + + For information on the syntax of the string describing the entry selection criteria, + see . + + + + + This example shows how extract all files with an XML extension or with a size larger than 100,000 bytes, + and puts them in the unpack directory. For any files that already exist in + that destination directory, they will not be overwritten. + + using (ZipFile zip = ZipFile.Read(zipArchiveName)) + { + zip.ExtractSelectedEntries("name = *.xml or size > 100000", + null, + "unpack", + ExtractExistingFileAction.DontOverwrite); + } + + + + the selection criteria for entries to extract. + + + The directory on the disk into which to extract. It will be created if it does not exist. + + + + The directory in the archive from which to select entries. If null, then + all directories in the archive are used. + + + + The action to take if extraction would overwrite an existing file. + + + + + + + + Static constructor for ZipFile + + + Code Pages 437 and 1252 for English are same + Code Page 1252 Windows Latin 1 (ANSI) - + Code Page 437 MS-DOS Latin US - + + + + + The default text encoding used in zip archives. It is numeric 437, also + known as IBM437. + + + + + + Generic IEnumerator support, for use of a ZipFile in an enumeration. + + + + You probably do not want to call GetEnumerator explicitly. Instead + it is implicitly called when you use a loop in C#, or a + For Each loop in VB.NET. + + + + This example reads a zipfile of a given name, then enumerates the + entries in that zip file, and displays the information about each + entry on the Console. + + using (ZipFile zip = ZipFile.Read(zipfile)) + { + bool header = true; + foreach (ZipEntry e in zip) + { + if (header) + { + System.Console.WriteLine("Zipfile: {0}", zip.Name); + System.Console.WriteLine("Version Needed: 0x{0:X2}", e.VersionNeeded); + System.Console.WriteLine("BitField: 0x{0:X2}", e.BitField); + System.Console.WriteLine("Compression Method: 0x{0:X2}", e.CompressionMethod); + System.Console.WriteLine("\n{1,-22} {2,-6} {3,4} {4,-8} {0}", + "Filename", "Modified", "Size", "Ratio", "Packed"); + System.Console.WriteLine(new System.String('-', 72)); + header = false; + } + + System.Console.WriteLine("{1,-22} {2,-6} {3,4:F0}% {4,-8} {0}", + e.FileName, + e.LastModified.ToString("yyyy-MM-dd HH:mm:ss"), + e.UncompressedSize, + e.CompressionRatio, + e.CompressedSize); + + e.Extract(); + } + } + + + + Dim ZipFileToExtract As String = "c:\foo.zip" + Using zip As ZipFile = ZipFile.Read(ZipFileToExtract) + Dim header As Boolean = True + Dim e As ZipEntry + For Each e In zip + If header Then + Console.WriteLine("Zipfile: {0}", zip.Name) + Console.WriteLine("Version Needed: 0x{0:X2}", e.VersionNeeded) + Console.WriteLine("BitField: 0x{0:X2}", e.BitField) + Console.WriteLine("Compression Method: 0x{0:X2}", e.CompressionMethod) + Console.WriteLine(ChrW(10) & "{1,-22} {2,-6} {3,4} {4,-8} {0}", _ + "Filename", "Modified", "Size", "Ratio", "Packed" ) + Console.WriteLine(New String("-"c, 72)) + header = False + End If + Console.WriteLine("{1,-22} {2,-6} {3,4:F0}% {4,-8} {0}", _ + e.FileName, _ + e.LastModified.ToString("yyyy-MM-dd HH:mm:ss"), _ + e.UncompressedSize, _ + e.CompressionRatio, _ + e.CompressedSize ) + e.Extract + Next + End Using + + + + A generic enumerator suitable for use within a foreach loop. + + + + An IEnumerator, for use of a ZipFile in a foreach construct. + + + + This method is included for COM support. An application generally does not call + this method directly. It is called implicitly by COM clients when enumerating + the entries in the ZipFile instance. In VBScript, this is done with a For Each + statement. In Javascript, this is done with new Enumerator(zipfile). + + + + The IEnumerator over the entries in the ZipFile. + + + + + This class exposes a set of COM-accessible wrappers for static + methods available on the ZipFile class. You don't need this + class unless you are using DotNetZip from a COM environment. + + + + + A wrapper for ZipFile.IsZipFile(string) + + The filename to of the zip file to check. + true if the file contains a valid zip file. + + + + A wrapper for ZipFile.IsZipFile(string, bool) + + + We cannot use "overloaded" Method names in COM interop. + So, here, we use a unique name. + + The filename to of the zip file to check. + true if the file contains a valid zip file. + + + + A wrapper for ZipFile.CheckZip(string) + + The filename to of the zip file to check. + + true if the named zip file checks OK. Otherwise, false. + + + + A COM-friendly wrapper for the static method . + + + The filename to of the zip file to check. + + The password to check. + + true if the named zip file checks OK. Otherwise, false. + + + + A wrapper for ZipFile.FixZipDirectory(string) + + The filename to of the zip file to fix. + + + + A wrapper for ZipFile.LibraryVersion + + + the version number on the DotNetZip assembly, formatted as a string. + + + + + An enum that provides the various encryption algorithms supported by this + library. + + + + + + PkzipWeak implies the use of Zip 2.0 encryption, which is known to be + weak and subvertible. + + + + A note on interoperability: Values of PkzipWeak and None are + specified in PKWARE's zip + specification, and are considered to be "standard". Zip archives + produced using these options will be interoperable with many other zip tools + and libraries, including Windows Explorer. + + + + Values of WinZipAes128 and WinZipAes256 are not part of the Zip + specification, but rather imply the use of a vendor-specific extension from + WinZip. If you want to produce interoperable Zip archives, do not use these + values. For example, if you produce a zip archive using WinZipAes256, you + will be able to open it in Windows Explorer on Windows XP and Vista, but you + will not be able to extract entries; trying this will lead to an "unspecified + error". For this reason, some people have said that a zip archive that uses + WinZip's AES encryption is not actually a zip archive at all. A zip archive + produced this way will be readable with the WinZip tool (Version 11 and + beyond). + + + + There are other third-party tools and libraries, both commercial and + otherwise, that support WinZip's AES encryption. These will be able to read + AES-encrypted zip archives produced by DotNetZip, and conversely applications + that use DotNetZip to read zip archives will be able to read AES-encrypted + archives produced by those tools or libraries. Consult the documentation for + those other tools and libraries to find out if WinZip's AES encryption is + supported. + + + + In case you care: According to the WinZip specification, the + actual AES key used is derived from the via an + algorithm that complies with RFC 2898, using an iteration + count of 1000. The algorithm is sometimes referred to as PBKDF2, which stands + for "Password Based Key Derivation Function #2". + + + + A word about password strength and length: The AES encryption technology is + very good, but any system is only as secure as the weakest link. If you want + to secure your data, be sure to use a password that is hard to guess. To make + it harder to guess (increase its "entropy"), you should make it longer. If + you use normal characters from an ASCII keyboard, a password of length 20 will + be strong enough that it will be impossible to guess. For more information on + that, I'd encourage you to read this + article. + + + + + + + No encryption at all. + + + + + Traditional or Classic pkzip encryption. + + + + + WinZip AES encryption (128 key bits). + + + + + WinZip AES encryption (256 key bits). + + + + + An encryption algorithm that is not supported by DotNetZip. + + + + + Delegate in which the application writes the ZipEntry content for the named entry. + + + The name of the entry that must be written. + The stream to which the entry data should be written. + + + When you add an entry and specify a WriteDelegate, via , the application + code provides the logic that writes the entry data directly into the zip file. + + + + + This example shows how to define a WriteDelegate that obtains a DataSet, and then + writes the XML for the DataSet into the zip archive. There's no need to + save the XML to a disk file first. + + + private void WriteEntry (String filename, Stream output) + { + DataSet ds1 = ObtainDataSet(); + ds1.WriteXml(output); + } + + private void Run() + { + using (var zip = new ZipFile()) + { + zip.AddEntry(zipEntryName, WriteEntry); + zip.Save(zipFileName); + } + } + + + + Private Sub WriteEntry (ByVal filename As String, ByVal output As Stream) + DataSet ds1 = ObtainDataSet() + ds1.WriteXml(stream) + End Sub + + Public Sub Run() + Using zip = New ZipFile + zip.AddEntry(zipEntryName, New WriteDelegate(AddressOf WriteEntry)) + zip.Save(zipFileName) + End Using + End Sub + + + + + + + Delegate in which the application opens the stream, just-in-time, for the named entry. + + + + The name of the ZipEntry that the application should open the stream for. + + + + When you add an entry via , the application code provides the logic that + opens and closes the stream for the given ZipEntry. + + + + + + + Delegate in which the application closes the stream, just-in-time, for the named entry. + + + + The name of the ZipEntry that the application should close the stream for. + + + The stream to be closed. + + + When you add an entry via , the application code provides the logic that + opens and closes the stream for the given ZipEntry. + + + + + + + Delegate for the callback by which the application tells the + library the CompressionLevel to use for a file. + + + + + Using this callback, the application can, for example, specify that + previously-compressed files (.mp3, .png, .docx, etc) should use a + CompressionLevel of None, or can set the compression level based + on any other factor. + + + + + + + In an EventArgs type, indicates which sort of progress event is being + reported. + + + There are events for reading, events for saving, and events for + extracting. This enumeration allows a single EventArgs type to be sued to + describe one of multiple subevents. For example, a SaveProgress event is + invoked before, after, and during the saving of a single entry. The value + of an enum with this type, specifies which event is being triggered. The + same applies to Extraction, Reading and Adding events. + + + + + Indicates that a Add() operation has started. + + + + + Indicates that an individual entry in the archive has been added. + + + + + Indicates that a Add() operation has completed. + + + + + Indicates that a Read() operation has started. + + + + + Indicates that an individual entry in the archive is about to be read. + + + + + Indicates that an individual entry in the archive has just been read. + + + + + Indicates that a Read() operation has completed. + + + + + The given event reports the number of bytes read so far + during a Read() operation. + + + + + Indicates that a Save() operation has started. + + + + + Indicates that an individual entry in the archive is about to be written. + + + + + Indicates that an individual entry in the archive has just been saved. + + + + + Indicates that a Save() operation has completed. + + + + + Indicates that the zip archive has been created in a + temporary location during a Save() operation. + + + + + Indicates that the temporary file is about to be renamed to the final archive + name during a Save() operation. + + + + + Indicates that the temporary file is has just been renamed to the final archive + name during a Save() operation. + + + + + Indicates that the self-extracting archive has been compiled + during a Save() operation. + + + + + The given event is reporting the number of source bytes that have run through the compressor so far + during a Save() operation. + + + + + Indicates that an entry is about to be extracted. + + + + + Indicates that an entry has just been extracted. + + + + + Indicates that extraction of an entry would overwrite an existing + filesystem file. You must use + + ExtractExistingFileAction.InvokeExtractProgressEvent in the call + to ZipEntry.Extract() in order to receive this event. + + + + + The given event is reporting the number of bytes written so far for + the current entry during an Extract() operation. + + + + + Indicates that an ExtractAll operation is about to begin. + + + + + Indicates that an ExtractAll operation has completed. + + + + + Indicates that an error has occurred while saving a zip file. + This generally means the file cannot be opened, because it has been + removed, or because it is locked by another process. It can also + mean that the file cannot be Read, because of a range lock conflict. + + + + + Provides information about the progress of a save, read, or extract operation. + This is a base class; you will probably use one of the classes derived from this one. + + + + + The total number of entries to be saved or extracted. + + + + + The name of the last entry saved or extracted. + + + + + In an event handler, set this to cancel the save or extract + operation that is in progress. + + + + + The type of event being reported. + + + + + Returns the archive name associated to this event. + + + + + The number of bytes read or written so far for this entry. + + + + + Total number of bytes that will be read or written for this entry. + This number will be -1 if the value cannot be determined. + + + + + Provides information about the progress of a Read operation. + + + + + Provides information about the progress of a Add operation. + + + + + Provides information about the progress of a save operation. + + + + + Constructor for the SaveProgressEventArgs. + + the name of the zip archive. + whether this is before saving the entry, or after + The total number of entries in the zip archive. + Number of entries that have been saved. + The entry involved in the event. + + + + Number of entries saved so far. + + + + + Provides information about the progress of the extract operation. + + + + + Constructor for the ExtractProgressEventArgs. + + the name of the zip archive. + whether this is before saving the entry, or after + The total number of entries in the zip archive. + Number of entries that have been extracted. + The entry involved in the event. + The location to which entries are extracted. + + + + Number of entries extracted so far. This is set only if the + EventType is Extracting_BeforeExtractEntry or Extracting_AfterExtractEntry, and + the Extract() is occurring witin the scope of a call to ExtractAll(). + + + + + Returns the extraction target location, a filesystem path. + + + + + Provides information about the an error that occurred while zipping. + + + + + Returns the exception that occurred, if any. + + + + + Returns the name of the file that caused the exception, if any. + + + + + Issued when an ZipEntry.ExtractWithPassword() method is invoked + with an incorrect password. + + + + + Default ctor. + + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + The innerException for this exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The serialization info for the exception. + The streaming context from which to deserialize. + + + + Indicates that a read was attempted on a stream, and bad or incomplete data was + received. + + + + + Default ctor. + + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + The innerException for this exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The serialization info for the exception. + The streaming context from which to deserialize. + + + + Issued when an CRC check fails upon extracting an entry from a zip archive. + + + + + Default ctor. + + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The serialization info for the exception. + The streaming context from which to deserialize. + + + + Issued when errors occur saving a self-extracting archive. + + + + + Default ctor. + + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The serialization info for the exception. + The streaming context from which to deserialize. + + + + Indicates that an operation was attempted on a ZipFile which was not possible + given the state of the instance. For example, if you call Save() on a ZipFile + which has no filename set, you can get this exception. + + + + + Default ctor. + + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + The innerException for this exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The serialization info for the exception. + The streaming context from which to deserialize. + + + + Base class for all exceptions defined by and throw by the Zip library. + + + + + Default ctor. + + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + The innerException for this exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The serialization info for the exception. + The streaming context from which to deserialize. + + + + An enum for the options when extracting an entry would overwrite an existing file. + + + + + This enum describes the actions that the library can take when an + Extract() or ExtractWithPassword() method is called to extract an + entry to a filesystem, and the extraction would overwrite an existing filesystem + file. + + + + + + + Throw an exception when extraction would overwrite an existing file. (For + COM clients, this is a 0 (zero).) + + + + + When extraction would overwrite an existing file, overwrite the file silently. + The overwrite will happen even if the target file is marked as read-only. + (For COM clients, this is a 1.) + + + + + When extraction would overwrite an existing file, don't overwrite the file, silently. + (For COM clients, this is a 2.) + + + + + When extraction would overwrite an existing file, invoke the ExtractProgress + event, using an event type of . In + this way, the application can decide, just-in-time, whether to overwrite the + file. For example, a GUI application may wish to pop up a dialog to allow + the user to choose. You may want to examine the property before making + the decision. If, after your processing in the Extract progress event, you + want to NOT extract the file, set + on the ZipProgressEventArgs.CurrentEntry to DoNotOverwrite. + If you do want to extract the file, set ZipEntry.ExtractExistingFile + to OverwriteSilently. If you want to cancel the Extraction, set + ZipProgressEventArgs.Cancel to true. Cancelling differs from using + DoNotOverwrite in that a cancel will not extract any further entries, if + there are any. (For COM clients, the value of this enum is a 3.) + + + + + Collects general purpose utility methods. + + + + private null constructor + + + + Utility routine for transforming path names from filesystem format (on Windows that means backslashes) to + a format suitable for use within zipfiles. This means trimming the volume letter and colon (if any) And + swapping backslashes for forward slashes. + + source path. + transformed path + + + + Sanitize paths in zip files. This means making sure that relative paths in a zip file don't go outside + the top directory. Entries like something/../../../../Temp/evil.txt get sanitized to Temp/evil.txt + when extracting + + A path with forward slashes as directory separator + sanitized path + + + + Finds a signature in the zip stream. This is useful for finding + the end of a zip entry, for example, or the beginning of the next ZipEntry. + + + + + Scans through 64k at a time. + + + + If the method fails to find the requested signature, the stream Position + after completion of this method is unchanged. If the method succeeds in + finding the requested signature, the stream position after completion is + direct AFTER the signature found in the stream. + + + + The stream to search + The 4-byte signature to find + The number of bytes read + + + + Create a pseudo-random filename, suitable for use as a temporary + file, and open it. + + + + This method produces a filename of the form + DotNetZip-xxxxxxxx.tmp, where xxxxxxxx is replaced by randomly + chosen characters, and creates that file. + + + + + + Workitem 7889: handle ERROR_LOCK_VIOLATION during read + + + This could be gracefully handled with an extension attribute, but + This assembly used to be built for .NET 2.0, so could not use + extension methods. + + + + + A decorator stream. It wraps another stream, and performs bookkeeping + to keep track of the stream Position. + + + + In some cases, it is not possible to get the Position of a stream, let's + say, on a write-only output stream like ASP.NET's + Response.OutputStream, or on a different write-only stream + provided as the destination for the zip by the application. In this + case, programmers can use this counting stream to count the bytes read + or written. + + + Consider the scenario of an application that saves a self-extracting + archive (SFX), that uses a custom SFX stub. + + + Saving to a filesystem file, the application would open the + filesystem file (getting a FileStream), save the custom sfx stub + into it, and then call ZipFile.Save(), specifying the same + FileStream. ZipFile.Save() does the right thing for the zipentry + offsets, by inquiring the Position of the FileStream before writing + any data, and then adding that initial offset into any ZipEntry + offsets in the zip directory. Everything works fine. + + + Now suppose the application is an ASPNET application and it saves + directly to Response.OutputStream. It's not possible for DotNetZip to + inquire the Position, so the offsets for the SFX will be wrong. + + + The workaround is for the application to use this class to wrap + HttpResponse.OutputStream, then write the SFX stub and the ZipFile + into that wrapper stream. Because ZipFile.Save() can inquire the + Position, it will then do the right thing with the offsets. + + + + + + The constructor. + + The underlying stream + + + + Gets the wrapped stream. + + + + + The count of bytes written out to the stream. + + + + + the count of bytes that have been read from the stream. + + + + + Adjust the byte count on the stream. + + + + the number of bytes to subtract from the count. + + + + + Subtract delta from the count of bytes written to the stream. + This is necessary when seeking back, and writing additional data, + as happens in some cases when saving Zip files. + + + + + + The read method. + + The buffer to hold the data read from the stream. + the offset within the buffer to copy the first byte read. + the number of bytes to read. + the number of bytes read, after decryption and decompression. + + + + Write data into the stream. + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Whether the stream can be read. + + + + + Whether it is possible to call Seek() on the stream. + + + + + Whether it is possible to call Write() on the stream. + + + + + Flushes the underlying stream. + + + + + The length of the underlying stream. + + + + + Returns the sum of number of bytes written, plus the initial + offset before writing. + + + + + The Position of the stream. + + + + + Seek in the stream. + + the offset point to seek to + the reference point from which to seek + The new position + + + + Set the length of the underlying stream. Be careful with this! + + + the length to set on the underlying stream. + + + + This is a helper class supporting WinZip AES encryption. + This class is intended for use only by the DotNetZip library. + + + + Most uses of the DotNetZip library will not involve direct calls into + the WinZipAesCrypto class. Instead, the WinZipAesCrypto class is + instantiated and used by the ZipEntry() class when WinZip AES + encryption or decryption on an entry is employed. + + + + + A stream that encrypts as it writes, or decrypts as it reads. The + Crypto is AES in CTR (counter) mode, which is compatible with the AES + encryption employed by WinZip 12.0. + + + + The AES/CTR encryption protocol used by WinZip works like this: + + - start with a counter, initialized to zero. + + - to encrypt, take the data by 16-byte blocks. For each block: + - apply the transform to the counter + - increement the counter + - XOR the result of the transform with the plaintext to + get the ciphertext. + - compute the mac on the encrypted bytes + - when finished with all blocks, store the computed MAC. + + - to decrypt, take the data by 16-byte blocks. For each block: + - compute the mac on the encrypted bytes, + - apply the transform to the counter + - increement the counter + - XOR the result of the transform with the ciphertext to + get the plaintext. + - when finished with all blocks, compare the computed MAC against + the stored MAC + + + + + + + The constructor. + + The underlying stream + To either encrypt or decrypt. + The pre-initialized WinZipAesCrypto object. + The maximum number of bytes to read from the stream. + + + + Returns the final HMAC-SHA1-80 for the data that was encrypted. + + + + + Close the stream. + + + + + Returns true if the stream can be read. + + + + + Always returns false. + + + + + Returns true if the CryptoMode is Encrypt. + + + + + Flush the content in the stream. + + + + + Getting this property throws a NotImplementedException. + + + + + Getting or Setting this property throws a NotImplementedException. + + + + + This method throws a NotImplementedException. + + + + + This method throws a NotImplementedException. + + + + + This class implements the "traditional" or "classic" PKZip encryption, + which today is considered to be weak. On the other hand it is + ubiquitous. This class is intended for use only by the DotNetZip + library. + + + + Most uses of the DotNetZip library will not involve direct calls into + the ZipCrypto class. Instead, the ZipCrypto class is instantiated and + used by the ZipEntry() class when encryption or decryption on an entry + is employed. If for some reason you really wanted to use a weak + encryption algorithm in some other application, you might use this + library. But you would be much better off using one of the built-in + strong encryption libraries in the .NET Framework, like the AES + algorithm or SHA. + + + + + The default constructor for ZipCrypto. + + + + This class is intended for internal use by the library only. It's + probably not useful to you. Seriously. Stop reading this + documentation. It's a waste of your time. Go do something else. + Check the football scores. Go get an ice cream with a friend. + Seriously. + + + + + + From AppNote.txt: + unsigned char decrypt_byte() + local unsigned short temp + temp :=- Key(2) | 2 + decrypt_byte := (temp * (temp ^ 1)) bitshift-right 8 + end decrypt_byte + + + + + Call this method on a cipher text to render the plaintext. You must + first initialize the cipher with a call to InitCipher. + + + + + var cipher = new ZipCrypto(); + cipher.InitCipher(Password); + // Decrypt the header. This has a side effect of "further initializing the + // encryption keys" in the traditional zip encryption. + byte[] DecryptedMessage = cipher.DecryptMessage(EncryptedMessage); + + + + The encrypted buffer. + + The number of bytes to encrypt. + Should be less than or equal to CipherText.Length. + + + The plaintext. + + + + This is the converse of DecryptMessage. It encrypts the plaintext + and produces a ciphertext. + + + The plain text buffer. + + + The number of bytes to encrypt. + Should be less than or equal to plainText.Length. + + + The ciphertext. + + + + This initializes the cipher with the given password. + See AppNote.txt for details. + + + + The passphrase for encrypting or decrypting with this cipher. + + + + + Step 1 - Initializing the encryption keys + ----------------------------------------- + Start with these keys: + Key(0) := 305419896 (0x12345678) + Key(1) := 591751049 (0x23456789) + Key(2) := 878082192 (0x34567890) + + Then, initialize the keys with a password: + + loop for i from 0 to length(password)-1 + update_keys(password(i)) + end loop + + Where update_keys() is defined as: + + update_keys(char): + Key(0) := crc32(key(0),char) + Key(1) := Key(1) + (Key(0) bitwiseAND 000000ffH) + Key(1) := Key(1) * 134775813 + 1 + Key(2) := crc32(key(2),key(1) rightshift 24) + end update_keys + + Where crc32(old_crc,char) is a routine that given a CRC value and a + character, returns an updated CRC value after applying the CRC-32 + algorithm described elsewhere in this document. + + + + + After the keys are initialized, then you can use the cipher to + encrypt the plaintext. + + + + Essentially we encrypt the password with the keys, then discard the + ciphertext for the password. This initializes the keys for later use. + + + + + + + A Stream for reading and concurrently decrypting data from a zip file, + or for writing and concurrently encrypting data to a zip file. + + + + The constructor. + The underlying stream + To either encrypt or decrypt. + The pre-initialized ZipCrypto object. + + + + Represents a single entry in a ZipFile. Typically, applications get a ZipEntry + by enumerating the entries within a ZipFile, or by adding an entry to a ZipFile. + + + + + True if the referenced entry is a directory. + + + + + Provides a human-readable string with information about the ZipEntry. + + + + + Reads one entry from the zip directory structure in the zip file. + + + + The zipfile for which a directory entry will be read. From this param, the + method gets the ReadStream and the expected text encoding + (ProvisionalAlternateEncoding) which is used if the entry is not marked + UTF-8. + + + + a list of previously seen entry names; used to prevent duplicates. + + + the entry read from the archive. + + + + Returns true if the passed-in value is a valid signature for a ZipDirEntry. + + the candidate 4-byte signature value. + true, if the signature is valid according to the PKWare spec. + + + + Default constructor. + + + Applications should never need to call this directly. It is exposed to + support COM Automation environments. + + + + + The time and date at which the file indicated by the ZipEntry was + last modified. + + + + + The DotNetZip library sets the LastModified value for an entry, equal to + the Last Modified time of the file in the filesystem. If an entry is + added from a stream, the library uses System.DateTime.Now for this + value, for the given entry. + + + + This property allows the application to retrieve and possibly set the + LastModified value on an entry, to an arbitrary value. values with a + setting of DateTimeKind.Unspecified are taken to be expressed as + DateTimeKind.Local. + + + + Be aware that because of the way PKWare's + Zip specification describes how times are stored in the zip file, + the full precision of the System.DateTime datatype is not stored + for the last modified time when saving zip files. For more information on + how times are formatted, see the PKZip specification. + + + + The actual last modified time of a file can be stored in multiple ways in + the zip file, and they are not mutually exclusive: + + + + + In the so-called "DOS" format, which has a 2-second precision. Values + are rounded to the nearest even second. For example, if the time on the + file is 12:34:43, then it will be stored as 12:34:44. This first value + is accessible via the LastModified property. This value is always + present in the metadata for each zip entry. In some cases the value is + invalid, or zero. + + + + In the so-called "Windows" or "NTFS" format, as an 8-byte integer + quantity expressed as the number of 1/10 milliseconds (in other words + the number of 100 nanosecond units) since January 1, 1601 (UTC). This + format is how Windows represents file times. This time is accessible + via the ModifiedTime property. + + + + In the "Unix" format, a 4-byte quantity specifying the number of seconds since + January 1, 1970 UTC. + + + + In an older format, now deprecated but still used by some current + tools. This format is also a 4-byte quantity specifying the number of + seconds since January 1, 1970 UTC. + + + + + + Zip tools and libraries will always at least handle (read or write) the + DOS time, and may also handle the other time formats. Keep in mind that + while the names refer to particular operating systems, there is nothing in + the time formats themselves that prevents their use on other operating + systems. + + + + When reading ZIP files, the DotNetZip library reads the Windows-formatted + time, if it is stored in the entry, and sets both LastModified and + ModifiedTime to that value. When writing ZIP files, the DotNetZip + library by default will write both time quantities. It can also emit the + Unix-formatted time if desired (See .) + + + + The last modified time of the file created upon a call to + ZipEntry.Extract() may be adjusted during extraction to compensate + for differences in how the .NET Base Class Library deals with daylight + saving time (DST) versus how the Windows filesystem deals with daylight + saving time. Raymond Chen provides + some good context. + + + + In a nutshell: Daylight savings time rules change regularly. In 2007, for + example, the inception week of DST changed. In 1977, DST was in place all + year round. In 1945, likewise. And so on. Win32 does not attempt to + guess which time zone rules were in effect at the time in question. It + will render a time as "standard time" and allow the app to change to DST + as necessary. .NET makes a different choice. + + + + Compare the output of FileInfo.LastWriteTime.ToString("f") with what you + see in the Windows Explorer property sheet for a file that was last + written to on the other side of the DST transition. For example, suppose + the file was last modified on October 17, 2003, during DST but DST is not + currently in effect. Explorer's file properties reports Thursday, October + 17, 2003, 8:45:38 AM, but .NETs FileInfo reports Thursday, October 17, + 2003, 9:45 AM. + + + + Win32 says, "Thursday, October 17, 2002 8:45:38 AM PST". Note: Pacific + STANDARD Time. Even though October 17 of that year occurred during Pacific + Daylight Time, Win32 displays the time as standard time because that's + what time it is NOW. + + + + .NET BCL assumes that the current DST rules were in place at the time in + question. So, .NET says, "Well, if the rules in effect now were also in + effect on October 17, 2003, then that would be daylight time" so it + displays "Thursday, October 17, 2003, 9:45 AM PDT" - daylight time. + + + + So .NET gives a value which is more intuitively correct, but is also + potentially incorrect, and which is not invertible. Win32 gives a value + which is intuitively incorrect, but is strictly correct. + + + + Because of this funkiness, this library adds one hour to the LastModified + time on the extracted file, if necessary. That is to say, if the time in + question had occurred in what the .NET Base Class Library assumed to be + DST. This assumption may be wrong given the constantly changing DST rules, + but it is the best we can do. + + + + + + + + Ability to set Last Modified DOS time to zero + (for using with EmitTimesInWindowsFormatWhenSaving+EmitTimesInUnixFormatWhenSaving setted to false) + some flasher hardware use as marker of first binary + + + + + Last Modified time for the file represented by the entry. + + + + + + This value corresponds to the "last modified" time in the NTFS file times + as described in the Zip + specification. When getting this property, the value may be + different from . When setting the property, + the property also gets set, but with a lower + precision. + + + + Let me explain. It's going to take a while, so get + comfortable. Originally, waaaaay back in 1989 when the ZIP specification + was originally described by the esteemed Mr. Phil Katz, the dominant + operating system of the time was MS-DOS. MSDOS stored file times with a + 2-second precision, because, c'mon, who is ever going to need better + resolution than THAT? And so ZIP files, regardless of the platform on + which the zip file was created, store file times in exactly the same format that DOS used + in 1989. + + + + Since then, the ZIP spec has evolved, but the internal format for file + timestamps remains the same. Despite the fact that the way times are + stored in a zip file is rooted in DOS heritage, any program on any + operating system can format a time in this way, and most zip tools and + libraries DO - they round file times to the nearest even second and store + it just like DOS did 25+ years ago. + + + + PKWare extended the ZIP specification to allow a zip file to store what + are called "NTFS Times" and "Unix(tm) times" for a file. These are the + last write, last access, and file creation + times of a particular file. These metadata are not actually specific + to NTFS or Unix. They are tracked for each file by NTFS and by various + Unix filesystems, but they are also tracked by other filesystems, too. + The key point is that the times are formatted in the zip file + in the same way that NTFS formats the time (ticks since win32 epoch), + or in the same way that Unix formats the time (seconds since Unix + epoch). As with the DOS time, any tool or library running on any + operating system is capable of formatting a time in one of these ways + and embedding it into the zip file. + + + + These extended times are higher precision quantities than the DOS time. + As described above, the (DOS) LastModified has a precision of 2 seconds. + The Unix time is stored with a precision of 1 second. The NTFS time is + stored with a precision of 0.0000001 seconds. The quantities are easily + convertible, except for the loss of precision you may incur. + + + + A zip archive can store the {C,A,M} times in NTFS format, in Unix format, + or not at all. Often a tool running on Unix or Mac will embed the times + in Unix format (1 second precision), while WinZip running on Windows might + embed the times in NTFS format (precision of of 0.0000001 seconds). When + reading a zip file with these "extended" times, in either format, + DotNetZip represents the values with the + ModifiedTime, AccessedTime and CreationTime + properties on the ZipEntry. + + + + While any zip application or library, regardless of the platform it + runs on, could use any of the time formats allowed by the ZIP + specification, not all zip tools or libraries do support all these + formats. Storing the higher-precision times for each entry is + optional for zip files, and many tools and libraries don't use the + higher precision quantities at all. The old DOS time, represented by + , is guaranteed to be present, though it + sometimes unset. + + + + Ok, getting back to the question about how the LastModified + property relates to this ModifiedTime + property... LastModified is always set, while + ModifiedTime is not. (The other times stored in the NTFS + times extension, CreationTime and AccessedTime also + may not be set on an entry that is read from an existing zip file.) + When reading a zip file, then LastModified takes the DOS time + that is stored with the file. If the DOS time has been stored as zero + in the zipfile, then this library will use DateTime.Now for the + LastModified value. If the ZIP file was created by an evolved + tool, then there will also be higher precision NTFS or Unix times in + the zip file. In that case, this library will read those times, and + set LastModified and ModifiedTime to the same value, the + one corresponding to the last write time of the file. If there are no + higher precision times stored for the entry, then ModifiedTime + remains unset (likewise AccessedTime and CreationTime), + and LastModified keeps its DOS time. + + + + When creating zip files with this library, by default the extended time + properties (ModifiedTime, AccessedTime, and + CreationTime) are set on the ZipEntry instance, and these data are + stored in the zip archive for each entry, in NTFS format. If you add an + entry from an actual filesystem file, then the entry gets the actual file + times for that file, to NTFS-level precision. If you add an entry from a + stream, or a string, then the times get the value DateTime.Now. In + this case LastModified and ModifiedTime will be identical, + to 2 seconds of precision. You can explicitly set the + CreationTime, AccessedTime, and ModifiedTime of an + entry using the property setters. If you want to set all of those + quantities, it's more efficient to use the method. Those + changes are not made permanent in the zip file until you call or one of its cousins. + + + + When creating a zip file, you can override the default behavior of + this library for formatting times in the zip file, disabling the + embedding of file times in NTFS format or enabling the storage of file + times in Unix format, or both. You may want to do this, for example, + when creating a zip file on Windows, that will be consumed on a Mac, + by an application that is not hip to the "NTFS times" format. To do + this, use the and + properties. A valid zip + file may store the file times in both formats. But, there are no + guarantees that a program running on Mac or Linux will gracefully + handle the NTFS-formatted times when Unix times are present, or that a + non-DotNetZip-powered application running on Windows will be able to + handle file times in Unix format. DotNetZip will always do something + reasonable; other libraries or tools may not. When in doubt, test. + + + + I'll bet you didn't think one person could type so much about time, eh? + And reading it was so enjoyable, too! Well, in appreciation, maybe you + should donate? + + + + + + + + + + + Last Access time for the file represented by the entry. + + + This value may or may not be meaningful. If the ZipEntry was read from an existing + Zip archive, this information may not be available. For an explanation of why, see + . + + + + + + + + The file creation time for the file represented by the entry. + + + + This value may or may not be meaningful. If the ZipEntry was read + from an existing zip archive, and the creation time was not set on the entry + when the zip file was created, then this property may be meaningless. For an + explanation of why, see . + + + + + + + + Sets the NTFS Creation, Access, and Modified times for the given entry. + + + + + When adding an entry from a file or directory, the Creation, Access, and + Modified times for the given entry are automatically set from the + filesystem values. When adding an entry from a stream or string, the + values are implicitly set to DateTime.Now. The application may wish to + set these values to some arbitrary value, before saving the archive, and + can do so using the various setters. If you want to set all of the times, + this method is more efficient. + + + + The values you set here will be retrievable with the , and properties. + + + + When this method is called, if both and are false, then the + EmitTimesInWindowsFormatWhenSaving flag is automatically set. + + + + DateTime values provided here without a DateTimeKind are assumed to be Local Time. + + + + the creation time of the entry. + the last access time of the entry. + the last modified time of the entry. + + + + + + + + + + Specifies whether the Creation, Access, and Modified times for the given + entry will be emitted in "Windows format" when the zip archive is saved. + + + + + An application creating a zip archive can use this flag to explicitly + specify that the file times for the entry should or should not be stored + in the zip archive in the format used by Windows. The default value of + this property is true. + + + + When adding an entry from a file or directory, the Creation (), Access (), and Modified + () times for the given entry are automatically + set from the filesystem values. When adding an entry from a stream or + string, all three values are implicitly set to DateTime.Now. Applications + can also explicitly set those times by calling . + + + + PKWARE's + zip specification describes multiple ways to format these times in a + zip file. One is the format Windows applications normally use: 100ns ticks + since Jan 1, 1601 UTC. The other is a format Unix applications typically + use: seconds since January 1, 1970 UTC. Each format can be stored in an + "extra field" in the zip entry when saving the zip archive. The former + uses an extra field with a Header Id of 0x000A, while the latter uses a + header ID of 0x5455. + + + + Not all zip tools and libraries can interpret these fields. Windows + compressed folders is one that can read the Windows Format timestamps, + while I believe the Infozip + tools can read the Unix format timestamps. Although the time values are + easily convertible, subject to a loss of precision, some tools and + libraries may be able to read only one or the other. DotNetZip can read or + write times in either or both formats. + + + + The times stored are taken from , , and . + + + + This property is not mutually exclusive from the property. It is + possible that a zip entry can embed the timestamps in both forms, one + form, or neither. But, there are no guarantees that a program running on + Mac or Linux will gracefully handle NTFS Formatted times, or that a + non-DotNetZip-powered application running on Windows will be able to + handle file times in Unix format. When in doubt, test. + + + + Normally you will use the ZipFile.EmitTimesInWindowsFormatWhenSaving + property, to specify the behavior for all entries in a zip, rather than + the property on each individual entry. + + + + + + + + + + + + + Specifies whether the Creation, Access, and Modified times for the given + entry will be emitted in "Unix(tm) format" when the zip archive is saved. + + + + + An application creating a zip archive can use this flag to explicitly + specify that the file times for the entry should or should not be stored + in the zip archive in the format used by Unix. By default this flag is + false, meaning the Unix-format times are not stored in the zip + archive. + + + + When adding an entry from a file or directory, the Creation (), Access (), and Modified + () times for the given entry are automatically + set from the filesystem values. When adding an entry from a stream or + string, all three values are implicitly set to DateTime.Now. Applications + can also explicitly set those times by calling . + + + + PKWARE's + zip specification describes multiple ways to format these times in a + zip file. One is the format Windows applications normally use: 100ns ticks + since Jan 1, 1601 UTC. The other is a format Unix applications typically + use: seconds since Jan 1, 1970 UTC. Each format can be stored in an + "extra field" in the zip entry when saving the zip archive. The former + uses an extra field with a Header Id of 0x000A, while the latter uses a + header ID of 0x5455. + + + + Not all tools and libraries can interpret these fields. Windows + compressed folders is one that can read the Windows Format timestamps, + while I believe the Infozip + tools can read the Unix format timestamps. Although the time values are + easily convertible, subject to a loss of precision, some tools and + libraries may be able to read only one or the other. DotNetZip can read or + write times in either or both formats. + + + + The times stored are taken from , , and . + + + + This property is not mutually exclusive from the property. It is + possible that a zip entry can embed the timestamps in both forms, one + form, or neither. But, there are no guarantees that a program running on + Mac or Linux will gracefully handle NTFS Formatted times, or that a + non-DotNetZip-powered application running on Windows will be able to + handle file times in Unix format. When in doubt, test. + + + + Normally you will use the ZipFile.EmitTimesInUnixFormatWhenSaving + property, to specify the behavior for all entries, rather than the + property on each individual entry. + + + + + + + + + + + + + The type of timestamp attached to the ZipEntry. + + + + This property is valid only for a ZipEntry that was read from a zip archive. + It indicates the type of timestamp attached to the entry. + + + + + + + + The file attributes for the entry. + + + + + + The attributes in NTFS include + ReadOnly, Archive, Hidden, System, and Indexed. When adding a + ZipEntry to a ZipFile, these attributes are set implicitly when + adding an entry from the filesystem. When adding an entry from a stream + or string, the Attributes are not set implicitly. Regardless of the way + an entry was added to a ZipFile, you can set the attributes + explicitly if you like. + + + + When reading a ZipEntry from a ZipFile, the attributes are + set according to the data stored in the ZipFile. If you extract the + entry from the archive to a filesystem file, DotNetZip will set the + attributes on the resulting file accordingly. + + + + The attributes can be set explicitly by the application. For example the + application may wish to set the FileAttributes.ReadOnly bit for all + entries added to an archive, so that on unpack, this attribute will be set + on the extracted file. Any changes you make to this property are made + permanent only when you call a Save() method on the ZipFile + instance that contains the ZipEntry. + + + + For example, an application may wish to zip up a directory and set the + ReadOnly bit on every file in the archive, so that upon later extraction, + the resulting files will be marked as ReadOnly. Not every extraction tool + respects these attributes, but if you unpack with DotNetZip, as for + example in a self-extracting archive, then the attributes will be set as + they are stored in the ZipFile. + + + + These attributes may not be interesting or useful if the resulting archive + is extracted on a non-Windows platform. How these attributes get used + upon extraction depends on the platform and tool used. + + + + + + + The name of the filesystem file, referred to by the ZipEntry. + + + + + This property specifies the thing-to-be-zipped on disk, and is set only + when the ZipEntry is being created from a filesystem file. If the + ZipFile is instantiated by reading an existing .zip archive, then + the LocalFileName will be null (Nothing in VB). + + + + When it is set, the value of this property may be different than , which is the path used in the archive itself. If you + call Zip.AddFile("foop.txt", AlternativeDirectory), then the path + used for the ZipEntry within the zip archive will be different + than this path. + + + + If the entry is being added from a stream, then this is null (Nothing in VB). + + + + + + + + The name of the file contained in the ZipEntry. + + + + + + This is the name of the entry in the ZipFile itself. When creating + a zip archive, if the ZipEntry has been created from a filesystem + file, via a call to or , or a related overload, the value + of this property is derived from the name of that file. The + FileName property does not include drive letters, and may include a + different directory path, depending on the value of the + directoryPathInArchive parameter used when adding the entry into + the ZipFile. + + + + In some cases there is no related filesystem file - for example when a + ZipEntry is created using or one of the similar overloads. In this case, the value of + this property is derived from the fileName and the directory path passed + to that method. + + + + When reading a zip file, this property takes the value of the entry name + as stored in the zip file. If you extract such an entry, the extracted + file will take the name given by this property. + + + + Applications can set this property when creating new zip archives or when + reading existing archives. When setting this property, the actual value + that is set will replace backslashes with forward slashes, in accordance + with the Zip + specification, for compatibility with Unix(tm) and ... get + this.... Amiga! + + + + If an application reads a ZipFile via or a related overload, and then explicitly + sets the FileName on an entry contained within the ZipFile, and + then calls , the application will effectively + rename the entry within the zip archive. + + + + If an application sets the value of FileName, then calls + Extract() on the entry, the entry is extracted to a file using the + newly set value as the filename. The FileName value is made + permanent in the zip archive only after a call to one of the + ZipFile.Save() methods on the ZipFile that contains the + ZipEntry. + + + + If an application attempts to set the FileName to a value that + would result in a duplicate entry in the ZipFile, an exception is + thrown. + + + + When a ZipEntry is contained within a ZipFile, applications + cannot rename the entry within the context of a foreach (For + Each in VB) loop, because of the way the ZipFile stores + entries. If you need to enumerate through all the entries and rename one + or more of them, use ZipFile.EntriesSorted as the + collection. See also, ZipFile.GetEnumerator(). + + + + + + + The stream that provides content for the ZipEntry. + + + + + + The application can use this property to set the input stream for an + entry on a just-in-time basis. Imagine a scenario where the application + creates a ZipFile comprised of content obtained from hundreds of + files, via calls to AddFile(). The DotNetZip library opens streams + on these files on a just-in-time basis, only when writing the entry out to + an external store within the scope of a ZipFile.Save() call. Only + one input stream is opened at a time, as each entry is being written out. + + + + Now imagine a different application that creates a ZipFile + with content obtained from hundreds of streams, added through . Normally the + application would supply an open stream to that call. But when large + numbers of streams are being added, this can mean many open streams at one + time, unnecessarily. + + + + To avoid this, call and specify delegates that open and close the stream at + the time of Save. + + + + + Setting the value of this property when the entry was not added from a + stream (for example, when the ZipEntry was added with or , or when the entry was added by + reading an existing zip archive) will throw an exception. + + + + + + + + A flag indicating whether the InputStream was provided Just-in-time. + + + + + + When creating a zip archive, an application can obtain content for one or + more of the ZipEntry instances from streams, using the method. At the time + of calling that method, the application can supply null as the value of + the stream parameter. By doing so, the application indicates to the + library that it will provide a stream for the entry on a just-in-time + basis, at the time one of the ZipFile.Save() methods is called and + the data for the various entries are being compressed and written out. + + + + In this case, the application can set the + property, typically within the SaveProgress event (event type: ) for that entry. + + + + The application will later want to call Close() and Dispose() on that + stream. In the SaveProgress event, when the event type is , the application can + do so. This flag indicates that the stream has been provided by the + application on a just-in-time basis and that it is the application's + responsibility to call Close/Dispose on that stream. + + + + + + + + An enum indicating the source of the ZipEntry. + + + + + The version of the zip engine needed to read the ZipEntry. + + + + + This is a readonly property, indicating the version of
the Zip + specification that the extracting tool or library must support to + extract the given entry. Generally higher versions indicate newer + features. Older zip engines obviously won't know about new features, and + won't be able to extract entries that depend on those newer features. + + + + + value + Features + + + + 20 + a basic Zip Entry, potentially using PKZIP encryption. + + + + + 45 + The ZIP64 extension is used on the entry. + + + + + 46 + File is compressed using BZIP2 compression* + + + + 50 + File is encrypted using PkWare's DES, 3DES, (broken) RC2 or RC4 + + + + 51 + File is encrypted using PKWare's AES encryption or corrected RC2 encryption. + + + + 52 + File is encrypted using corrected RC2-64 encryption** + + + + 61 + File is encrypted using non-OAEP key wrapping*** + + + + 63 + File is compressed using LZMA, PPMd+, Blowfish, or Twofish + + + + + + There are other values possible, not listed here. DotNetZip supports + regular PKZip encryption, and ZIP64 extensions. DotNetZip cannot extract + entries that require a zip engine higher than 45. + + + + This value is set upon reading an existing zip file, or after saving a zip + archive. + + + + + + The comment attached to the ZipEntry. + + + + + Each entry in a zip file can optionally have a comment associated to + it. The comment might be displayed by a zip tool during extraction, for + example. + + + + By default, the Comment is encoded in IBM437 code page. You can + specify an alternative with and + . + + + + + + + + Indicates whether the entry requires ZIP64 extensions. + + + + + + This property is null (Nothing in VB) until a Save() method on the + containing instance has been called. The property is + non-null (HasValue is true) only after a Save() method has + been called. + + + + After the containing ZipFile has been saved, the Value of this + property is true if any of the following three conditions holds: the + uncompressed size of the entry is larger than 0xFFFFFFFF; the compressed + size of the entry is larger than 0xFFFFFFFF; the relative offset of the + entry within the zip archive is larger than 0xFFFFFFFF. These quantities + are not known until a Save() is attempted on the zip archive and + the compression is applied. + + + + If none of the three conditions holds, then the Value is false. + + + + A Value of false does not indicate that the entry, as saved in the + zip archive, does not use ZIP64. It merely indicates that ZIP64 is + not required. An entry may use ZIP64 even when not required if + the property on the containing + ZipFile instance is set to , or if + the property on the containing + ZipFile instance is set to + and the output stream was not seekable. + + + + + + + + Indicates whether the entry actually used ZIP64 extensions, as it was most + recently written to the output file or stream. + + + + + + This Nullable property is null (Nothing in VB) until a Save() + method on the containing instance has been + called. HasValue is true only after a Save() method has been + called. + + + + The value of this property for a particular ZipEntry may change + over successive calls to Save() methods on the containing ZipFile, + even if the file that corresponds to the ZipEntry does not. This + may happen if other entries contained in the ZipFile expand, + causing the offset for this particular entry to exceed 0xFFFFFFFF. + + + + + + + The bitfield for the entry as defined in the zip spec. You probably + never need to look at this. + + + + + You probably do not need to concern yourself with the contents of this + property, but in case you do: + + + + + bit + meaning + + + + 0 + set if encryption is used. + + + + 1-2 + + set to determine whether normal, max, fast deflation. DotNetZip library + always leaves these bits unset when writing (indicating "normal" + deflation"), but can read an entry with any value here. + + + + + 3 + + Indicates that the Crc32, Compressed and Uncompressed sizes are zero in the + local header. This bit gets set on an entry during writing a zip file, when + it is saved to a non-seekable output stream. + + + + + + 4 + reserved for "enhanced deflating". This library doesn't do enhanced deflating. + + + + 5 + set to indicate the zip is compressed patched data. This library doesn't do that. + + + + 6 + + set if PKWare's strong encryption is used (must also set bit 1 if bit 6 is + set). This bit is not set if WinZip's AES encryption is set. + + + + 7 + not used + + + + 8 + not used + + + + 9 + not used + + + + 10 + not used + + + + 11 + + Language encoding flag (EFS). If this bit is set, the filename and comment + fields for this file must be encoded using UTF-8. This library currently + does not support UTF-8. + + + + + 12 + Reserved by PKWARE for enhanced compression. + + + + 13 + + Used when encrypting the Central Directory to indicate selected data + values in the Local Header are masked to hide their actual values. See + the section in the Zip + specification describing the Strong Encryption Specification for + details. + + + + + 14 + Reserved by PKWARE. + + + + 15 + Reserved by PKWARE. + + + + + + + + + The compression method employed for this ZipEntry. + + + + + + The + Zip specification allows a variety of compression methods. This + library supports just two: 0x08 = Deflate. 0x00 = Store (no compression), + for reading or writing. + + + + When reading an entry from an existing zipfile, the value you retrieve + here indicates the compression method used on the entry by the original + creator of the zip. When writing a zipfile, you can specify either 0x08 + (Deflate) or 0x00 (None). If you try setting something else, you will get + an exception. + + + + You may wish to set CompressionMethod to CompressionMethod.None (0) + when zipping already-compressed data like a jpg, png, or mp3 file. + This can save time and cpu cycles. + + + + When setting this property on a ZipEntry that is read from an + existing zip file, calling ZipFile.Save() will cause the new + CompressionMethod to be used on the entry in the newly saved zip file. + + + + Setting this property may have the side effect of modifying the + CompressionLevel property. If you set the CompressionMethod to a + value other than None, and CompressionLevel is previously + set to None, then CompressionLevel will be set to + Default. + + + + + + + In this example, the first entry added to the zip archive uses the default + behavior - compression is used where it makes sense. The second entry, + the MP3 file, is added to the archive without being compressed. + + using (ZipFile zip = new ZipFile(ZipFileToCreate)) + { + ZipEntry e1= zip.AddFile(@"notes\Readme.txt"); + ZipEntry e2= zip.AddFile(@"music\StopThisTrain.mp3"); + e2.CompressionMethod = CompressionMethod.None; + zip.Save(); + } + + + + Using zip As New ZipFile(ZipFileToCreate) + zip.AddFile("notes\Readme.txt") + Dim e2 as ZipEntry = zip.AddFile("music\StopThisTrain.mp3") + e2.CompressionMethod = CompressionMethod.None + zip.Save + End Using + + + + + + Sets the compression level to be used for the entry when saving the zip + archive. This applies only for CompressionMethod = DEFLATE. + + + + + When using the DEFLATE compression method, Varying the compression + level used on entries can affect the size-vs-speed tradeoff when + compression and decompressing data streams or files. + + + + If you do not set this property, the default compression level is used, + which normally gives a good balance of compression efficiency and + compression speed. In some tests, using BestCompression can + double the time it takes to compress, while delivering just a small + increase in compression efficiency. This behavior will vary with the + type of data you compress. If you are in doubt, just leave this setting + alone, and accept the default. + + + + When setting this property on a ZipEntry that is read from an + existing zip file, calling ZipFile.Save() will cause the new + CompressionLevel to be used on the entry in the newly saved zip file. + + + + Setting this property may have the side effect of modifying the + CompressionMethod property. If you set the CompressionLevel + to a value other than None, CompressionMethod will be set + to Deflate, if it was previously None. + + + + Setting this property has no effect if the CompressionMethod is something + other than Deflate or None. + + + + + + + + The compressed size of the file, in bytes, within the zip archive. + + + + When reading a ZipFile, this value is read in from the existing + zip file. When creating or updating a ZipFile, the compressed + size is computed during compression. Therefore the value on a + ZipEntry is valid after a call to Save() (or one of its + overloads) in that case. + + + + + + + The size of the file, in bytes, before compression, or after extraction. + + + + When reading a ZipFile, this value is read in from the existing + zip file. When creating or updating a ZipFile, the uncompressed + size is computed during compression. Therefore the value on a + ZipEntry is valid after a call to Save() (or one of its + overloads) in that case. + + + + + + + The ratio of compressed size to uncompressed size of the ZipEntry. + + + + + This is a ratio of the compressed size to the uncompressed size of the + entry, expressed as a double in the range of 0 to 100+. A value of 100 + indicates no compression at all. It could be higher than 100 when the + compression algorithm actually inflates the data, as may occur for small + files, or uncompressible data that is encrypted. + + + + You could format it for presentation to a user via a format string of + "{3,5:F0}%" to see it as a percentage. + + + + If the size of the original uncompressed file is 0, implying a + denominator of 0, the return value will be zero. + + + + This property is valid after reading in an existing zip file, or after + saving the ZipFile that contains the ZipEntry. You cannot know the + effect of a compression transform until you try it. + + + + + + + The 32-bit CRC (Cyclic Redundancy Check) on the contents of the ZipEntry. + + + + + You probably don't need to concern yourself with this. It is used + internally by DotNetZip to verify files or streams upon extraction. + + The value is a 32-bit + CRC using 0xEDB88320 for the polynomial. This is the same CRC-32 used in + PNG, MPEG-2, and other protocols and formats. It is a read-only property; when + creating a Zip archive, the CRC for each entry is set only after a call to + Save() on the containing ZipFile. When reading an existing zip file, the value + of this property reflects the stored CRC for the entry. + + + + + + True if the entry is a directory (not a file). + This is a readonly property on the entry. + + + + + A derived property that is true if the entry uses encryption. + + + + + This is a readonly property on the entry. When reading a zip file, + the value for the ZipEntry is determined by the data read + from the zip file. After saving a ZipFile, the value of this + property for each ZipEntry indicates whether encryption was + actually used (which will have been true if the was set and the property + was something other than . + + + + + + Set this to specify which encryption algorithm to use for the entry when + saving it to a zip archive. + + + + + + Set this property in order to encrypt the entry when the ZipFile is + saved. When setting this property, you must also set a on the entry. If you set a value other than on this property and do not set a + Password then the entry will not be encrypted. The ZipEntry + data is encrypted as the ZipFile is saved, when you call or one of its cousins on the containing + ZipFile instance. You do not need to specify the Encryption + when extracting entries from an archive. + + + + The Zip specification from PKWare defines a set of encryption algorithms, + and the data formats for the zip archive that support them, and PKWare + supports those algorithms in the tools it produces. Other vendors of tools + and libraries, such as WinZip or Xceed, typically support a + subset of the algorithms specified by PKWare. These tools can + sometimes support additional different encryption algorithms and data + formats, not specified by PKWare. The AES Encryption specified and + supported by WinZip is the most popular example. This library supports a + subset of the complete set of algorithms specified by PKWare and other + vendors. + + + + There is no common, ubiquitous multi-vendor standard for strong encryption + within zip files. There is broad support for so-called "traditional" Zip + encryption, sometimes called Zip 2.0 encryption, as specified + by PKWare, but this encryption is considered weak and + breakable. This library currently supports the Zip 2.0 "weak" encryption, + and also a stronger WinZip-compatible AES encryption, using either 128-bit + or 256-bit key strength. If you want DotNetZip to support an algorithm + that is not currently supported, call the author of this library and maybe + we can talk business. + + + + The class also has a property. In most cases you will use + that property when setting encryption. This property takes + precedence over any Encryption set on the ZipFile itself. + Typically, you would use the per-entry Encryption when most entries in the + zip archive use one encryption algorithm, and a few entries use a + different one. If all entries in the zip file use the same Encryption, + then it is simpler to just set this property on the ZipFile itself, when + creating a zip archive. + + + + Some comments on updating archives: If you read a ZipFile, you can + modify the Encryption on an encrypted entry: you can remove encryption + from an entry that was encrypted; you can encrypt an entry that was not + encrypted previously; or, you can change the encryption algorithm. The + changes in encryption are not made permanent until you call Save() on the + ZipFile. To effect changes in encryption, the entry content is + streamed through several transformations, depending on the modification + the application has requested. For example if the entry is not encrypted + and the application sets Encryption to PkzipWeak, then at + the time of Save(), the original entry is read and decompressed, + then re-compressed and encrypted. Conversely, if the original entry is + encrypted with PkzipWeak encryption, and the application sets the + Encryption property to WinZipAes128, then at the time of + Save(), the original entry is decrypted via PKZIP encryption and + decompressed, then re-compressed and re-encrypted with AES. This all + happens automatically within the library, but it can be time-consuming for + large entries. + + + + Additionally, when updating archives, it is not possible to change the + password when changing the encryption algorithm. To change both the + algorithm and the password, you need to Save() the zipfile twice. First + set the Encryption to None, then call Save(). Then set the + Encryption to the new value (not "None"), then call Save() + once again. + + + + The WinZip AES encryption algorithms are not supported on the .NET Compact + Framework. + + + + + + This example creates a zip archive that uses encryption, and then extracts + entries from the archive. When creating the zip archive, the ReadMe.txt + file is zipped without using a password or encryption. The other file + uses encryption. + + + // Create a zip archive with AES Encryption. + using (ZipFile zip = new ZipFile()) + { + zip.AddFile("ReadMe.txt") + ZipEntry e1= zip.AddFile("2008-Regional-Sales-Report.pdf"); + e1.Encryption= EncryptionAlgorithm.WinZipAes256; + e1.Password= "Top.Secret.No.Peeking!"; + zip.Save("EncryptedArchive.zip"); + } + + // Extract a zip archive that uses AES Encryption. + // You do not need to specify the algorithm during extraction. + using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) + { + // Specify the password that is used during extraction, for + // all entries that require a password: + zip.Password= "Top.Secret.No.Peeking!"; + zip.ExtractAll("extractDirectory"); + } + + + + ' Create a zip that uses Encryption. + Using zip As New ZipFile() + zip.AddFile("ReadMe.txt") + Dim e1 as ZipEntry + e1= zip.AddFile("2008-Regional-Sales-Report.pdf") + e1.Encryption= EncryptionAlgorithm.WinZipAes256 + e1.Password= "Top.Secret.No.Peeking!" + zip.Save("EncryptedArchive.zip") + End Using + + ' Extract a zip archive that uses AES Encryption. + ' You do not need to specify the algorithm during extraction. + Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) + ' Specify the password that is used during extraction, for + ' all entries that require a password: + zip.Password= "Top.Secret.No.Peeking!" + zip.ExtractAll("extractDirectory") + End Using + + + + + + Thrown in the setter if EncryptionAlgorithm.Unsupported is specified. + + + ZipEntry.Password + ZipFile.Encryption + + + + The Password to be used when encrypting a ZipEntry upon + ZipFile.Save(), or when decrypting an entry upon Extract(). + + + + + This is a write-only property on the entry. Set this to request that the + entry be encrypted when writing the zip archive, or set it to specify the + password to be used when extracting an existing entry that is encrypted. + + + + The password set here is implicitly used to encrypt the entry during the + operation, or to decrypt during the or operation. If you set + the Password on a ZipEntry after calling Save(), there is no + effect. + + + + Consider setting the property when using a + password. Answering concerns that the standard password protection + supported by all zip tools is weak, WinZip has extended the ZIP + specification with a way to use AES Encryption to protect entries in the + Zip file. Unlike the "PKZIP 2.0" encryption specified in the PKZIP + specification, AES + Encryption uses a standard, strong, tested, encryption + algorithm. DotNetZip can create zip archives that use WinZip-compatible + AES encryption, if you set the property. But, + archives created that use AES encryption may not be readable by all other + tools and libraries. For example, Windows Explorer cannot read a + "compressed folder" (a zip file) that uses AES encryption, though it can + read a zip file that uses "PKZIP encryption." + + + + The class also has a + property. This property takes precedence over any password set on the + ZipFile itself. Typically, you would use the per-entry Password when most + entries in the zip archive use one password, and a few entries use a + different password. If all entries in the zip file use the same password, + then it is simpler to just set this property on the ZipFile itself, + whether creating a zip archive or extracting a zip archive. + + + + Some comments on updating archives: If you read a ZipFile, you + cannot modify the password on any encrypted entry, except by extracting + the entry with the original password (if any), removing the original entry + via , and then adding a new + entry with a new Password. + + + + For example, suppose you read a ZipFile, and there is an encrypted + entry. Setting the Password property on that ZipEntry and then + calling Save() on the ZipFile does not update the password + on that entry in the archive. Neither is an exception thrown. Instead, + what happens during the Save() is the existing entry is copied + through to the new zip archive, in its original encrypted form. Upon + re-reading that archive, the entry can be decrypted with its original + password. + + + + If you read a ZipFile, and there is an un-encrypted entry, you can set the + Password on the entry and then call Save() on the ZipFile, and get + encryption on that entry. + + + + + + + This example creates a zip file with two entries, and then extracts the + entries from the zip file. When creating the zip file, the two files are + added to the zip file using password protection. Each entry uses a + different password. During extraction, each file is extracted with the + appropriate password. + + + // create a file with encryption + using (ZipFile zip = new ZipFile()) + { + ZipEntry entry; + entry= zip.AddFile("Declaration.txt"); + entry.Password= "123456!"; + entry = zip.AddFile("Report.xls"); + entry.Password= "1Secret!"; + zip.Save("EncryptedArchive.zip"); + } + + // extract entries that use encryption + using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) + { + ZipEntry entry; + entry = zip["Declaration.txt"]; + entry.Password = "123456!"; + entry.Extract("extractDir"); + entry = zip["Report.xls"]; + entry.Password = "1Secret!"; + entry.Extract("extractDir"); + } + + + + + Using zip As New ZipFile + Dim entry as ZipEntry + entry= zip.AddFile("Declaration.txt") + entry.Password= "123456!" + entry = zip.AddFile("Report.xls") + entry.Password= "1Secret!" + zip.Save("EncryptedArchive.zip") + End Using + + + ' extract entries that use encryption + Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) + Dim entry as ZipEntry + entry = zip("Declaration.txt") + entry.Password = "123456!" + entry.Extract("extractDir") + entry = zip("Report.xls") + entry.Password = "1Secret!" + entry.Extract("extractDir") + End Using + + + + + + + ZipFile.Password + + + + The action the library should take when extracting a file that already exists. + + + + + This property affects the behavior of the Extract methods (one of the + Extract() or ExtractWithPassword() overloads), when + extraction would would overwrite an existing filesystem file. If you do + not set this property, the library throws an exception when extracting + an entry would overwrite an existing file. + + + + This property has no effect when extracting to a stream, or when the file to be + extracted does not already exist. + + + + + + + This example shows how to set the ExtractExistingFile property in + an ExtractProgress event, in response to user input. The + ExtractProgress event is invoked if and only if the + ExtractExistingFile property was previously set to + ExtractExistingFileAction.InvokeExtractProgressEvent. + + public static void ExtractProgress(object sender, ExtractProgressEventArgs e) + { + if (e.EventType == ZipProgressEventType.Extracting_BeforeExtractEntry) + Console.WriteLine("extract {0} ", e.CurrentEntry.FileName); + + else if (e.EventType == ZipProgressEventType.Extracting_ExtractEntryWouldOverwrite) + { + ZipEntry entry = e.CurrentEntry; + string response = null; + // Ask the user if he wants overwrite the file + do + { + Console.Write("Overwrite {0} in {1} ? (y/n/C) ", entry.FileName, e.ExtractLocation); + response = Console.ReadLine(); + Console.WriteLine(); + + } while (response != null && response[0]!='Y' && + response[0]!='N' && response[0]!='C'); + + if (response[0]=='C') + e.Cancel = true; + else if (response[0]=='Y') + entry.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently; + else + entry.ExtractExistingFile= ExtractExistingFileAction.DoNotOverwrite; + } + } + + + + + + The action to take when an error is encountered while + opening or reading files as they are saved into a zip archive. + + + + + Errors can occur within a call to ZipFile.Save, as the various files contained + in a ZipFile are being saved into the zip archive. During the + Save, DotNetZip will perform a File.Open on the file + associated to the ZipEntry, and then will read the entire contents of + the file as it is zipped. Either the open or the Read may fail, because + of lock conflicts or other reasons. Using this property, you can + specify the action to take when such errors occur. + + + + Typically you will NOT set this property on individual ZipEntry + instances. Instead, you will set the ZipFile.ZipErrorAction property on + the ZipFile instance, before adding any entries to the + ZipFile. If you do this, errors encountered on behalf of any of + the entries in the ZipFile will be handled the same way. + + + + But, if you use a handler, you will want + to set this property on the ZipEntry within the handler, to + communicate back to DotNetZip what you would like to do with the + particular error. + + + + + + + + + Indicates whether the entry was included in the most recent save. + + + An entry can be excluded or skipped from a save if there is an error + opening or reading the entry. + + + + + + A callback that allows the application to specify the compression to use + for a given entry that is about to be added to the zip archive. + + + + + See + + + + + + Set to indicate whether to use UTF-8 encoding for filenames and comments. + + + + + + If this flag is set, the comment and filename for the entry will be + encoded with UTF-8, as described in the Zip + specification, if necessary. "Necessary" means, the filename or + entry comment (if any) cannot be reflexively encoded and decoded using the + default code page, IBM437. + + + + Setting this flag to true is equivalent to setting to System.Text.Encoding.UTF8. + + + + This flag has no effect or relation to the text encoding used within the + file itself. + + + + + + + The text encoding to use for the FileName and Comment on this ZipEntry, + when the default encoding is insufficient. + + + + + + Don't use this property. See . + + + + + + + Specifies the alternate text encoding used by this ZipEntry + + + + The default text encoding used in Zip files for encoding filenames and + comments is IBM437, which is something like a superset of ASCII. In + cases where this is insufficient, applications can specify an + alternate encoding. + + + When creating a zip file, the usage of the alternate encoding is + governed by the property. + Typically you would set both properties to tell DotNetZip to employ an + encoding that is not IBM437 in the zipfile you are creating. + + + Keep in mind that because the ZIP specification states that the only + valid encodings to use are IBM437 and UTF-8, if you use something + other than that, then zip tools and libraries may not be able to + successfully read the zip archive you generate. + + + The zip specification states that applications should presume that + IBM437 is in use, except when a special bit is set, which indicates + UTF-8. There is no way to specify an arbitrary code page, within the + zip file itself. When you create a zip file encoded with gb2312 or + ibm861 or anything other than IBM437 or UTF-8, then the application + that reads the zip file needs to "know" which code page to use. In + some cases, the code page used when reading is chosen implicitly. For + example, WinRar uses the ambient code page for the host desktop + operating system. The pitfall here is that if you create a zip in + Copenhagen and send it to Tokyo, the reader of the zipfile may not be + able to decode successfully. + + + + This example shows how to create a zipfile encoded with a + language-specific encoding: + + using (var zip = new ZipFile()) + { + zip.AlternateEnoding = System.Text.Encoding.GetEncoding("ibm861"); + zip.AlternateEnodingUsage = ZipOption.Always; + zip.AddFileS(arrayOfFiles); + zip.Save("Myarchive-Encoded-in-IBM861.zip"); + } + + + + + + + Describes if and when this instance should apply + AlternateEncoding to encode the FileName and Comment, when + saving. + + + + + + Indicates whether an entry is marked as a text file. Be careful when + using on this property. Unless you have a good reason, you should + probably ignore this property. + + + + + The ZIP format includes a provision for specifying whether an entry in + the zip archive is a text or binary file. This property exposes that + metadata item. Be careful when using this property: It's not clear + that this property as a firm meaning, across tools and libraries. + + + + To be clear, when reading a zip file, the property value may or may + not be set, and its value may or may not be valid. Not all entries + that you may think of as "text" entries will be so marked, and entries + marked as "text" are not guaranteed in any way to be text entries. + Whether the value is set and set correctly depends entirely on the + application that produced the zip file. + + + + There are many zip tools available, and when creating zip files, some + of them "respect" the IsText metadata field, and some of them do not. + Unfortunately, even when an application tries to do "the right thing", + it's not always clear what "the right thing" is. + + + + There's no firm definition of just what it means to be "a text file", + and the zip specification does not help in this regard. Twenty years + ago, text was ASCII, each byte was less than 127. IsText meant, all + bytes in the file were less than 127. These days, it is not the case + that all text files have all bytes less than 127. Any unicode file + may have bytes that are above 0x7f. The zip specification has nothing + to say on this topic. Therefore, it's not clear what IsText really + means. + + + + This property merely tells a reading application what is stored in the + metadata for an entry, without guaranteeing its validity or its + meaning. + + + + When DotNetZip is used to create a zipfile, it attempts to set this + field "correctly." For example, if a file ends in ".txt", this field + will be set. Your application may override that default setting. When + writing a zip file, you must set the property before calling + Save() on the ZipFile. + + + + When reading a zip file, a more general way to decide just what kind + of file is contained in a particular entry is to use the file type + database stored in the operating system. The operating system stores + a table that says, a file with .jpg extension is a JPG image file, a + file with a .xml extension is an XML document, a file with a .txt is a + pure ASCII text document, and so on. To get this information on + Windows, you + need to read and parse the registry. + + + + + using (var zip = new ZipFile()) + { + var e = zip.UpdateFile("Descriptions.mme", ""); + e.IsText = true; + zip.Save(zipPath); + } + + + + Using zip As New ZipFile + Dim e2 as ZipEntry = zip.AddFile("Descriptions.mme", "") + e.IsText= True + zip.Save(zipPath) + End Using + + + + + Provides a string representation of the instance. + a string representation of the instance. + + + + Extract the entry to the filesystem, starting at the current + working directory. + + + + This method has a bunch of overloads! One of them is sure to + be the right one for you... If you don't like these, check + out the ExtractWithPassword() methods. + + + + + + + + + This method extracts an entry from a zip file into the current + working directory. The path of the entry as extracted is the full + path as specified in the zip archive, relative to the current + working directory. After the file is extracted successfully, the + file attributes and timestamps are set. + + + + The action taken when extraction an entry would overwrite an + existing file is determined by the property. + + + + Within the call to Extract(), the content for the entry is + written into a filesystem file, and then the last modified time of the + file is set according to the property on + the entry. See the remarks the property for + some details about the last modified time. + + + + + + + Extract the entry to a file in the filesystem, using the specified + behavior when extraction would overwrite an existing file. + + + + + See the remarks on the property, for some + details about how the last modified time of the file is set after + extraction. + + + + + The action to take if extraction would overwrite an existing file. + + + + + Extracts the entry to the specified stream. + + + + + The caller can specify any write-able stream, for example a , a , or ASP.NET's + Response.OutputStream. The content will be decrypted and + decompressed as necessary. If the entry is encrypted and no password + is provided, this method will throw. + + + The position on the stream is not reset by this method before it extracts. + You may want to call stream.Seek() before calling ZipEntry.Extract(). + + + + + the stream to which the entry should be extracted. + + + + + + Extract the entry to the filesystem, starting at the specified base + directory. + + + the pathname of the base directory + + + + + + This example extracts only the entries in a zip file that are .txt files, + into a directory called "textfiles". + + using (ZipFile zip = ZipFile.Read("PackedDocuments.zip")) + { + foreach (string s1 in zip.EntryFilenames) + { + if (s1.EndsWith(".txt")) + { + zip[s1].Extract("textfiles"); + } + } + } + + + Using zip As ZipFile = ZipFile.Read("PackedDocuments.zip") + Dim s1 As String + For Each s1 In zip.EntryFilenames + If s1.EndsWith(".txt") Then + zip(s1).Extract("textfiles") + End If + Next + End Using + + + + + + + Using this method, existing entries in the filesystem will not be + overwritten. If you would like to force the overwrite of existing + files, see the property, or call + . + + + + See the remarks on the property, for some + details about how the last modified time of the created file is set. + + + + + + Extract the entry to the filesystem, starting at the specified base + directory, and using the specified behavior when extraction would + overwrite an existing file. + + + + + See the remarks on the property, for some + details about how the last modified time of the created file is set. + + + + + + String sZipPath = "Airborne.zip"; + String sFilePath = "Readme.txt"; + String sRootFolder = "Digado"; + using (ZipFile zip = ZipFile.Read(sZipPath)) + { + if (zip.EntryFileNames.Contains(sFilePath)) + { + // use the string indexer on the zip file + zip[sFileName].Extract(sRootFolder, + ExtractExistingFileAction.OverwriteSilently); + } + } + + + + Dim sZipPath as String = "Airborne.zip" + Dim sFilePath As String = "Readme.txt" + Dim sRootFolder As String = "Digado" + Using zip As ZipFile = ZipFile.Read(sZipPath) + If zip.EntryFileNames.Contains(sFilePath) + ' use the string indexer on the zip file + zip(sFilePath).Extract(sRootFolder, _ + ExtractExistingFileAction.OverwriteSilently) + End If + End Using + + + + the pathname of the base directory + + The action to take if extraction would overwrite an existing file. + + + + + Extract the entry to the filesystem, using the current working directory + and the specified password. + + + + This method has a bunch of overloads! One of them is sure to be + the right one for you... + + + + + + + + + Existing entries in the filesystem will not be overwritten. If you + would like to force the overwrite of existing files, see the property, or call + . + + + + See the remarks on the property for some + details about how the "last modified" time of the created file is + set. + + + + + In this example, entries that use encryption are extracted using a + particular password. + + using (var zip = ZipFile.Read(FilePath)) + { + foreach (ZipEntry e in zip) + { + if (e.UsesEncryption) + e.ExtractWithPassword("Secret!"); + else + e.Extract(); + } + } + + + Using zip As ZipFile = ZipFile.Read(FilePath) + Dim e As ZipEntry + For Each e In zip + If (e.UsesEncryption) + e.ExtractWithPassword("Secret!") + Else + e.Extract + End If + Next + End Using + + + The Password to use for decrypting the entry. + + + + Extract the entry to the filesystem, starting at the specified base + directory, and using the specified password. + + + + + + + + Existing entries in the filesystem will not be overwritten. If you + would like to force the overwrite of existing files, see the property, or call + . + + + + See the remarks on the property, for some + details about how the last modified time of the created file is set. + + + + The pathname of the base directory. + The Password to use for decrypting the entry. + + + + Extract the entry to a file in the filesystem, relative to the + current directory, using the specified behavior when extraction + would overwrite an existing file. + + + + + See the remarks on the property, for some + details about how the last modified time of the created file is set. + + + + The Password to use for decrypting the entry. + + + The action to take if extraction would overwrite an existing file. + + + + + Extract the entry to the filesystem, starting at the specified base + directory, and using the specified behavior when extraction would + overwrite an existing file. + + + + See the remarks on the property, for some + details about how the last modified time of the created file is set. + + + the pathname of the base directory + + The action to take if extraction would + overwrite an existing file. + + The Password to use for decrypting the entry. + + + + Extracts the entry to the specified stream, using the specified + Password. For example, the caller could extract to Console.Out, or + to a MemoryStream. + + + + + The caller can specify any write-able stream, for example a , a , or ASP.NET's + Response.OutputStream. The content will be decrypted and + decompressed as necessary. If the entry is encrypted and no password + is provided, this method will throw. + + + The position on the stream is not reset by this method before it extracts. + You may want to call stream.Seek() before calling ZipEntry.Extract(). + + + + + + the stream to which the entry should be extracted. + + + The password to use for decrypting the entry. + + + + + Opens a readable stream corresponding to the zip entry in the + archive. The stream decompresses and decrypts as necessary, as it + is read. + + + + + + DotNetZip offers a variety of ways to extract entries from a zip + file. This method allows an application to extract an entry by + reading a . + + + + The return value is of type . Use it as you would any + stream for reading. When an application calls on that stream, it will + receive data from the zip entry that is decrypted and decompressed + as necessary. + + + + CrcCalculatorStream adds one additional feature: it keeps a + CRC32 checksum on the bytes of the stream as it is read. The CRC + value is available in the property on the + CrcCalculatorStream. When the read is complete, your + application + should check this CRC against the + property on the ZipEntry to validate the content of the + ZipEntry. You don't have to validate the entry using the CRC, but + you should, to verify integrity. Check the example for how to do + this. + + + + If the entry is protected with a password, then you need to provide + a password prior to calling , either by + setting the property on the entry, or the + property on the ZipFile + itself. Or, you can use , the + overload of OpenReader that accepts a password parameter. + + + + If you want to extract entry data into a write-able stream that is + already opened, like a , do not + use this method. Instead, use . + + + + Your application may use only one stream created by OpenReader() at + a time, and you should not call other Extract methods before + completing your reads on a stream obtained from OpenReader(). This + is because there is really only one source stream for the compressed + content. A call to OpenReader() seeks in the source stream, to the + beginning of the compressed content. A subsequent call to + OpenReader() on a different entry will seek to a different position + in the source stream, as will a call to Extract() or one of its + overloads. This will corrupt the state for the decompressing stream + from the original call to OpenReader(). + + + + The OpenReader() method works only when the ZipEntry is + obtained from an instance of ZipFile. This method will throw + an exception if the ZipEntry is obtained from a . + + + + + This example shows how to open a zip archive, then read in a named + entry via a stream. After the read loop is complete, the code + compares the calculated during the read loop with the expected CRC + on the ZipEntry, to verify the extraction. + + using (ZipFile zip = new ZipFile(ZipFileToRead)) + { + ZipEntry e1= zip["Elevation.mp3"]; + using (Ionic.Zlib.CrcCalculatorStream s = e1.OpenReader()) + { + byte[] buffer = new byte[4096]; + int n, totalBytesRead= 0; + do { + n = s.Read(buffer,0, buffer.Length); + totalBytesRead+=n; + } while (n>0); + if (s.Crc32 != e1.Crc32) + throw new Exception(string.Format("The Zip Entry failed the CRC Check. (0x{0:X8}!=0x{1:X8})", s.Crc32, e1.Crc32)); + if (totalBytesRead != e1.UncompressedSize) + throw new Exception(string.Format("We read an unexpected number of bytes. ({0}!={1})", totalBytesRead, e1.UncompressedSize)); + } + } + + + Using zip As New ZipFile(ZipFileToRead) + Dim e1 As ZipEntry = zip.Item("Elevation.mp3") + Using s As Ionic.Zlib.CrcCalculatorStream = e1.OpenReader + Dim n As Integer + Dim buffer As Byte() = New Byte(4096) {} + Dim totalBytesRead As Integer = 0 + Do + n = s.Read(buffer, 0, buffer.Length) + totalBytesRead = (totalBytesRead + n) + Loop While (n > 0) + If (s.Crc32 <> e1.Crc32) Then + Throw New Exception(String.Format("The Zip Entry failed the CRC Check. (0x{0:X8}!=0x{1:X8})", s.Crc32, e1.Crc32)) + End If + If (totalBytesRead <> e1.UncompressedSize) Then + Throw New Exception(String.Format("We read an unexpected number of bytes. ({0}!={1})", totalBytesRead, e1.UncompressedSize)) + End If + End Using + End Using + + + + The Stream for reading. + + + + Opens a readable stream for an encrypted zip entry in the archive. + The stream decompresses and decrypts as necessary, as it is read. + + + + + See the documentation on the method for + full details. This overload allows the application to specify a + password for the ZipEntry to be read. + + + + The password to use for decrypting the entry. + The Stream for reading. + + + + Pass in either basedir or s, but not both. + In other words, you can extract to a stream or to a directory (filesystem), but not both! + The Password param is required for encrypted entries. + + + + + Extract to a stream + In other words, you can extract to a stream or to a directory (filesystem), but not both! + The Password param is required for encrypted entries. + + + + + Validates that the args are consistent; returning whether the caller can return + because it's done, or not (caller should continue) + + + + + Validates that the args are consistent; returning whether the caller can return + because it's done, or not (caller should continue) + + + + + Reads one ZipEntry from the given stream. The content for + the entry does not get decompressed or decrypted. This method + basically reads metadata, and seeks. + + the ZipContainer this entry belongs to. + + true of this is the first entry being read from the stream. + + the ZipEntry read from the stream. + + + + Finds a particular segment in the given extra field. + This is used when modifying a previously-generated + extra field, in particular when removing the AES crypto + segment in the extra field. + + + + + At current cursor position in the stream, read the extra + field, and set the properties on the ZipEntry instance + appropriately. This can be called when processing the + Extra field in the Central Directory, or in the local + header. + + + + + generate and return a byte array that encodes the filename + for the entry. + + + + side effects: generate and store into _CommentBytes the + byte array for any comment attached to the entry. Also + sets _actualEncoding to indicate the actual encoding + used. The same encoding is used for both filename and + comment. + + + + + + Stores the position of the entry source stream, or, if the position is + already stored, seeks to that position. + + + + + This method is called in prep for reading the source stream. If PKZIP + encryption is used, then we need to calc the CRC32 before doing the + encryption, because the CRC is used in the 12th byte of the PKZIP + encryption header. So, we need to be able to seek backward in the source + when saving the ZipEntry. This method is called from the place that + calculates the CRC, and also from the method that does the encryption of + the file data. + + + + The first time through, this method sets the _sourceStreamOriginalPosition + field. Subsequent calls to this method seek to that position. + + + + + + Copy metadata that may have been changed by the app. We do this when + resetting the zipFile instance. If the app calls Save() on a ZipFile, then + tries to party on that file some more, we may need to Reset() it , which + means re-reading the entries and then copying the metadata. I think. + + + + + Set the input stream and get its length, if possible. The length is + used for progress updates, AND, to allow an optimization in case of + a stream/file of zero length. In that case we skip the Encrypt and + compression Stream. (like DeflateStream or BZip2OutputStream) + + + + + Prepare the given stream for output - wrap it in a CountingStream, and + then in a CRC stream, and an encryptor and deflator as appropriate. + + + + Previously this was used in ZipEntry.Write(), but in an effort to + introduce some efficiencies in that method I've refactored to put the + code inline. This method still gets called by ZipOutputStream. + + + + + + An enum that specifies the type of timestamp available on the ZipEntry. + + + + + + The last modified time of a file can be stored in multiple ways in + a zip file, and they are not mutually exclusive: + + + + + In the so-called "DOS" format, which has a 2-second precision. Values + are rounded to the nearest even second. For example, if the time on the + file is 12:34:43, then it will be stored as 12:34:44. This first value + is accessible via the LastModified property. This value is always + present in the metadata for each zip entry. In some cases the value is + invalid, or zero. + + + + In the so-called "Windows" or "NTFS" format, as an 8-byte integer + quantity expressed as the number of 1/10 milliseconds (in other words + the number of 100 nanosecond units) since January 1, 1601 (UTC). This + format is how Windows represents file times. This time is accessible + via the ModifiedTime property. + + + + In the "Unix" format, a 4-byte quantity specifying the number of seconds since + January 1, 1970 UTC. + + + + In an older format, now deprecated but still used by some current + tools. This format is also a 4-byte quantity specifying the number of + seconds since January 1, 1970 UTC. + + + + + + This bit field describes which of the formats were found in a ZipEntry that was read. + + + + + + + Default value. + + + + + A DOS timestamp with 2-second precision. + + + + + A Windows timestamp with 100-ns precision. + + + + + A Unix timestamp with 1-second precision. + + + + + A Unix timestamp with 1-second precision, stored in InfoZip v1 format. This + format is outdated and is supported for reading archives only. + + + + + The method of compression to use for a particular ZipEntry. + + + + PKWare's + ZIP Specification describes a number of distinct + cmopression methods that can be used within a zip + file. DotNetZip supports a subset of them. + + + + + No compression at all. For COM environments, the value is 0 (zero). + + + + + DEFLATE compression, as described in IETF RFC + 1951. This is the "normal" compression used in zip + files. For COM environments, the value is 8. + + + + + BZip2 compression, a compression algorithm developed by Julian Seward. + For COM environments, the value is 12. + + + + + An enum that specifies the source of the ZipEntry. + + + + + Default value. Invalid on a bonafide ZipEntry. + + + + + The entry was instantiated by calling AddFile() or another method that + added an entry from the filesystem. + + + + + The entry was instantiated via or + . + + + + + The ZipEntry was instantiated by reading a zipfile. + + + + + The content for the ZipEntry will be or was provided by the WriteDelegate. + + + + + The content for the ZipEntry will be obtained from the stream dispensed by the OpenDelegate. + The entry was instantiated via . + + + + + The content for the ZipEntry will be or was obtained from a ZipOutputStream. + + + + + An enum providing the options when an error occurs during opening or reading + of a file or directory that is being saved to a zip file. + + + + + This enum describes the actions that the library can take when an error occurs + opening or reading a file, as it is being saved into a Zip archive. + + + + In some cases an error will occur when DotNetZip tries to open a file to be + added to the zip archive. In other cases, an error might occur after the + file has been successfully opened, while DotNetZip is reading the file. + + + + The first problem might occur when calling AddDirectory() on a directory + that contains a Clipper .dbf file; the file is locked by Clipper and + cannot be opened by another process. An example of the second problem is + the ERROR_LOCK_VIOLATION that results when a file is opened by another + process, but not locked, and a range lock has been taken on the file. + Microsoft Outlook takes range locks on .PST files. + + + + + + Throw an exception when an error occurs while zipping. This is the default + behavior. (For COM clients, this is a 0 (zero).) + + + + + When an error occurs during zipping, for example a file cannot be opened, + skip the file causing the error, and continue zipping. (For COM clients, + this is a 1.) + + + + + When an error occurs during zipping, for example a file cannot be opened, + retry the operation that caused the error. Be careful with this option. If + the error is not temporary, the library will retry forever. (For COM + clients, this is a 2.) + + + + + When an error occurs, invoke the zipError event. The event type used is + . A typical use of this option: + a GUI application may wish to pop up a dialog to allow the user to view the + error that occurred, and choose an appropriate action. After your + processing in the error event, if you want to skip the file, set on the + ZipProgressEventArgs.CurrentEntry to Skip. If you want the + exception to be thrown, set ZipErrorAction on the CurrentEntry + to Throw. If you want to cancel the zip, set + ZipProgressEventArgs.Cancel to true. Cancelling differs from using + Skip in that a cancel will not save any further entries, if there are any. + (For COM clients, the value of this enum is a 3.) + + + + + Options for using ZIP64 extensions when saving zip archives. + + + + + + Designed many years ago, the original zip + specification from PKWARE allowed for 32-bit quantities for the + compressed and uncompressed sizes of zip entries, as well as a 32-bit quantity + for specifying the length of the zip archive itself, and a maximum of 65535 + entries. These limits are now regularly exceeded in many backup and archival + scenarios. Recently, PKWare added extensions to the original zip spec, called + "ZIP64 extensions", to raise those limitations. This property governs whether + DotNetZip will use those extensions when writing zip archives. The use of + these extensions is optional and explicit in DotNetZip because, despite the + status of ZIP64 as a bona fide standard, many other zip tools and libraries do + not support ZIP64, and therefore a zip file with ZIP64 extensions may be + unreadable by some of those other tools. + + + + Set this property to to always use ZIP64 + extensions when saving, regardless of whether your zip archive needs it. + Suppose you add 5 files, each under 100k, to a ZipFile. If you specify Always + for this flag, you will get a ZIP64 archive, though the archive does not need + to use ZIP64 because none of the original zip limits had been exceeded. + + + + Set this property to to tell the DotNetZip + library to never use ZIP64 extensions. This is useful for maximum + compatibility and interoperability, at the expense of the capability of + handling large files or large archives. NB: Windows Explorer in Windows XP + and Windows Vista cannot currently extract files from a zip64 archive, so if + you want to guarantee that a zip archive produced by this library will work in + Windows Explorer, use Never. If you set this property to , and your application creates a zip that would + exceed one of the Zip limits, the library will throw an exception while saving + the zip file. + + + + Set this property to to tell the + DotNetZip library to use the ZIP64 extensions when required by the + entry. After the file is compressed, the original and compressed sizes are + checked, and if they exceed the limits described above, then zip64 can be + used. That is the general idea, but there is an additional wrinkle when saving + to a non-seekable device, like the ASP.NET Response.OutputStream, or + Console.Out. When using non-seekable streams for output, the entry + header - which indicates whether zip64 is in use - is emitted before it is + known if zip64 is necessary. It is only after all entries have been saved + that it can be known if ZIP64 will be required. On seekable output streams, + after saving all entries, the library can seek backward and re-emit the zip + file header to be consistent with the actual ZIP64 requirement. But using a + non-seekable output stream, the library cannot seek backward, so the header + can never be changed. In other words, the archive's use of ZIP64 extensions is + not alterable after the header is emitted. Therefore, when saving to + non-seekable streams, using is the same + as using : it will always produce a zip + archive that uses ZIP64 extensions. + + + + + + + The default behavior, which is "Never". + (For COM clients, this is a 0 (zero).) + + + + + Do not use ZIP64 extensions when writing zip archives. + (For COM clients, this is a 0 (zero).) + + + + + Use ZIP64 extensions when writing zip archives, as necessary. + For example, when a single entry exceeds 0xFFFFFFFF in size, or when the archive as a whole + exceeds 0xFFFFFFFF in size, or when there are more than 65535 entries in an archive. + (For COM clients, this is a 1.) + + + + + Always use ZIP64 extensions when writing zip archives, even when unnecessary. + (For COM clients, this is a 2.) + + + + + An enum representing the values on a three-way toggle switch + for various options in the library. This might be used to + specify whether to employ a particular text encoding, or to use + ZIP64 extensions, or some other option. + + + + + The default behavior. This is the same as "Never". + (For COM clients, this is a 0 (zero).) + + + + + Never use the associated option. + (For COM clients, this is a 0 (zero).) + + + + + Use the associated behavior "as necessary." + (For COM clients, this is a 1.) + + + + + Use the associated behavior Always, whether necessary or not. + (For COM clients, this is a 2.) + + + + + A class for collecting the various options that can be used when + Reading zip files for extraction or update. + + + + + When reading a zip file, there are several options an + application can set, to modify how the file is read, or what + the library does while reading. This class collects those + options into one container. + + + + Pass an instance of the ReadOptions class into the + ZipFile.Read() method. + + + . + . + + + + + An event handler for Read operations. When opening large zip + archives, you may want to display a progress bar or other + indicator of status progress while reading. This parameter + allows you to specify a ReadProgress Event Handler directly. + When you call Read(), the progress event is invoked as + necessary. + + + + + The System.IO.TextWriter to use for writing verbose status messages + during operations on the zip archive. A console application may wish to + pass System.Console.Out to get messages on the Console. A graphical + or headless application may wish to capture the messages in a different + TextWriter, such as a System.IO.StringWriter. + + + + + The System.Text.Encoding to use when reading in the zip archive. Be + careful specifying the encoding. If the value you use here is not the same + as the Encoding used when the zip archive was created (possibly by a + different archiver) you will get unexpected results and possibly exceptions. + + + + + + + + Provides a stream metaphor for reading zip files. + + + + + This class provides an alternative programming model for reading zip files to + the one enabled by the class. Use this when reading zip + files, as an alternative to the class, when you would + like to use a Stream class to read the file. + + + + Some application designs require a readable stream for input. This stream can + be used to read a zip file, and extract entries. + + + + Both the ZipInputStream class and the ZipFile class can be used + to read and extract zip files. Both of them support many of the common zip + features, including Unicode, different compression levels, and ZIP64. The + programming models differ. For example, when extracting entries via calls to + the GetNextEntry() and Read() methods on the + ZipInputStream class, the caller is responsible for creating the file, + writing the bytes into the file, setting the attributes on the file, and + setting the created, last modified, and last accessed timestamps on the + file. All of these things are done automatically by a call to ZipEntry.Extract(). For this reason, the + ZipInputStream is generally recommended for when your application wants + to extract the data, without storing that data into a file. + + + + Aside from the obvious differences in programming model, there are some + differences in capability between the ZipFile class and the + ZipInputStream class. + + + + + ZipFile can be used to create or update zip files, or read and + extract zip files. ZipInputStream can be used only to read and + extract zip files. If you want to use a stream to create zip files, check + out the . + + + + ZipInputStream cannot read segmented or spanned + zip files. + + + + ZipInputStream will not read Zip file comments. + + + + When reading larger files, ZipInputStream will always underperform + ZipFile. This is because the ZipInputStream does a full scan on the + zip file, while the ZipFile class reads the central directory of the + zip file. + + + + + + + + + Create a ZipInputStream, wrapping it around an existing stream. + + + + + + While the class is generally easier + to use, this class provides an alternative to those + applications that want to read from a zipfile directly, + using a . + + + + Both the ZipInputStream class and the ZipFile class can be used + to read and extract zip files. Both of them support many of the common zip + features, including Unicode, different compression levels, and ZIP64. The + programming models differ. For example, when extracting entries via calls to + the GetNextEntry() and Read() methods on the + ZipInputStream class, the caller is responsible for creating the file, + writing the bytes into the file, setting the attributes on the file, and + setting the created, last modified, and last accessed timestamps on the + file. All of these things are done automatically by a call to ZipEntry.Extract(). For this reason, the + ZipInputStream is generally recommended for when your application wants + to extract the data, without storing that data into a file. + + + + Aside from the obvious differences in programming model, there are some + differences in capability between the ZipFile class and the + ZipInputStream class. + + + + + ZipFile can be used to create or update zip files, or read and extract + zip files. ZipInputStream can be used only to read and extract zip + files. If you want to use a stream to create zip files, check out the . + + + + ZipInputStream cannot read segmented or spanned + zip files. + + + + ZipInputStream will not read Zip file comments. + + + + When reading larger files, ZipInputStream will always underperform + ZipFile. This is because the ZipInputStream does a full scan on the + zip file, while the ZipFile class reads the central directory of the + zip file. + + + + + + + + The stream to read. It must be readable. This stream will be closed at + the time the ZipInputStream is closed. + + + + + This example shows how to read a zip file, and extract entries, using the + ZipInputStream class. + + + private void Unzip() + { + byte[] buffer= new byte[2048]; + int n; + using (var raw = File.Open(inputFileName, FileMode.Open, FileAccess.Read)) + { + using (var input= new ZipInputStream(raw)) + { + ZipEntry e; + while (( e = input.GetNextEntry()) != null) + { + if (e.IsDirectory) continue; + string outputPath = Path.Combine(extractDir, e.FileName); + using (var output = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite)) + { + while ((n= input.Read(buffer, 0, buffer.Length)) > 0) + { + output.Write(buffer,0,n); + } + } + } + } + } + } + + + + Private Sub UnZip() + Dim inputFileName As String = "MyArchive.zip" + Dim extractDir As String = "extract" + Dim buffer As Byte() = New Byte(2048) {} + Using raw As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read) + Using input As ZipInputStream = New ZipInputStream(raw) + Dim e As ZipEntry + Do While (Not e = input.GetNextEntry Is Nothing) + If Not e.IsDirectory Then + Using output As FileStream = File.Open(Path.Combine(extractDir, e.FileName), _ + FileMode.Create, FileAccess.ReadWrite) + Dim n As Integer + Do While (n = input.Read(buffer, 0, buffer.Length) > 0) + output.Write(buffer, 0, n) + Loop + End Using + End If + Loop + End Using + End Using + End Sub + + + + + + Create a ZipInputStream, given the name of an existing zip file. + + + + + + This constructor opens a FileStream for the given zipfile, and + wraps a ZipInputStream around that. See the documentation for the + constructor for full details. + + + + While the class is generally easier + to use, this class provides an alternative to those + applications that want to read from a zipfile directly, + using a . + + + + + + The name of the filesystem file to read. + + + + + This example shows how to read a zip file, and extract entries, using the + ZipInputStream class. + + + private void Unzip() + { + byte[] buffer= new byte[2048]; + int n; + using (var input= new ZipInputStream(inputFileName)) + { + ZipEntry e; + while (( e = input.GetNextEntry()) != null) + { + if (e.IsDirectory) continue; + string outputPath = Path.Combine(extractDir, e.FileName); + using (var output = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite)) + { + while ((n= input.Read(buffer, 0, buffer.Length)) > 0) + { + output.Write(buffer,0,n); + } + } + } + } + } + + + + Private Sub UnZip() + Dim inputFileName As String = "MyArchive.zip" + Dim extractDir As String = "extract" + Dim buffer As Byte() = New Byte(2048) {} + Using input As ZipInputStream = New ZipInputStream(inputFileName) + Dim e As ZipEntry + Do While (Not e = input.GetNextEntry Is Nothing) + If Not e.IsDirectory Then + Using output As FileStream = File.Open(Path.Combine(extractDir, e.FileName), _ + FileMode.Create, FileAccess.ReadWrite) + Dim n As Integer + Do While (n = input.Read(buffer, 0, buffer.Length) > 0) + output.Write(buffer, 0, n) + Loop + End Using + End If + Loop + End Using + End Sub + + + + + + Create a ZipInputStream, explicitly specifying whether to + keep the underlying stream open. + + + + See the documentation for the ZipInputStream(Stream) + constructor for a discussion of the class, and an example of how to use the class. + + + + The stream to read from. It must be readable. + + + + true if the application would like the stream + to remain open after the ZipInputStream has been closed. + + + + Provides a string representation of the instance. + + + This can be useful for debugging purposes. + + + a string representation of the instance. + + + + The text encoding to use when reading entries into the zip archive, for + those entries whose filenames or comments cannot be encoded with the + default (IBM437) encoding. + + + + + In its + zip specification, PKWare describes two options for encoding + filenames and comments: using IBM437 or UTF-8. But, some archiving tools + or libraries do not follow the specification, and instead encode + characters using the system default code page. For example, WinRAR when + run on a machine in Shanghai may encode filenames with the Big-5 Chinese + (950) code page. This behavior is contrary to the Zip specification, but + it occurs anyway. + + + + When using DotNetZip to read zip archives that use something other than + UTF-8 or IBM437, set this property to specify the code page to use when + reading encoded filenames and comments for each ZipEntry in the zip + file. + + + + This property is "provisional". When the entry in the zip archive is not + explicitly marked as using UTF-8, then IBM437 is used to decode filenames + and comments. If a loss of data would result from using IBM436 - + specifically when encoding and decoding is not reflexive - the codepage + specified here is used. It is possible, therefore, to have a given entry + with a Comment encoded in IBM437 and a FileName encoded with + the specified "provisional" codepage. + + + + When a zip file uses an arbitrary, non-UTF8 code page for encoding, there + is no standard way for the reader application - whether DotNetZip, WinZip, + WinRar, or something else - to know which codepage has been used for the + entries. Readers of zip files are not able to inspect the zip file and + determine the codepage that was used for the entries contained within it. + It is left to the application or user to determine the necessary codepage + when reading zip files encoded this way. If you use an incorrect codepage + when reading a zipfile, you will get entries with filenames that are + incorrect, and the incorrect filenames may even contain characters that + are not legal for use within filenames in Windows. Extracting entries with + illegal characters in the filenames will lead to exceptions. It's too bad, + but this is just the way things are with code pages in zip files. Caveat + Emptor. + + + + + + + Size of the work buffer to use for the ZLIB codec during decompression. + + + + Setting this affects the performance and memory efficiency of compression + and decompression. For larger files, setting this to a larger size may + improve performance, but the exact numbers vary depending on available + memory, and a bunch of other variables. I don't have good firm + recommendations on how to set it. You'll have to test it yourself. Or + just leave it alone and accept the default. + + + + + Sets the password to be used on the ZipInputStream instance. + + + + + + When reading a zip archive, this password is used to read and decrypt the + entries that are encrypted within the zip file. When entries within a zip + file use different passwords, set the appropriate password for the entry + before the first call to Read() for each entry. + + + + When reading an entry that is not encrypted, the value of this property is + ignored. + + + + + + + This example uses the ZipInputStream to read and extract entries from a + zip file, using a potentially different password for each entry. + + + byte[] buffer= new byte[2048]; + int n; + using (var raw = File.Open(_inputFileName, FileMode.Open, FileAccess.Read )) + { + using (var input= new ZipInputStream(raw)) + { + ZipEntry e; + while (( e = input.GetNextEntry()) != null) + { + input.Password = PasswordForEntry(e.FileName); + if (e.IsDirectory) continue; + string outputPath = Path.Combine(_extractDir, e.FileName); + using (var output = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite)) + { + while ((n= input.Read(buffer,0,buffer.Length)) > 0) + { + output.Write(buffer,0,n); + } + } + } + } + } + + + + + + + Read the data from the stream into the buffer. + + + + + The data for the zipentry will be decrypted and uncompressed, as + necessary, before being copied into the buffer. + + + + You must set the property before calling + Read() the first time for an encrypted entry. To determine if an + entry is encrypted and requires a password, check the ZipEntry.Encryption property. + + + + The buffer to hold the data read from the stream. + the offset within the buffer to copy the first byte read. + the number of bytes to read. + the number of bytes read, after decryption and decompression. + + + + Read the next entry from the zip file. + + + + + Call this method just before calling , + to position the pointer in the zip file to the next entry that can be + read. Subsequent calls to Read(), will decrypt and decompress the + data in the zip file, until Read() returns 0. + + + + Each time you call GetNextEntry(), the pointer in the wrapped + stream is moved to the next entry in the zip file. If you call , and thus re-position the pointer within + the file, you will need to call GetNextEntry() again, to insure + that the file pointer is positioned at the beginning of a zip entry. + + + + This method returns the ZipEntry. Using a stream approach, you will + read the raw bytes for an entry in a zip file via calls to Read(). + Alternatively, you can extract an entry into a file, or a stream, by + calling , or one of its siblings. + + + + + + The ZipEntry read. Returns null (or Nothing in VB) if there are no more + entries in the zip file. + + + + + + Dispose the stream. + + + + + This method disposes the ZipInputStream. It may also close the + underlying stream, depending on which constructor was used. + + + + Typically the application will call Dispose() implicitly, via + a using statement in C#, or a Using statement in VB. + + + + Application code won't call this code directly. This method may + be invoked in two distinct scenarios. If disposing == true, the + method has been called directly or indirectly by a user's code, + for example via the public Dispose() method. In this case, both + managed and unmanaged resources can be referenced and disposed. + If disposing == false, the method has been called by the runtime + from inside the object finalizer and this method should not + reference other objects; in that case only unmanaged resources + must be referenced or disposed. + + + + + true if the Dispose method was invoked by user code. + + + + + Always returns true. + + + + + Returns the value of CanSeek for the underlying (wrapped) stream. + + + + + Always returns false. + + + + + Returns the length of the underlying stream. + + + + + Gets or sets the position of the underlying stream. + + + Setting the position is equivalent to calling Seek(value, SeekOrigin.Begin). + + + + + This is a no-op. + + + + + This method always throws a NotSupportedException. + + ignored + ignored + ignored + + + + This method seeks in the underlying stream. + + + + + Call this method if you want to seek around within the zip file for random access. + + + + Applications can intermix calls to Seek() with calls to . After a call to Seek(), + GetNextEntry() will get the next ZipEntry that falls after + the current position in the input stream. You're on your own for finding + out just where to seek in the stream, to get to the various entries. + + + + + the offset point to seek to + the reference point from which to seek + The new position + + + + This method always throws a NotSupportedException. + + ignored + + + + Provides a stream metaphor for generating zip files. + + + + + This class writes zip files, as defined in the specification + for zip files described by PKWare. The compression for this + implementation is provided by a managed-code version of Zlib, included with + DotNetZip in the classes in the Ionic.Zlib namespace. + + + + This class provides an alternative programming model to the one enabled by the + class. Use this when creating zip files, as an + alternative to the class, when you would like to use a + Stream type to write the zip file. + + + + Both the ZipOutputStream class and the ZipFile class can be used + to create zip files. Both of them support many of the common zip features, + including Unicode, different compression levels, and ZIP64. They provide + very similar performance when creating zip files. + + + + The ZipFile class is generally easier to use than + ZipOutputStream and should be considered a higher-level interface. For + example, when creating a zip file via calls to the PutNextEntry() and + Write() methods on the ZipOutputStream class, the caller is + responsible for opening the file, reading the bytes from the file, writing + those bytes into the ZipOutputStream, setting the attributes on the + ZipEntry, and setting the created, last modified, and last accessed + timestamps on the zip entry. All of these things are done automatically by a + call to ZipFile.AddFile(). + For this reason, the ZipOutputStream is generally recommended for use + only when your application emits arbitrary data, not necessarily data from a + filesystem file, directly into a zip file, and does so using a Stream + metaphor. + + + + Aside from the differences in programming model, there are other + differences in capability between the two classes. + + + + + ZipFile can be used to read and extract zip files, in addition to + creating zip files. ZipOutputStream cannot read zip files. If you want + to use a stream to read zip files, check out the class. + + + + ZipOutputStream does not support the creation of segmented or spanned + zip files. + + + + ZipOutputStream cannot produce a self-extracting archive. + + + + + Be aware that the ZipOutputStream class implements the interface. In order for + ZipOutputStream to produce a valid zip file, you use use it within + a using clause (Using in VB), or call the Dispose() method + explicitly. See the examples for how to employ a using clause. + + + + Also, a note regarding compression performance: On the desktop .NET + Framework, DotNetZip can use a multi-threaded compression implementation + that provides significant speed increases on large files, over 300k or so, + at the cost of increased memory use at runtime. (The output of the + compression is almost exactly the same size). But, the multi-threaded + approach incurs a performance hit on smaller files. There's no way for the + ZipOutputStream to know whether parallel compression will be beneficial, + because the ZipOutputStream does not know how much data you will write + through the stream. You may wish to set the property to zero, if you are compressing + large files through ZipOutputStream. This will cause parallel + compression to be used, always. + + + + + + Create a ZipOutputStream, wrapping an existing stream. + + + + + The class is generally easier to use when creating + zip files. The ZipOutputStream offers a different metaphor for creating a + zip file, based on the class. + + + + + + The stream to wrap. It must be writable. This stream will be closed at + the time the ZipOutputStream is closed. + + + + + This example shows how to create a zip file, using the + ZipOutputStream class. + + + private void Zipup() + { + if (filesToZip.Count == 0) + { + System.Console.WriteLine("Nothing to do."); + return; + } + + using (var raw = File.Open(_outputFileName, FileMode.Create, FileAccess.ReadWrite )) + { + using (var output= new ZipOutputStream(raw)) + { + output.Password = "VerySecret!"; + output.Encryption = EncryptionAlgorithm.WinZipAes256; + + foreach (string inputFileName in filesToZip) + { + System.Console.WriteLine("file: {0}", inputFileName); + + output.PutNextEntry(inputFileName); + using (var input = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Write )) + { + byte[] buffer= new byte[2048]; + int n; + while ((n= input.Read(buffer,0,buffer.Length)) > 0) + { + output.Write(buffer,0,n); + } + } + } + } + } + } + + + + Private Sub Zipup() + Dim outputFileName As String = "XmlData.zip" + Dim filesToZip As String() = Directory.GetFiles(".", "*.xml") + If (filesToZip.Length = 0) Then + Console.WriteLine("Nothing to do.") + Else + Using raw As FileStream = File.Open(outputFileName, FileMode.Create, FileAccess.ReadWrite) + Using output As ZipOutputStream = New ZipOutputStream(raw) + output.Password = "VerySecret!" + output.Encryption = EncryptionAlgorithm.WinZipAes256 + Dim inputFileName As String + For Each inputFileName In filesToZip + Console.WriteLine("file: {0}", inputFileName) + output.PutNextEntry(inputFileName) + Using input As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) + Dim n As Integer + Dim buffer As Byte() = New Byte(2048) {} + Do While (n = input.Read(buffer, 0, buffer.Length) > 0) + output.Write(buffer, 0, n) + Loop + End Using + Next + End Using + End Using + End If + End Sub + + + + + + Create a ZipOutputStream that writes to a filesystem file. + + + + The class is generally easier to use when creating + zip files. The ZipOutputStream offers a different metaphor for creating a + zip file, based on the class. + + + + The name of the zip file to create. + + + + + This example shows how to create a zip file, using the + ZipOutputStream class. + + + private void Zipup() + { + if (filesToZip.Count == 0) + { + System.Console.WriteLine("Nothing to do."); + return; + } + + using (var output= new ZipOutputStream(outputFileName)) + { + output.Password = "VerySecret!"; + output.Encryption = EncryptionAlgorithm.WinZipAes256; + + foreach (string inputFileName in filesToZip) + { + System.Console.WriteLine("file: {0}", inputFileName); + + output.PutNextEntry(inputFileName); + using (var input = File.Open(inputFileName, FileMode.Open, FileAccess.Read, + FileShare.Read | FileShare.Write )) + { + byte[] buffer= new byte[2048]; + int n; + while ((n= input.Read(buffer,0,buffer.Length)) > 0) + { + output.Write(buffer,0,n); + } + } + } + } + } + + + + Private Sub Zipup() + Dim outputFileName As String = "XmlData.zip" + Dim filesToZip As String() = Directory.GetFiles(".", "*.xml") + If (filesToZip.Length = 0) Then + Console.WriteLine("Nothing to do.") + Else + Using output As ZipOutputStream = New ZipOutputStream(outputFileName) + output.Password = "VerySecret!" + output.Encryption = EncryptionAlgorithm.WinZipAes256 + Dim inputFileName As String + For Each inputFileName In filesToZip + Console.WriteLine("file: {0}", inputFileName) + output.PutNextEntry(inputFileName) + Using input As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) + Dim n As Integer + Dim buffer As Byte() = New Byte(2048) {} + Do While (n = input.Read(buffer, 0, buffer.Length) > 0) + output.Write(buffer, 0, n) + Loop + End Using + Next + End Using + End If + End Sub + + + + + + Create a ZipOutputStream. + + + + See the documentation for the ZipOutputStream(Stream) + constructor for an example. + + + + The stream to wrap. It must be writable. + + + + true if the application would like the stream + to remain open after the ZipOutputStream has been closed. + + + + Provides a string representation of the instance. + + + This can be useful for debugging purposes. + + + a string representation of the instance. + + + + Sets the password to be used on the ZipOutputStream instance. + + + + + + When writing a zip archive, this password is applied to the entries, not + to the zip archive itself. It applies to any ZipEntry subsequently + written to the ZipOutputStream. + + + + Using a password does not encrypt or protect the "directory" of the + archive - the list of entries contained in the archive. If you set the + Password property, the password actually applies to individual + entries that are added to the archive, subsequent to the setting of this + property. The list of filenames in the archive that is eventually created + will appear in clear text, but the contents of the individual files are + encrypted. This is how Zip encryption works. + + + + If you set this property, and then add a set of entries to the archive via + calls to PutNextEntry, then each entry is encrypted with that + password. You may also want to change the password between adding + different entries. If you set the password, add an entry, then set the + password to null (Nothing in VB), and add another entry, the + first entry is encrypted and the second is not. + + + + When setting the Password, you may also want to explicitly set the property, to specify how to encrypt the entries added + to the ZipFile. If you set the Password to a non-null value and do not + set , then PKZip 2.0 ("Weak") encryption is used. + This encryption is relatively weak but is very interoperable. If + you set the password to a null value (Nothing in VB), + Encryption is reset to None. + + + + Special case: if you wrap a ZipOutputStream around a non-seekable stream, + and use encryption, and emit an entry of zero bytes, the Close() or + PutNextEntry() following the entry will throw an exception. + + + + + + + The Encryption to use for entries added to the ZipOutputStream. + + + + + The specified Encryption is applied to the entries subsequently + written to the ZipOutputStream instance. + + + + If you set this to something other than + EncryptionAlgorithm.None, you will also need to set the + to a non-null, non-empty value in + order to actually get encryption on the entry. + + + + + ZipOutputStream.Password + ZipEntry.Encryption + + + + Size of the work buffer to use for the ZLIB codec during compression. + + + + Setting this may affect performance. For larger files, setting this to a + larger size may improve performance, but I'm not sure. Sorry, I don't + currently have good recommendations on how to set it. You can test it if + you like. + + + + + The compression strategy to use for all entries. + + + + Set the Strategy used by the ZLIB-compatible compressor, when compressing + data for the entries in the zip archive. Different compression strategies + work better on different sorts of data. The strategy parameter can affect + the compression ratio and the speed of compression but not the correctness + of the compresssion. For more information see . + + + + + The type of timestamp attached to the ZipEntry. + + + + Set this in order to specify the kind of timestamp that should be emitted + into the zip file for each entry. + + + + + Sets the compression level to be used for entries subsequently added to + the zip archive. + + + + + Varying the compression level used on entries can affect the + size-vs-speed tradeoff when compression and decompressing data streams + or files. + + + + As with some other properties on the ZipOutputStream class, like , and , + setting this property on a ZipOutputStream + instance will cause the specified CompressionLevel to be used on all + items that are subsequently added to the + ZipOutputStream instance. + + + + If you do not set this property, the default compression level is used, + which normally gives a good balance of compression efficiency and + compression speed. In some tests, using BestCompression can + double the time it takes to compress, while delivering just a small + increase in compression efficiency. This behavior will vary with the + type of data you compress. If you are in doubt, just leave this setting + alone, and accept the default. + + + + + + The compression method used on each entry added to the ZipOutputStream. + + + + + A comment attached to the zip archive. + + + + + + The application sets this property to specify a comment to be embedded + into the generated zip archive. + + + + According to PKWARE's + zip specification, the comment is not encrypted, even if there is a + password set on the zip file. + + + + The specification does not describe how to indicate the encoding used + on a comment string. Many "compliant" zip tools and libraries use + IBM437 as the code page for comments; DotNetZip, too, follows that + practice. On the other hand, there are situations where you want a + Comment to be encoded with something else, for example using code page + 950 "Big-5 Chinese". To fill that need, DotNetZip will encode the + comment following the same procedure it follows for encoding + filenames: (a) if is + Never, it uses the default encoding (IBM437). (b) if is Always, it always uses the + alternate encoding (). (c) if is AsNecessary, it uses the + alternate encoding only if the default encoding is not sufficient for + encoding the comment - in other words if decoding the result does not + produce the original string. This decision is taken at the time of + the call to ZipFile.Save(). + + + + + + + Specify whether to use ZIP64 extensions when saving a zip archive. + + + + + The default value for the property is . is + safest, in the sense that you will not get an Exception if a + pre-ZIP64 limit is exceeded. + + + + You must set this property before calling Write(). + + + + + + + Indicates whether ZIP64 extensions were used when saving the zip archive. + + + + The value is defined only after the ZipOutputStream has been closed. + + + + + Whether the ZipOutputStream should use case-insensitive comparisons when + checking for uniqueness of zip entries. + + + + + Though the zip specification doesn't prohibit zipfiles with duplicate + entries, Sane zip files have no duplicates, and the DotNetZip library + cannot create zip files with duplicate entries. If an application attempts + to call with a name that duplicates one + already used within the archive, the library will throw an Exception. + + + This property allows the application to specify whether the + ZipOutputStream instance considers ordinal case when checking for + uniqueness of zip entries. + + + + + + Indicates whether to encode entry filenames and entry comments using + Unicode (UTF-8). + + + + + The + PKWare zip specification provides for encoding file names and file + comments in either the IBM437 code page, or in UTF-8. This flag selects + the encoding according to that specification. By default, this flag is + false, and filenames and comments are encoded into the zip file in the + IBM437 codepage. Setting this flag to true will specify that filenames + and comments that cannot be encoded with IBM437 will be encoded with + UTF-8. + + + + Zip files created with strict adherence to the PKWare specification with + respect to UTF-8 encoding can contain entries with filenames containing + any combination of Unicode characters, including the full range of + characters from Chinese, Latin, Hebrew, Greek, Cyrillic, and many other + alphabets. However, because at this time, the UTF-8 portion of the PKWare + specification is not broadly supported by other zip libraries and + utilities, such zip files may not be readable by your favorite zip tool or + archiver. In other words, interoperability will decrease if you set this + flag to true. + + + + In particular, Zip files created with strict adherence to the PKWare + specification with respect to UTF-8 encoding will not work well with + Explorer in Windows XP or Windows Vista, because Windows compressed + folders, as far as I know, do not support UTF-8 in zip files. Vista can + read the zip files, but shows the filenames incorrectly. Unpacking from + Windows Vista Explorer will result in filenames that have rubbish + characters in place of the high-order UTF-8 bytes. + + + + Also, zip files that use UTF-8 encoding will not work well with Java + applications that use the java.util.zip classes, as of v5.0 of the Java + runtime. The Java runtime does not correctly implement the PKWare + specification in this regard. + + + + As a result, we have the unfortunate situation that "correct" behavior by + the DotNetZip library with regard to Unicode encoding of filenames during + zip creation will result in zip files that are readable by strictly + compliant and current tools (for example the most recent release of the + commercial WinZip tool); but these zip files will not be readable by + various other tools or libraries, including Windows Explorer. + + + + The DotNetZip library can read and write zip files with UTF8-encoded + entries, according to the PKware spec. If you use DotNetZip for both + creating and reading the zip file, and you use UTF-8, there will be no + loss of information in the filenames. For example, using a self-extractor + created by this library will allow you to unpack files correctly with no + loss of information in the filenames. + + + + If you do not set this flag, it will remain false. If this flag is false, + the ZipOutputStream will encode all filenames and comments using + the IBM437 codepage. This can cause "loss of information" on some + filenames, but the resulting zipfile will be more interoperable with other + utilities. As an example of the loss of information, diacritics can be + lost. The o-tilde character will be down-coded to plain o. The c with a + cedilla (Unicode 0xE7) used in Portugese will be downcoded to a c. + Likewise, the O-stroke character (Unicode 248), used in Danish and + Norwegian, will be down-coded to plain o. Chinese characters cannot be + represented in codepage IBM437; when using the default encoding, Chinese + characters in filenames will be represented as ?. These are all examples + of "information loss". + + + + The loss of information associated to the use of the IBM437 encoding is + inconvenient, and can also lead to runtime errors. For example, using + IBM437, any sequence of 4 Chinese characters will be encoded as ????. If + your application creates a ZipOutputStream, does not set the + encoding, then adds two files, each with names of four Chinese characters + each, this will result in a duplicate filename exception. In the case + where you add a single file with a name containing four Chinese + characters, the zipfile will save properly, but extracting that file + later, with any zip tool, will result in an error, because the question + mark is not legal for use within filenames on Windows. These are just a + few examples of the problems associated to loss of information. + + + + This flag is independent of the encoding of the content within the entries + in the zip file. Think of the zip file as a container - it supports an + encoding. Within the container are other "containers" - the file entries + themselves. The encoding within those entries is independent of the + encoding of the zip archive container for those entries. + + + + Rather than specify the encoding in a binary fashion using this flag, an + application can specify an arbitrary encoding via the property. Setting the encoding + explicitly when creating zip archives will result in non-compliant zip + files that, curiously, are fairly interoperable. The challenge is, the + PKWare specification does not provide for a way to specify that an entry + in a zip archive uses a code page that is neither IBM437 nor UTF-8. + Therefore if you set the encoding explicitly when creating a zip archive, + you must take care upon reading the zip archive to use the same code page. + If you get it wrong, the behavior is undefined and may result in incorrect + filenames, exceptions, stomach upset, hair loss, and acne. + + + + + + + The text encoding to use when emitting entries into the zip archive, for + those entries whose filenames or comments cannot be encoded with the + default (IBM437) encoding. + + + + + In its + zip specification, PKWare describes two options for encoding + filenames and comments: using IBM437 or UTF-8. But, some archiving tools + or libraries do not follow the specification, and instead encode + characters using the system default code page. For example, WinRAR when + run on a machine in Shanghai may encode filenames with the Big-5 Chinese + (950) code page. This behavior is contrary to the Zip specification, but + it occurs anyway. + + + + When using DotNetZip to write zip archives that will be read by one of + these other archivers, set this property to specify the code page to use + when encoding the and for each ZipEntry in the zip file, for + values that cannot be encoded with the default codepage for zip files, + IBM437. This is why this property is "provisional". In all cases, IBM437 + is used where possible, in other words, where no loss of data would + result. It is possible, therefore, to have a given entry with a + Comment encoded in IBM437 and a FileName encoded with the + specified "provisional" codepage. + + + + Be aware that a zip file created after you've explicitly set the + ProvisionalAlternateEncoding property to a value other than + IBM437 may not be compliant to the PKWare specification, and may not be + readable by compliant archivers. On the other hand, many (most?) + archivers are non-compliant and can read zip files created in arbitrary + code pages. The trick is to use or specify the proper codepage when + reading the zip. + + + + When creating a zip archive using this library, it is possible to change + the value of ProvisionalAlternateEncoding between each entry you + add, and between adding entries and the call to Close(). Don't do + this. It will likely result in a zipfile that is not readable. For best + interoperability, either leave ProvisionalAlternateEncoding + alone, or specify it only once, before adding any entries to the + ZipOutputStream instance. There is one exception to this + recommendation, described later. + + + + When using an arbitrary, non-UTF8 code page for encoding, there is no + standard way for the creator application - whether DotNetZip, WinZip, + WinRar, or something else - to formally specify in the zip file which + codepage has been used for the entries. As a result, readers of zip files + are not able to inspect the zip file and determine the codepage that was + used for the entries contained within it. It is left to the application + or user to determine the necessary codepage when reading zip files encoded + this way. If you use an incorrect codepage when reading a zipfile, you + will get entries with filenames that are incorrect, and the incorrect + filenames may even contain characters that are not legal for use within + filenames in Windows. Extracting entries with illegal characters in the + filenames will lead to exceptions. It's too bad, but this is just the way + things are with code pages in zip files. Caveat Emptor. + + + + One possible approach for specifying the code page for a given zip file is + to describe the code page in a human-readable form in the Zip comment. For + example, the comment may read "Entries in this archive are encoded in the + Big5 code page". For maximum interoperability, the zip comment in this + case should be encoded in the default, IBM437 code page. In this case, + the zip comment is encoded using a different page than the filenames. To + do this, Specify ProvisionalAlternateEncoding to your desired + region-specific code page, once before adding any entries, and then set + the property and reset + ProvisionalAlternateEncoding to IBM437 before calling Close(). + + + + + + A Text Encoding to use when encoding the filenames and comments for + all the ZipEntry items, during a ZipFile.Save() operation. + + + + Whether the encoding specified here is used during the save depends + on . + + + + + + A flag that tells if and when this instance should apply + AlternateEncoding to encode the filenames and comments associated to + of ZipEntry objects contained within this instance. + + + + + The default text encoding used in zip archives. It is numeric 437, also + known as IBM437. + + + + + + The size threshold for an entry, above which a parallel deflate is used. + + + + + + DotNetZip will use multiple threads to compress any ZipEntry, when + the CompressionMethod is Deflate, and if the entry is + larger than the given size. Zero means "always use parallel + deflate", while -1 means "never use parallel deflate". + + + + If the entry size cannot be known before compression, as with any entry + added via a ZipOutputStream, then Parallel deflate will never be + performed, unless the value of this property is zero. + + + + A parallel deflate operations will speed up the compression of + large files, on computers with multiple CPUs or multiple CPU + cores. For files above 1mb, on a dual core or dual-cpu (2p) + machine, the time required to compress the file can be 70% of the + single-threaded deflate. For very large files on 4p machines the + compression can be done in 30% of the normal time. The downside + is that parallel deflate consumes extra memory during the deflate, + and the deflation is slightly less effective. + + + + Parallel deflate tends to not be as effective as single-threaded deflate + because the original data stream is split into multiple independent + buffers, each of which is compressed in parallel. But because they are + treated independently, there is no opportunity to share compression + dictionaries, and additional framing bytes must be added to the output + stream. For that reason, a deflated stream may be slightly larger when + compressed using parallel deflate, as compared to a traditional + single-threaded deflate. For files of about 512k, the increase over the + normal deflate is as much as 5% of the total compressed size. For larger + files, the difference can be as small as 0.1%. + + + + Multi-threaded compression does not give as much an advantage when using + Encryption. This is primarily because encryption tends to slow down + the entire pipeline. Also, multi-threaded compression gives less of an + advantage when using lower compression levels, for example . You may have to perform + some tests to determine the best approach for your situation. + + + + The default value for this property is -1, which means parallel + compression will not be performed unless you set it to zero. + + + + + + + The maximum number of buffer pairs to use when performing + parallel compression. + + + + + This property sets an upper limit on the number of memory + buffer pairs to create when performing parallel + compression. The implementation of the parallel + compression stream allocates multiple buffers to + facilitate parallel compression. As each buffer fills up, + the stream uses + ThreadPool.QueueUserWorkItem() to compress those + buffers in a background threadpool thread. After a buffer + is compressed, it is re-ordered and written to the output + stream. + + + + A higher number of buffer pairs enables a higher degree of + parallelism, which tends to increase the speed of compression on + multi-cpu computers. On the other hand, a higher number of buffer + pairs also implies a larger memory consumption, more active worker + threads, and a higher cpu utilization for any compression. This + property enables the application to limit its memory consumption and + CPU utilization behavior depending on requirements. + + + + For each compression "task" that occurs in parallel, there are 2 + buffers allocated: one for input and one for output. This property + sets a limit for the number of pairs. The total amount of storage + space allocated for buffering will then be (N*S*2), where N is the + number of buffer pairs, S is the size of each buffer (). By default, DotNetZip allocates 4 buffer + pairs per CPU core, so if your machine has 4 cores, and you retain + the default buffer size of 128k, then the + ParallelDeflateOutputStream will use 4 * 4 * 2 * 128kb of buffer + memory in total, or 4mb, in blocks of 128kb. If you then set this + property to 8, then the number will be 8 * 2 * 128kb of buffer + memory, or 2mb. + + + + CPU utilization will also go up with additional buffers, because a + larger number of buffer pairs allows a larger number of background + threads to compress in parallel. If you find that parallel + compression is consuming too much memory or CPU, you can adjust this + value downward. + + + + The default value is 16. Different values may deliver better or + worse results, depending on your priorities and the dynamic + performance characteristics of your storage and compute resources. + + + + This property is not the number of buffer pairs to use; it is an + upper limit. An illustration: Suppose you have an application that + uses the default value of this property (which is 16), and it runs + on a machine with 2 CPU cores. In that case, DotNetZip will allocate + 4 buffer pairs per CPU core, for a total of 8 pairs. The upper + limit specified by this property has no effect. + + + + The application can set this value at any time, but it is + effective only if set before calling + ZipOutputStream.Write() for the first time. + + + + + + + + + Returns true if an entry by the given name has already been written + to the ZipOutputStream. + + + + The name of the entry to scan for. + + + + true if an entry by the given name has already been written. + + + + + Write the data from the buffer to the stream. + + + + As the application writes data into this stream, the data may be + compressed and encrypted before being written out to the underlying + stream, depending on the settings of the + and the properties. + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Specify the name of the next entry that will be written to the zip file. + + + + + Call this method just before calling , to + specify the name of the entry that the next set of bytes written to + the ZipOutputStream belongs to. All subsequent calls to Write, + until the next call to PutNextEntry, + will be inserted into the named entry in the zip file. + + + + If the used in PutNextEntry() ends in + a slash, then the entry added is marked as a directory. Because directory + entries do not contain data, a call to Write(), before an + intervening additional call to PutNextEntry(), will throw an + exception. + + + + If you don't call Write() between two calls to + PutNextEntry(), the first entry is inserted into the zip file as a + file of zero size. This may be what you want. + + + + Because PutNextEntry() closes out the prior entry, if any, this + method may throw if there is a problem with the prior entry. + + + + This method returns the ZipEntry. You can modify public properties + on the ZipEntry, such as , , and so on, until the first call to + ZipOutputStream.Write(), or until the next call to + PutNextEntry(). If you modify the ZipEntry after + having called Write(), you may get a runtime exception, or you may + silently get an invalid zip archive. + + + + + + + This example shows how to create a zip file, using the + ZipOutputStream class. + + + private void Zipup() + { + using (FileStream fs raw = File.Open(_outputFileName, FileMode.Create, FileAccess.ReadWrite )) + { + using (var output= new ZipOutputStream(fs)) + { + output.Password = "VerySecret!"; + output.Encryption = EncryptionAlgorithm.WinZipAes256; + output.PutNextEntry("entry1.txt"); + byte[] buffer= System.Text.Encoding.ASCII.GetBytes("This is the content for entry #1."); + output.Write(buffer,0,buffer.Length); + output.PutNextEntry("entry2.txt"); // this will be zero length + output.PutNextEntry("entry3.txt"); + buffer= System.Text.Encoding.ASCII.GetBytes("This is the content for entry #3."); + output.Write(buffer,0,buffer.Length); + } + } + } + + + + + The name of the entry to be added, including any path to be used + within the zip file. + + + + The ZipEntry created. + + + + + + Dispose the stream + + + + + This method writes the Zip Central directory, then closes the stream. The + application must call Dispose() (or Close) in order to produce a valid zip file. + + + + Typically the application will call Dispose() implicitly, via a using + statement in C#, or a Using statement in VB. + + + + + set this to true, always. + + + + Always returns false. + + + + + Always returns false. + + + + + Always returns true. + + + + + Always returns a NotSupportedException. + + + + + Setting this property always returns a NotSupportedException. Getting it + returns the value of the Position on the underlying stream. + + + + + This is a no-op. + + + + + This method always throws a NotSupportedException. + + ignored + ignored + ignored + nothing + + + + This method always throws a NotSupportedException. + + ignored + ignored + nothing + + + + This method always throws a NotSupportedException. + + ignored + + + + Sort-of like a factory method, ForUpdate is used only when + the application needs to update the zip entry metadata for + a segmented zip file, when the starting segment is earlier + than the ending segment, for a particular entry. + + + + The update is always contiguous, never rolls over. As a + result, this method doesn't need to return a ZSS; it can + simply return a FileStream. That's why it's "sort of" + like a Factory method. + + + Caller must Close/Dispose the stream object returned by + this method. + + + + + + Name of the filesystem file corresponding to the current segment. + + + + The name is not always the name currently being used in the + filesystem. When rwMode is RwMode.Write, the filesystem file has a + temporary name until the stream is closed or until the next segment is + started. + + + + + + Read from the stream + + the buffer to read + the offset at which to start + the number of bytes to read + the number of bytes actually read + + + + Write to the stream. + + the buffer from which to write + the offset at which to start writing + the number of bytes to write + + + + Enumerates the options for a logical conjunction. This enum is intended for use + internally by the FileSelector class. + + + + + FileSelector encapsulates logic that selects files from a source - a zip file + or the filesystem - based on a set of criteria. This class is used internally + by the DotNetZip library, in particular for the AddSelectedFiles() methods. + This class can also be used independently of the zip capability in DotNetZip. + + + + + + The FileSelector class is used internally by the ZipFile class for selecting + files for inclusion into the ZipFile, when the method, or one of + its overloads, is called. It's also used for the methods. Typically, an + application that creates or manipulates Zip archives will not directly + interact with the FileSelector class. + + + + Some applications may wish to use the FileSelector class directly, to + select files from disk volumes based on a set of criteria, without creating or + querying Zip archives. The file selection criteria include: a pattern to + match the filename; the last modified, created, or last accessed time of the + file; the size of the file; and the attributes of the file. + + + + Consult the documentation for + for more information on specifying the selection criteria. + + + + + + + Constructor that allows the caller to specify file selection criteria. + + + + + This constructor allows the caller to specify a set of criteria for + selection of files. + + + + See for a description of + the syntax of the selectionCriteria string. + + + + By default the FileSelector will traverse NTFS Reparse Points. To + change this, use FileSelector(String, bool). + + + + The criteria for file selection. + + + + Constructor that allows the caller to specify file selection criteria. + + + + + This constructor allows the caller to specify a set of criteria for + selection of files. + + + + See for a description of + the syntax of the selectionCriteria string. + + + + The criteria for file selection. + + whether to traverse NTFS reparse points (junctions). + + + + + The string specifying which files to include when retrieving. + + + + + Specify the criteria in statements of 3 elements: a noun, an operator, + and a value. Consider the string "name != *.doc" . The noun is + "name". The operator is "!=", implying "Not Equal". The value is + "*.doc". That criterion, in English, says "all files with a name that + does not end in the .doc extension." + + + + Supported nouns include "name" (or "filename") for the filename; + "atime", "mtime", and "ctime" for last access time, last modfied time, + and created time of the file, respectively; "attributes" (or "attrs") + for the file attributes; "size" (or "length") for the file length + (uncompressed); and "type" for the type of object, either a file or a + directory. The "attributes", "type", and "name" nouns all support = + and != as operators. The "size", "atime", "mtime", and "ctime" nouns + support = and !=, and >, >=, <, <= as well. The times are + taken to be expressed in local time. + + + + Specify values for the file attributes as a string with one or more of + the characters H,R,S,A,I,L in any order, implying file attributes of + Hidden, ReadOnly, System, Archive, NotContextIndexed, and ReparsePoint + (symbolic link) respectively. + + + + To specify a time, use YYYY-MM-DD-HH:mm:ss or YYYY/MM/DD-HH:mm:ss as + the format. If you omit the HH:mm:ss portion, it is assumed to be + 00:00:00 (midnight). + + + + The value for a size criterion is expressed in integer quantities of + bytes, kilobytes (use k or kb after the number), megabytes (m or mb), + or gigabytes (g or gb). + + + + The value for a name is a pattern to match against the filename, + potentially including wildcards. The pattern follows CMD.exe glob + rules: * implies one or more of any character, while ? implies one + character. If the name pattern contains any slashes, it is matched to + the entire filename, including the path; otherwise, it is matched + against only the filename without the path. This means a pattern of + "*\*.*" matches all files one directory level deep, while a pattern of + "*.*" matches all files in all directories. + + + + To specify a name pattern that includes spaces, use single quotes + around the pattern. A pattern of "'* *.*'" will match all files that + have spaces in the filename. The full criteria string for that would + be "name = '* *.*'" . + + + + The value for a type criterion is either F (implying a file) or D + (implying a directory). + + + + Some examples: + + + + + criteria + Files retrieved + + + + name != *.xls + any file with an extension that is not .xls + + + + + name = *.mp3 + any file with a .mp3 extension. + + + + + *.mp3 + (same as above) any file with a .mp3 extension. + + + + + attributes = A + all files whose attributes include the Archive bit. + + + + + attributes != H + all files whose attributes do not include the Hidden bit. + + + + + mtime > 2009-01-01 + all files with a last modified time after January 1st, 2009. + + + + + ctime > 2009/01/01-03:00:00 + all files with a created time after 3am (local time), + on January 1st, 2009. + + + + + size > 2gb + all files whose uncompressed size is greater than 2gb. + + + + + type = D + all directories in the filesystem. + + + + + + You can combine criteria with the conjunctions AND, OR, and XOR. Using + a string like "name = *.txt AND size >= 100k" for the + selectionCriteria retrieves entries whose names end in .txt, and whose + uncompressed size is greater than or equal to 100 kilobytes. + + + + For more complex combinations of criteria, you can use parenthesis to + group clauses in the boolean logic. Absent parenthesis, the + precedence of the criterion atoms is determined by order of + appearance. Unlike the C# language, the AND conjunction does not take + precendence over the logical OR. This is important only in strings + that contain 3 or more criterion atoms. In other words, "name = *.txt + and size > 1000 or attributes = H" implies "((name = *.txt AND size + > 1000) OR attributes = H)" while "attributes = H OR name = *.txt + and size > 1000" evaluates to "((attributes = H OR name = *.txt) + AND size > 1000)". When in doubt, use parenthesis. + + + + Using time properties requires some extra care. If you want to + retrieve all entries that were last updated on 2009 February 14, + specify "mtime >= 2009-02-14 AND mtime < 2009-02-15". Read this + to say: all files updated after 12:00am on February 14th, until + 12:00am on February 15th. You can use the same bracketing approach to + specify any time period - a year, a month, a week, and so on. + + + + The syntax allows one special case: if you provide a string with no + spaces, it is treated as a pattern to match for the filename. + Therefore a string like "*.xls" will be equivalent to specifying "name + = *.xls". This "shorthand" notation does not work with compound + criteria. + + + + There is no logic in this class that insures that the inclusion + criteria are internally consistent. For example, it's possible to + specify criteria that says the file must have a size of less than 100 + bytes, as well as a size that is greater than 1000 bytes. Obviously + no file will ever satisfy such criteria, but this class does not check + for or detect such inconsistencies. + + + + + + Thrown in the setter if the value has an invalid syntax. + + + + + Indicates whether searches will traverse NTFS reparse points, like Junctions. + + + + + Returns a string representation of the FileSelector object. + + The string representation of the boolean logic statement of the file + selection criteria for this instance. + + + + Returns the names of the files in the specified directory + that fit the selection criteria specified in the FileSelector. + + + + This is equivalent to calling + with recurseDirectories = false. + + + + The name of the directory over which to apply the FileSelector + criteria. + + + + A collection of strings containing fully-qualified pathnames of files + that match the criteria specified in the FileSelector instance. + + + + + Returns the names of the files in the specified directory that fit the + selection criteria specified in the FileSelector, optionally recursing + through subdirectories. + + + + This method applies the file selection criteria contained in the + FileSelector to the files contained in the given directory, and + returns the names of files that conform to the criteria. + + + + The name of the directory over which to apply the FileSelector + criteria. + + + + Whether to recurse through subdirectories when applying the file + selection criteria. + + + + A collection of strings containing fully-qualified pathnames of files + that match the criteria specified in the FileSelector instance. + + + + + Retrieve the ZipEntry items in the ZipFile that conform to the specified criteria. + + + + + This method applies the criteria set in the FileSelector instance (as described in + the ) to the specified ZipFile. Using this + method, for example, you can retrieve all entries from the given ZipFile that + have filenames ending in .txt. + + + + Normally, applications would not call this method directly. This method is used + by the ZipFile class. + + + + Using the appropriate SelectionCriteria, you can retrieve entries based on size, + time, and attributes. See for a + description of the syntax of the SelectionCriteria string. + + + + + The ZipFile from which to retrieve entries. + + a collection of ZipEntry objects that conform to the criteria. + + + + Retrieve the ZipEntry items in the ZipFile that conform to the specified criteria. + + + + + This method applies the criteria set in the FileSelector instance (as described in + the ) to the specified ZipFile. Using this + method, for example, you can retrieve all entries from the given ZipFile that + have filenames ending in .txt. + + + + Normally, applications would not call this method directly. This method is used + by the ZipFile class. + + + + This overload allows the selection of ZipEntry instances from the ZipFile to be restricted + to entries contained within a particular directory in the ZipFile. + + + + Using the appropriate SelectionCriteria, you can retrieve entries based on size, + time, and attributes. See for a + description of the syntax of the SelectionCriteria string. + + + + + The ZipFile from which to retrieve entries. + + + the directory in the archive from which to select entries. If null, then + all directories in the archive are used. + + + a collection of ZipEntry objects that conform to the criteria. + + + + Summary description for EnumUtil. + + + + + Returns the value of the DescriptionAttribute if the specified Enum + value has one. If not, returns the ToString() representation of the + Enum value. + + The Enum to get the description for + + + + + Converts the string representation of the name or numeric value of one + or more enumerated constants to an equivalent enumerated object. + Note: use the DescriptionAttribute on enum values to enable this. + + The System.Type of the enumeration. + + A string containing the name or value to convert. + + + + + + Converts the string representation of the name or numeric value of one + or more enumerated constants to an equivalent enumerated object. A + parameter specified whether the operation is case-sensitive. Note: + use the DescriptionAttribute on enum values to enable this. + + The System.Type of the enumeration. + + A string containing the name or value to convert. + + + Whether the operation is case-sensitive or not. + + + + + Computes a CRC-32. The CRC-32 algorithm is parameterized - you + can set the polynomial and enable or disable bit + reversal. This can be used for GZIP, BZip2, or ZIP. + + + This type is used internally by DotNetZip; it is generally not used + directly by applications wishing to create, read, or manipulate zip + archive files. + + + + + Indicates the total number of bytes applied to the CRC. + + + + + Indicates the current CRC for all blocks slurped in. + + + + + Returns the CRC32 for the specified stream. + + The stream over which to calculate the CRC32 + the CRC32 calculation + + + + Returns the CRC32 for the specified stream, and writes the input into the + output stream. + + The stream over which to calculate the CRC32 + The stream into which to deflate the input + the CRC32 calculation + + + + Get the CRC32 for the given (word,byte) combo. This is a + computation defined by PKzip for PKZIP 2.0 (weak) encryption. + + The word to start with. + The byte to combine it with. + The CRC-ized result. + + + + Update the value for the running CRC32 using the given block of bytes. + This is useful when using the CRC32() class in a Stream. + + block of bytes to slurp + starting point in the block + how many bytes within the block to slurp + + + + Process one byte in the CRC. + + the byte to include into the CRC . + + + + Process a run of N identical bytes into the CRC. + + + + This method serves as an optimization for updating the CRC when a + run of identical bytes is found. Rather than passing in a buffer of + length n, containing all identical bytes b, this method accepts the + byte value and the length of the (virtual) buffer - the length of + the run. + + + the byte to include into the CRC. + the number of times that byte should be repeated. + + + + Combines the given CRC32 value with the current running total. + + + This is useful when using a divide-and-conquer approach to + calculating a CRC. Multiple threads can each calculate a + CRC32 on a segment of the data, and then combine the + individual CRC32 values at the end. + + the crc value to be combined with this one + the length of data the CRC value was calculated on + + + + Create an instance of the CRC32 class using the default settings: no + bit reversal, and a polynomial of 0xEDB88320. + + + + + Create an instance of the CRC32 class, specifying whether to reverse + data bits or not. + + + specify true if the instance should reverse data bits. + + + + In the CRC-32 used by BZip2, the bits are reversed. Therefore if you + want a CRC32 with compatibility with BZip2, you should pass true + here. In the CRC-32 used by GZIP and PKZIP, the bits are not + reversed; Therefore if you want a CRC32 with compatibility with + those, you should pass false. + + + + + + Create an instance of the CRC32 class, specifying the polynomial and + whether to reverse data bits or not. + + + The polynomial to use for the CRC, expressed in the reversed (LSB) + format: the highest ordered bit in the polynomial value is the + coefficient of the 0th power; the second-highest order bit is the + coefficient of the 1 power, and so on. Expressed this way, the + polynomial for the CRC-32C used in IEEE 802.3, is 0xEDB88320. + + + specify true if the instance should reverse data bits. + + + + + In the CRC-32 used by BZip2, the bits are reversed. Therefore if you + want a CRC32 with compatibility with BZip2, you should pass true + here for the reverseBits parameter. In the CRC-32 used by + GZIP and PKZIP, the bits are not reversed; Therefore if you want a + CRC32 with compatibility with those, you should pass false for the + reverseBits parameter. + + + + + + Reset the CRC-32 class - clear the CRC "remainder register." + + + + Use this when employing a single instance of this class to compute + multiple, distinct CRCs on multiple, distinct data blocks. + + + + + + A Stream that calculates a CRC32 (a checksum) on all bytes read, + or on all bytes written. + + + + + This class can be used to verify the CRC of a ZipEntry when + reading from a stream, or to calculate a CRC when writing to a + stream. The stream should be used to either read, or write, but + not both. If you intermix reads and writes, the results are not + defined. + + + + This class is intended primarily for use internally by the + DotNetZip library. + + + + + + The default constructor. + + + + Instances returned from this constructor will leave the underlying + stream open upon Close(). The stream uses the default CRC32 + algorithm, which implies a polynomial of 0xEDB88320. + + + The underlying stream + + + + The constructor allows the caller to specify how to handle the + underlying stream at close. + + + + The stream uses the default CRC32 algorithm, which implies a + polynomial of 0xEDB88320. + + + The underlying stream + true to leave the underlying stream + open upon close of the CrcCalculatorStream; false otherwise. + + + + A constructor allowing the specification of the length of the stream + to read. + + + + The stream uses the default CRC32 algorithm, which implies a + polynomial of 0xEDB88320. + + + Instances returned from this constructor will leave the underlying + stream open upon Close(). + + + The underlying stream + The length of the stream to slurp + + + + A constructor allowing the specification of the length of the stream + to read, as well as whether to keep the underlying stream open upon + Close(). + + + + The stream uses the default CRC32 algorithm, which implies a + polynomial of 0xEDB88320. + + + The underlying stream + The length of the stream to slurp + true to leave the underlying stream + open upon close of the CrcCalculatorStream; false otherwise. + + + + A constructor allowing the specification of the length of the stream + to read, as well as whether to keep the underlying stream open upon + Close(), and the CRC32 instance to use. + + + + The stream uses the specified CRC32 instance, which allows the + application to specify how the CRC gets calculated. + + + The underlying stream + The length of the stream to slurp + true to leave the underlying stream + open upon close of the CrcCalculatorStream; false otherwise. + the CRC32 instance to use to calculate the CRC32 + + + + Gets the total number of bytes run through the CRC32 calculator. + + + + This is either the total number of bytes read, or the total number of + bytes written, depending on the direction of this stream. + + + + + Provides the current CRC for all blocks slurped in. + + + + The running total of the CRC is kept as data is written or read + through the stream. read this property after all reads or writes to + get an accurate CRC for the entire stream. + + + + + + Indicates whether the underlying stream will be left open when the + CrcCalculatorStream is Closed. + + + + Set this at any point before calling . + + + + + + Read from the stream + + the buffer to read + the offset at which to start + the number of bytes to read + the number of bytes actually read + + + + Write to the stream. + + the buffer from which to write + the offset at which to start writing + the number of bytes to write + + + + Indicates whether the stream supports reading. + + + + + Indicates whether the stream supports seeking. + + + + Always returns false. + + + + + + Indicates whether the stream supports writing. + + + + + Flush the stream. + + + + + Returns the length of the underlying stream. + + + + + The getter for this property returns the total bytes read. + If you use the setter, it will throw + . + + + + + Seeking is not supported on this stream. This method always throws + + + N/A + N/A + N/A + + + + This method always throws + + + N/A + + + + Closes the stream. + + + + + A class for compressing and decompressing streams using the Deflate algorithm. + + + + + + The DeflateStream is a Decorator on a . It adds DEFLATE compression or decompression to any + stream. + + + + Using this stream, applications can compress or decompress data via stream + Read and Write operations. Either compresssion or decompression + can occur through either reading or writing. The compression format used is + DEFLATE, which is documented in IETF RFC 1951, "DEFLATE + Compressed Data Format Specification version 1.3.". + + + + This class is similar to , except that + ZlibStream adds the RFC + 1950 - ZLIB framing bytes to a compressed stream when compressing, or + expects the RFC1950 framing bytes when decompressing. The DeflateStream + does not. + + + + + + + + + + Create a DeflateStream using the specified CompressionMode. + + + + When mode is CompressionMode.Compress, the DeflateStream will use + the default compression level. The "captive" stream will be closed when + the DeflateStream is closed. + + + + This example uses a DeflateStream to compress data from a file, and writes + the compressed data to another file. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(fileToCompress + ".deflated")) + { + using (Stream compressor = new DeflateStream(raw, CompressionMode.Compress)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(fileToCompress & ".deflated") + Using compressor As Stream = New DeflateStream(raw, CompressionMode.Compress) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream which will be read or written. + Indicates whether the DeflateStream will compress or decompress. + + + + Create a DeflateStream using the specified CompressionMode and the specified CompressionLevel. + + + + + + When mode is CompressionMode.Decompress, the level parameter is + ignored. The "captive" stream will be closed when the DeflateStream is + closed. + + + + + + + This example uses a DeflateStream to compress data from a file, and writes + the compressed data to another file. + + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(fileToCompress + ".deflated")) + { + using (Stream compressor = new DeflateStream(raw, + CompressionMode.Compress, + CompressionLevel.BestCompression)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n= -1; + while (n != 0) + { + if (n > 0) + compressor.Write(buffer, 0, n); + n= input.Read(buffer, 0, buffer.Length); + } + } + } + } + + + + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(fileToCompress & ".deflated") + Using compressor As Stream = New DeflateStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream to be read or written while deflating or inflating. + Indicates whether the DeflateStream will compress or decompress. + A tuning knob to trade speed for effectiveness. + + + + Create a DeflateStream using the specified + CompressionMode, and explicitly specify whether the + stream should be left open after Deflation or Inflation. + + + + + + This constructor allows the application to request that the captive stream + remain open after the deflation or inflation occurs. By default, after + Close() is called on the stream, the captive stream is also + closed. In some cases this is not desired, for example if the stream is a + memory stream that will be re-read after compression. Specify true for + the parameter to leave the stream open. + + + + The DeflateStream will use the default compression level. + + + + See the other overloads of this constructor for example code. + + + + + The stream which will be read or written. This is called the + "captive" stream in other places in this documentation. + + + + Indicates whether the DeflateStream will compress or decompress. + + + true if the application would like the stream to + remain open after inflation/deflation. + + + + Create a DeflateStream using the specified CompressionMode + and the specified CompressionLevel, and explicitly specify whether + the stream should be left open after Deflation or Inflation. + + + + + + When mode is CompressionMode.Decompress, the level parameter is ignored. + + + + This constructor allows the application to request that the captive stream + remain open after the deflation or inflation occurs. By default, after + Close() is called on the stream, the captive stream is also + closed. In some cases this is not desired, for example if the stream is a + that will be re-read after + compression. Specify true for the parameter + to leave the stream open. + + + + + + + This example shows how to use a DeflateStream to compress data from + a file, and store the compressed data into another file. + + + using (var output = System.IO.File.Create(fileToCompress + ".deflated")) + { + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (Stream compressor = new DeflateStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n= -1; + while (n != 0) + { + if (n > 0) + compressor.Write(buffer, 0, n); + n= input.Read(buffer, 0, buffer.Length); + } + } + } + // can write additional data to the output stream here + } + + + + Using output As FileStream = File.Create(fileToCompress & ".deflated") + Using input As Stream = File.OpenRead(fileToCompress) + Using compressor As Stream = New DeflateStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + ' can write additional data to the output stream here. + End Using + + + The stream which will be read or written. + Indicates whether the DeflateStream will compress or decompress. + true if the application would like the stream to remain open after inflation/deflation. + A tuning knob to trade speed for effectiveness. + + + + This property sets the flush behavior on the stream. + + See the ZLIB documentation for the meaning of the flush behavior. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is + 1024 bytes. The minimum size is 128 bytes. You may get better performance + with a larger buffer. Then again, you might not. You would have to test + it. + + + + Set this before the first call to Read() or Write() on the + stream. If you try to set it afterwards, it will throw. + + + + + + The ZLIB strategy to be used during compression. + + + + By tweaking this parameter, you may be able to optimize the compression for + data with particular characteristics. + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Dispose the stream. + + + + This may or may not result in a Close() call on the captive + stream. See the constructors that have a leaveOpen parameter + for more information. + + + Application code won't call this code directly. This method may be + invoked in two distinct scenarios. If disposing == true, the method + has been called directly or indirectly by a user's code, for example + via the public Dispose() method. In this case, both managed and + unmanaged resources can be referenced and disposed. If disposing == + false, the method has been called by the runtime from inside the + object finalizer and this method should not reference other objects; + in that case only unmanaged resources must be referenced or + disposed. + + + + true if the Dispose method was invoked by user code. + + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Flush the stream. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the total bytes + written out, if used in writing, or the total bytes read in, if used in + reading. The count may refer to compressed bytes or uncompressed bytes, + depending on how you've used the stream. + + + + + Read data from the stream. + + + + + If you wish to use the DeflateStream to compress data while + reading, you can create a DeflateStream with + CompressionMode.Compress, providing an uncompressed data stream. + Then call Read() on that DeflateStream, and the data read will be + compressed as you read. If you wish to use the DeflateStream to + decompress data while reading, you can create a DeflateStream with + CompressionMode.Decompress, providing a readable compressed data + stream. Then call Read() on that DeflateStream, and the data read + will be decompressed as you read. + + + + A DeflateStream can be used for Read() or Write(), but not both. + + + + The buffer into which the read data should be placed. + the offset within that data array to put the first byte read. + the number of bytes to read. + the number of bytes actually read + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + this is irrelevant, since it will always throw! + irrelevant! + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + + + + Write data to the stream. + + + + + If you wish to use the DeflateStream to compress data while + writing, you can create a DeflateStream with + CompressionMode.Compress, and a writable output stream. Then call + Write() on that DeflateStream, providing uncompressed data + as input. The data sent to the output stream will be the compressed form + of the data written. If you wish to use the DeflateStream to + decompress data while writing, you can create a DeflateStream with + CompressionMode.Decompress, and a writable output stream. Then + call Write() on that stream, providing previously compressed + data. The data sent to the output stream will be the decompressed form of + the data written. + + + + A DeflateStream can be used for Read() or Write(), + but not both. + + + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Compress a string into a byte array using DEFLATE (RFC 1951). + + + + Uncompress it with . + + + DeflateStream.UncompressString(byte[]) + DeflateStream.CompressBuffer(byte[]) + GZipStream.CompressString(string) + ZlibStream.CompressString(string) + + + A string to compress. The string will first be encoded + using UTF8, then compressed. + + + The string in compressed form + + + + Compress a byte array into a new byte array using DEFLATE. + + + + Uncompress it with . + + + DeflateStream.CompressString(string) + DeflateStream.UncompressBuffer(byte[]) + GZipStream.CompressBuffer(byte[]) + ZlibStream.CompressBuffer(byte[]) + + + A buffer to compress. + + + The data in compressed form + + + + Uncompress a DEFLATE'd byte array into a single string. + + + DeflateStream.CompressString(String) + DeflateStream.UncompressBuffer(byte[]) + GZipStream.UncompressString(byte[]) + ZlibStream.UncompressString(byte[]) + + + A buffer containing DEFLATE-compressed data. + + + The uncompressed string + + + + Uncompress a DEFLATE'd byte array into a byte array. + + + DeflateStream.CompressBuffer(byte[]) + DeflateStream.UncompressString(byte[]) + GZipStream.UncompressBuffer(byte[]) + ZlibStream.UncompressBuffer(byte[]) + + + A buffer containing data that has been compressed with DEFLATE. + + + The data in uncompressed form + + + + A class for compressing and decompressing GZIP streams. + + + + + The GZipStream is a Decorator on a + . It adds GZIP compression or decompression to any + stream. + + + + Like the System.IO.Compression.GZipStream in the .NET Base Class Library, the + Ionic.Zlib.GZipStream can compress while writing, or decompress while + reading, but not vice versa. The compression method used is GZIP, which is + documented in IETF RFC + 1952, "GZIP file format specification version 4.3". + + + A GZipStream can be used to decompress data (through Read()) or + to compress data (through Write()), but not both. + + + + If you wish to use the GZipStream to compress data, you must wrap it + around a write-able stream. As you call Write() on the GZipStream, the + data will be compressed into the GZIP format. If you want to decompress data, + you must wrap the GZipStream around a readable stream that contains an + IETF RFC 1952-compliant stream. The data will be decompressed as you call + Read() on the GZipStream. + + + + Though the GZIP format allows data from multiple files to be concatenated + together, this stream handles only a single segment of GZIP format, typically + representing a single file. + + + + This class is similar to and . + ZlibStream handles RFC1950-compliant streams. + handles RFC1951-compliant streams. This class handles RFC1952-compliant streams. + + + + + + + + + + The comment on the GZIP stream. + + + + + The GZIP format allows for each file to optionally have an associated + comment stored with the file. The comment is encoded with the ISO-8859-1 + code page. To include a comment in a GZIP stream you create, set this + property before calling Write() for the first time on the + GZipStream. + + + + When using GZipStream to decompress, you can retrieve this property + after the first call to Read(). If no comment has been set in the + GZIP bytestream, the Comment property will return null + (Nothing in VB). + + + + + + The FileName for the GZIP stream. + + + + + + The GZIP format optionally allows each file to have an associated + filename. When compressing data (through Write()), set this + FileName before calling Write() the first time on the GZipStream. + The actual filename is encoded into the GZIP bytestream with the + ISO-8859-1 code page, according to RFC 1952. It is the application's + responsibility to insure that the FileName can be encoded and decoded + correctly with this code page. + + + + When decompressing (through Read()), you can retrieve this value + any time after the first Read(). In the case where there was no filename + encoded into the GZIP bytestream, the property will return null (Nothing + in VB). + + + + + + The last modified time for the GZIP stream. + + + + GZIP allows the storage of a last modified time with each GZIP entry. + When compressing data, you can set this before the first call to + Write(). When decompressing, you can retrieve this value any time + after the first call to Read(). + + + + + The CRC on the GZIP stream. + + + This is used for internal error checking. You probably don't need to look at this property. + + + + + Create a GZipStream using the specified CompressionMode. + + + + + When mode is CompressionMode.Compress, the GZipStream will use the + default compression level. + + + + As noted in the class documentation, the CompressionMode (Compress + or Decompress) also establishes the "direction" of the stream. A + GZipStream with CompressionMode.Compress works only through + Write(). A GZipStream with + CompressionMode.Decompress works only through Read(). + + + + + + This example shows how to use a GZipStream to compress data. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(outputFile)) + { + using (Stream compressor = new GZipStream(raw, CompressionMode.Compress)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Dim outputFile As String = (fileToCompress & ".compressed") + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(outputFile) + Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + + + This example shows how to use a GZipStream to uncompress a file. + + private void GunZipFile(string filename) + { + if (!filename.EndsWith(".gz)) + throw new ArgumentException("filename"); + var DecompressedFile = filename.Substring(0,filename.Length-3); + byte[] working = new byte[WORKING_BUFFER_SIZE]; + int n= 1; + using (System.IO.Stream input = System.IO.File.OpenRead(filename)) + { + using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) + { + using (var output = System.IO.File.Create(DecompressedFile)) + { + while (n !=0) + { + n= decompressor.Read(working, 0, working.Length); + if (n > 0) + { + output.Write(working, 0, n); + } + } + } + } + } + } + + + + Private Sub GunZipFile(ByVal filename as String) + If Not (filename.EndsWith(".gz)) Then + Throw New ArgumentException("filename") + End If + Dim DecompressedFile as String = filename.Substring(0,filename.Length-3) + Dim working(WORKING_BUFFER_SIZE) as Byte + Dim n As Integer = 1 + Using input As Stream = File.OpenRead(filename) + Using decompressor As Stream = new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, True) + Using output As Stream = File.Create(UncompressedFile) + Do + n= decompressor.Read(working, 0, working.Length) + If n > 0 Then + output.Write(working, 0, n) + End IF + Loop While (n > 0) + End Using + End Using + End Using + End Sub + + + + The stream which will be read or written. + Indicates whether the GZipStream will compress or decompress. + + + + Create a GZipStream using the specified CompressionMode and + the specified CompressionLevel. + + + + + The CompressionMode (Compress or Decompress) also establishes the + "direction" of the stream. A GZipStream with + CompressionMode.Compress works only through Write(). A + GZipStream with CompressionMode.Decompress works only + through Read(). + + + + + + + This example shows how to use a GZipStream to compress a file into a .gz file. + + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(fileToCompress + ".gz")) + { + using (Stream compressor = new GZipStream(raw, + CompressionMode.Compress, + CompressionLevel.BestCompression)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(fileToCompress & ".gz") + Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream to be read or written while deflating or inflating. + Indicates whether the GZipStream will compress or decompress. + A tuning knob to trade speed for effectiveness. + + + + Create a GZipStream using the specified CompressionMode, and + explicitly specify whether the stream should be left open after Deflation + or Inflation. + + + + + This constructor allows the application to request that the captive stream + remain open after the deflation or inflation occurs. By default, after + Close() is called on the stream, the captive stream is also + closed. In some cases this is not desired, for example if the stream is a + memory stream that will be re-read after compressed data has been written + to it. Specify true for the parameter to leave + the stream open. + + + + The (Compress or Decompress) also + establishes the "direction" of the stream. A GZipStream with + CompressionMode.Compress works only through Write(). A GZipStream + with CompressionMode.Decompress works only through Read(). + + + + The GZipStream will use the default compression level. If you want + to specify the compression level, see . + + + + See the other overloads of this constructor for example code. + + + + + + The stream which will be read or written. This is called the "captive" + stream in other places in this documentation. + + + Indicates whether the GZipStream will compress or decompress. + + + + true if the application would like the base stream to remain open after + inflation/deflation. + + + + + Create a GZipStream using the specified CompressionMode and the + specified CompressionLevel, and explicitly specify whether the + stream should be left open after Deflation or Inflation. + + + + + + This constructor allows the application to request that the captive stream + remain open after the deflation or inflation occurs. By default, after + Close() is called on the stream, the captive stream is also + closed. In some cases this is not desired, for example if the stream is a + memory stream that will be re-read after compressed data has been written + to it. Specify true for the parameter to + leave the stream open. + + + + As noted in the class documentation, the CompressionMode (Compress + or Decompress) also establishes the "direction" of the stream. A + GZipStream with CompressionMode.Compress works only through + Write(). A GZipStream with CompressionMode.Decompress works only + through Read(). + + + + + + This example shows how to use a GZipStream to compress data. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(outputFile)) + { + using (Stream compressor = new GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, true)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Dim outputFile As String = (fileToCompress & ".compressed") + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(outputFile) + Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, True) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream which will be read or written. + Indicates whether the GZipStream will compress or decompress. + true if the application would like the stream to remain open after inflation/deflation. + A tuning knob to trade speed for effectiveness. + + + + This property sets the flush behavior on the stream. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is + 1024 bytes. The minimum size is 128 bytes. You may get better performance + with a larger buffer. Then again, you might not. You would have to test + it. + + + + Set this before the first call to Read() or Write() on the + stream. If you try to set it afterwards, it will throw. + + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Dispose the stream. + + + + This may or may not result in a Close() call on the captive + stream. See the constructors that have a leaveOpen parameter + for more information. + + + This method may be invoked in two distinct scenarios. If disposing + == true, the method has been called directly or indirectly by a + user's code, for example via the public Dispose() method. In this + case, both managed and unmanaged resources can be referenced and + disposed. If disposing == false, the method has been called by the + runtime from inside the object finalizer and this method should not + reference other objects; in that case only unmanaged resources must + be referenced or disposed. + + + + indicates whether the Dispose method was invoked by user code. + + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Flush the stream. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the total bytes + written out, if used in writing, or the total bytes read in, if used in + reading. The count may refer to compressed bytes or uncompressed bytes, + depending on how you've used the stream. + + + + + Read and decompress data from the source stream. + + + + With a GZipStream, decompression is done through reading. + + + + + byte[] working = new byte[WORKING_BUFFER_SIZE]; + using (System.IO.Stream input = System.IO.File.OpenRead(_CompressedFile)) + { + using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) + { + using (var output = System.IO.File.Create(_DecompressedFile)) + { + int n; + while ((n= decompressor.Read(working, 0, working.Length)) !=0) + { + output.Write(working, 0, n); + } + } + } + } + + + The buffer into which the decompressed data should be placed. + the offset within that data array to put the first byte read. + the number of bytes to read. + the number of bytes actually read + + + + Calling this method always throws a . + + irrelevant; it will always throw! + irrelevant; it will always throw! + irrelevant! + + + + Calling this method always throws a . + + irrelevant; this method will always throw! + + + + Write data to the stream. + + + + + If you wish to use the GZipStream to compress data while writing, + you can create a GZipStream with CompressionMode.Compress, and a + writable output stream. Then call Write() on that GZipStream, + providing uncompressed data as input. The data sent to the output stream + will be the compressed form of the data written. + + + + A GZipStream can be used for Read() or Write(), but not + both. Writing implies compression. Reading implies decompression. + + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Compress a string into a byte array using GZip. + + + + Uncompress it with . + + + + + + + A string to compress. The string will first be encoded + using UTF8, then compressed. + + + The string in compressed form + + + + Compress a byte array into a new byte array using GZip. + + + + Uncompress it with . + + + + + + + A buffer to compress. + + + The data in compressed form + + + + Uncompress a GZip'ed byte array into a single string. + + + + + + + A buffer containing GZIP-compressed data. + + + The uncompressed string + + + + Uncompress a GZip'ed byte array into a byte array. + + + + + + + A buffer containing data that has been compressed with GZip. + + + The data in uncompressed form + + + + A class for compressing streams using the + Deflate algorithm with multiple threads. + + + + + This class performs DEFLATE compression through writing. For + more information on the Deflate algorithm, see IETF RFC 1951, + "DEFLATE Compressed Data Format Specification version 1.3." + + + + This class is similar to , except + that this class is for compression only, and this implementation uses an + approach that employs multiple worker threads to perform the DEFLATE. On + a multi-cpu or multi-core computer, the performance of this class can be + significantly higher than the single-threaded DeflateStream, particularly + for larger streams. How large? Anything over 10mb is a good candidate + for parallel compression. + + + + The tradeoff is that this class uses more memory and more CPU than the + vanilla DeflateStream, and also is less efficient as a compressor. For + large files the size of the compressed data stream can be less than 1% + larger than the size of a compressed data stream from the vanialla + DeflateStream. For smaller files the difference can be larger. The + difference will also be larger if you set the BufferSize to be lower than + the default value. Your mileage may vary. Finally, for small files, the + ParallelDeflateOutputStream can be much slower than the vanilla + DeflateStream, because of the overhead associated to using the thread + pool. + + + + + + + + Create a ParallelDeflateOutputStream. + + + + + This stream compresses data written into it via the DEFLATE + algorithm (see RFC 1951), and writes out the compressed byte stream. + + + + The instance will use the default compression level, the default + buffer sizes and the default number of threads and buffers per + thread. + + + + This class is similar to , + except that this implementation uses an approach that employs + multiple worker threads to perform the DEFLATE. On a multi-cpu or + multi-core computer, the performance of this class can be + significantly higher than the single-threaded DeflateStream, + particularly for larger streams. How large? Anything over 10mb is + a good candidate for parallel compression. + + + + + + + This example shows how to use a ParallelDeflateOutputStream to compress + data. It reads a file, compresses it, and writes the compressed data to + a second, output file. + + + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n= -1; + String outputFile = fileToCompress + ".compressed"; + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(outputFile)) + { + using (Stream compressor = new ParallelDeflateOutputStream(raw)) + { + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Dim outputFile As String = (fileToCompress & ".compressed") + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(outputFile) + Using compressor As Stream = New ParallelDeflateOutputStream(raw) + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream to which compressed data will be written. + + + + Create a ParallelDeflateOutputStream using the specified CompressionLevel. + + + See the + constructor for example code. + + The stream to which compressed data will be written. + A tuning knob to trade speed for effectiveness. + + + + Create a ParallelDeflateOutputStream and specify whether to leave the captive stream open + when the ParallelDeflateOutputStream is closed. + + + See the + constructor for example code. + + The stream to which compressed data will be written. + + true if the application would like the stream to remain open after inflation/deflation. + + + + + Create a ParallelDeflateOutputStream and specify whether to leave the captive stream open + when the ParallelDeflateOutputStream is closed. + + + See the + constructor for example code. + + The stream to which compressed data will be written. + A tuning knob to trade speed for effectiveness. + + true if the application would like the stream to remain open after inflation/deflation. + + + + + Create a ParallelDeflateOutputStream using the specified + CompressionLevel and CompressionStrategy, and specifying whether to + leave the captive stream open when the ParallelDeflateOutputStream is + closed. + + + See the + constructor for example code. + + The stream to which compressed data will be written. + A tuning knob to trade speed for effectiveness. + + By tweaking this parameter, you may be able to optimize the compression for + data with particular characteristics. + + + true if the application would like the stream to remain open after inflation/deflation. + + + + + The ZLIB strategy to be used during compression. + + + + + + The maximum number of buffer pairs to use. + + + + + This property sets an upper limit on the number of memory buffer + pairs to create. The implementation of this stream allocates + multiple buffers to facilitate parallel compression. As each buffer + fills up, this stream uses + ThreadPool.QueueUserWorkItem() + to compress those buffers in a background threadpool thread. After a + buffer is compressed, it is re-ordered and written to the output + stream. + + + + A higher number of buffer pairs enables a higher degree of + parallelism, which tends to increase the speed of compression on + multi-cpu computers. On the other hand, a higher number of buffer + pairs also implies a larger memory consumption, more active worker + threads, and a higher cpu utilization for any compression. This + property enables the application to limit its memory consumption and + CPU utilization behavior depending on requirements. + + + + For each compression "task" that occurs in parallel, there are 2 + buffers allocated: one for input and one for output. This property + sets a limit for the number of pairs. The total amount of storage + space allocated for buffering will then be (N*S*2), where N is the + number of buffer pairs, S is the size of each buffer (). By default, DotNetZip allocates 4 buffer + pairs per CPU core, so if your machine has 4 cores, and you retain + the default buffer size of 128k, then the + ParallelDeflateOutputStream will use 4 * 4 * 2 * 128kb of buffer + memory in total, or 4mb, in blocks of 128kb. If you then set this + property to 8, then the number will be 8 * 2 * 128kb of buffer + memory, or 2mb. + + + + CPU utilization will also go up with additional buffers, because a + larger number of buffer pairs allows a larger number of background + threads to compress in parallel. If you find that parallel + compression is consuming too much memory or CPU, you can adjust this + value downward. + + + + The default value is 16. Different values may deliver better or + worse results, depending on your priorities and the dynamic + performance characteristics of your storage and compute resources. + + + + This property is not the number of buffer pairs to use; it is an + upper limit. An illustration: Suppose you have an application that + uses the default value of this property (which is 16), and it runs + on a machine with 2 CPU cores. In that case, DotNetZip will allocate + 4 buffer pairs per CPU core, for a total of 8 pairs. The upper + limit specified by this property has no effect. + + + + The application can set this value at any time, but it is effective + only before the first call to Write(), which is when the buffers are + allocated. + + + + + + The size of the buffers used by the compressor threads. + + + + + The default buffer size is 128k. The application can set this value + at any time, but it is effective only before the first Write(). + + + + Larger buffer sizes implies larger memory consumption but allows + more efficient compression. Using smaller buffer sizes consumes less + memory but may result in less effective compression. For example, + using the default buffer size of 128k, the compression delivered is + within 1% of the compression delivered by the single-threaded . On the other hand, using a + BufferSize of 8k can result in a compressed data stream that is 5% + larger than that delivered by the single-threaded + DeflateStream. Excessively small buffer sizes can also cause + the speed of the ParallelDeflateOutputStream to drop, because of + larger thread scheduling overhead dealing with many many small + buffers. + + + + The total amount of storage space allocated for buffering will be + (N*S*2), where N is the number of buffer pairs, and S is the size of + each buffer (this property). There are 2 buffers used by the + compressor, one for input and one for output. By default, DotNetZip + allocates 4 buffer pairs per CPU core, so if your machine has 4 + cores, then the number of buffer pairs used will be 16. If you + accept the default value of this property, 128k, then the + ParallelDeflateOutputStream will use 16 * 2 * 128kb of buffer memory + in total, or 4mb, in blocks of 128kb. If you set this property to + 64kb, then the number will be 16 * 2 * 64kb of buffer memory, or + 2mb. + + + + + + + The CRC32 for the data that was written out, prior to compression. + + + This value is meaningful only after a call to Close(). + + + + + The total number of uncompressed bytes processed by the ParallelDeflateOutputStream. + + + This value is meaningful only after a call to Close(). + + + + + Write data to the stream. + + + + + + To use the ParallelDeflateOutputStream to compress data, create a + ParallelDeflateOutputStream with CompressionMode.Compress, passing a + writable output stream. Then call Write() on that + ParallelDeflateOutputStream, providing uncompressed data as input. The + data sent to the output stream will be the compressed form of the data + written. + + + + To decompress data, use the class. + + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Flush the stream. + + + + + Close the stream. + + + You must call Close on the stream to guarantee that all of the data written in has + been compressed, and the compressed data has been written out. + + + + Dispose the object + + + Because ParallelDeflateOutputStream is IDisposable, the + application must call this method when finished using the instance. + + + This method is generally called implicitly upon exit from + a using scope in C# (Using in VB). + + + + + The Dispose method + + indicates whether the Dispose method was invoked by user code. + + + + + Resets the stream for use with another stream. + + + Because the ParallelDeflateOutputStream is expensive to create, it + has been designed so that it can be recycled and re-used. You have + to call Close() on the stream first, then you can call Reset() on + it, to use it again on another stream. + + + + The new output stream for this era. + + + + + ParallelDeflateOutputStream deflater = null; + foreach (var inputFile in listOfFiles) + { + string outputFile = inputFile + ".compressed"; + using (System.IO.Stream input = System.IO.File.OpenRead(inputFile)) + { + using (var outStream = System.IO.File.Create(outputFile)) + { + if (deflater == null) + deflater = new ParallelDeflateOutputStream(outStream, + CompressionLevel.Best, + CompressionStrategy.Default, + true); + deflater.Reset(outStream); + + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + deflater.Write(buffer, 0, n); + } + } + } + } + + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream supports Read operations. + + + Always returns false. + + + + + Indicates whether the stream supports Write operations. + + + Returns true if the provided stream is writable. + + + + + Reading this property always throws a NotSupportedException. + + + + + Returns the current position of the output stream. + + + + Because the output gets written by a background thread, + the value may change asynchronously. Setting this + property always throws a NotSupportedException. + + + + + + This method always throws a NotSupportedException. + + + The buffer into which data would be read, IF THIS METHOD + ACTUALLY DID ANYTHING. + + + The offset within that data array at which to insert the + data that is read, IF THIS METHOD ACTUALLY DID + ANYTHING. + + + The number of bytes to write, IF THIS METHOD ACTUALLY DID + ANYTHING. + + nothing. + + + + This method always throws a NotSupportedException. + + + The offset to seek to.... + IF THIS METHOD ACTUALLY DID ANYTHING. + + + The reference specifying how to apply the offset.... IF + THIS METHOD ACTUALLY DID ANYTHING. + + nothing. It always throws. + + + + This method always throws a NotSupportedException. + + + The new value for the stream length.... IF + THIS METHOD ACTUALLY DID ANYTHING. + + + + + Map from a distance to a distance code. + + + No side effects. _dist_code[256] and _dist_code[257] are never used. + + + + + Describes how to flush the current deflate operation. + + + The different FlushType values are useful when using a Deflate in a streaming application. + + + + No flush at all. + + + Closes the current block, but doesn't flush it to + the output. Used internally only in hypothetical + scenarios. This was supposed to be removed by Zlib, but it is + still in use in some edge cases. + + + + + Use this during compression to specify that all pending output should be + flushed to the output buffer and the output should be aligned on a byte + boundary. You might use this in a streaming communication scenario, so that + the decompressor can get all input data available so far. When using this + with a ZlibCodec, AvailableBytesIn will be zero after the call if + enough output space has been provided before the call. Flushing will + degrade compression and so it should be used only when necessary. + + + + + Use this during compression to specify that all output should be flushed, as + with FlushType.Sync, but also, the compression state should be reset + so that decompression can restart from this point if previous compressed + data has been damaged or if random access is desired. Using + FlushType.Full too often can significantly degrade the compression. + + + + Signals the end of the compression/decompression stream. + + + + The compression level to be used when using a DeflateStream or ZlibStream with CompressionMode.Compress. + + + + + None means that the data will be simply stored, with no change at all. + If you are producing ZIPs for use on Mac OSX, be aware that archives produced with CompressionLevel.None + cannot be opened with the default zip reader. Use a different CompressionLevel. + + + + + Same as None. + + + + + The fastest but least effective compression. + + + + + A synonym for BestSpeed. + + + + + A little slower, but better, than level 1. + + + + + A little slower, but better, than level 2. + + + + + A little slower, but better, than level 3. + + + + + A little slower than level 4, but with better compression. + + + + + The default compression level, with a good balance of speed and compression efficiency. + + + + + A synonym for Default. + + + + + Pretty good compression! + + + + + Better compression than Level7! + + + + + The "best" compression, where best means greatest reduction in size of the input data stream. + This is also the slowest compression. + + + + + A synonym for BestCompression. + + + + + Describes options for how the compression algorithm is executed. Different strategies + work better on different sorts of data. The strategy parameter can affect the compression + ratio and the speed of compression but not the correctness of the compresssion. + + + + + The default strategy is probably the best for normal data. + + + + + The Filtered strategy is intended to be used most effectively with data produced by a + filter or predictor. By this definition, filtered data consists mostly of small + values with a somewhat random distribution. In this case, the compression algorithm + is tuned to compress them better. The effect of Filtered is to force more Huffman + coding and less string matching; it is a half-step between Default and HuffmanOnly. + + + + + Using HuffmanOnly will force the compressor to do Huffman encoding only, with no + string matching. + + + + + An enum to specify the direction of transcoding - whether to compress or decompress. + + + + + Used to specify that the stream should compress the data. + + + + + Used to specify that the stream should decompress the data. + + + + + A general purpose exception class for exceptions in the Zlib library. + + + + + The ZlibException class captures exception information generated + by the Zlib library. + + + + + This ctor collects a message attached to the exception. + + the message for the exception. + + + + Performs an unsigned bitwise right shift with the specified number + + Number to operate on + Ammount of bits to shift + The resulting number from the shift operation + + + + Reads a number of characters from the current source TextReader and writes + the data to the target array at the specified index. + + + The source TextReader to read from + Contains the array of characteres read from the source TextReader. + The starting index of the target array. + The maximum number of characters to read from the source TextReader. + + + The number of characters read. The number will be less than or equal to + count depending on the data available in the source TextReader. Returns -1 + if the end of the stream is reached. + + + + + Computes an Adler-32 checksum. + + + The Adler checksum is similar to a CRC checksum, but faster to compute, though less + reliable. It is used in producing RFC1950 compressed streams. The Adler checksum + is a required part of the "ZLIB" standard. Applications will almost never need to + use this class directly. + + + + + + + Calculates the Adler32 checksum. + + + + This is used within ZLIB. You probably don't need to use this directly. + + + + To compute an Adler32 checksum on a byte array: + + var adler = Adler.Adler32(0, null, 0, 0); + adler = Adler.Adler32(adler, buffer, index, length); + + + + + + Encoder and Decoder for ZLIB and DEFLATE (IETF RFC1950 and RFC1951). + + + + This class compresses and decompresses data according to the Deflate algorithm + and optionally, the ZLIB format, as documented in RFC 1950 - ZLIB and RFC 1951 - DEFLATE. + + + + + The buffer from which data is taken. + + + + + An index into the InputBuffer array, indicating where to start reading. + + + + + The number of bytes available in the InputBuffer, starting at NextIn. + + + Generally you should set this to InputBuffer.Length before the first Inflate() or Deflate() call. + The class will update this number as calls to Inflate/Deflate are made. + + + + + Total number of bytes read so far, through all calls to Inflate()/Deflate(). + + + + + Buffer to store output data. + + + + + An index into the OutputBuffer array, indicating where to start writing. + + + + + The number of bytes available in the OutputBuffer, starting at NextOut. + + + Generally you should set this to OutputBuffer.Length before the first Inflate() or Deflate() call. + The class will update this number as calls to Inflate/Deflate are made. + + + + + Total number of bytes written to the output so far, through all calls to Inflate()/Deflate(). + + + + + used for diagnostics, when something goes wrong! + + + + + The compression level to use in this codec. Useful only in compression mode. + + + + + The number of Window Bits to use. + + + This gauges the size of the sliding window, and hence the + compression effectiveness as well as memory consumption. It's best to just leave this + setting alone if you don't know what it is. The maximum value is 15 bits, which implies + a 32k window. + + + + + The compression strategy to use. + + + This is only effective in compression. The theory offered by ZLIB is that different + strategies could potentially produce significant differences in compression behavior + for different data sets. Unfortunately I don't have any good recommendations for how + to set it differently. When I tested changing the strategy I got minimally different + compression performance. It's best to leave this property alone if you don't have a + good feel for it. Or, you may want to produce a test harness that runs through the + different strategy options and evaluates them on different file types. If you do that, + let me know your results. + + + + + The Adler32 checksum on the data transferred through the codec so far. You probably don't need to look at this. + + + + + Create a ZlibCodec. + + + If you use this default constructor, you will later have to explicitly call + InitializeInflate() or InitializeDeflate() before using the ZlibCodec to compress + or decompress. + + + + + Create a ZlibCodec that either compresses or decompresses. + + + Indicates whether the codec should compress (deflate) or decompress (inflate). + + + + + Initialize the inflation state. + + + It is not necessary to call this before using the ZlibCodec to inflate data; + It is implicitly called when you call the constructor. + + Z_OK if everything goes well. + + + + Initialize the inflation state with an explicit flag to + govern the handling of RFC1950 header bytes. + + + + By default, the ZLIB header defined in RFC 1950 is expected. If + you want to read a zlib stream you should specify true for + expectRfc1950Header. If you have a deflate stream, you will want to specify + false. It is only necessary to invoke this initializer explicitly if you + want to specify false. + + + whether to expect an RFC1950 header byte + pair when reading the stream of data to be inflated. + + Z_OK if everything goes well. + + + + Initialize the ZlibCodec for inflation, with the specified number of window bits. + + The number of window bits to use. If you need to ask what that is, + then you shouldn't be calling this initializer. + Z_OK if all goes well. + + + + Initialize the inflation state with an explicit flag to govern the handling of + RFC1950 header bytes. + + + + If you want to read a zlib stream you should specify true for + expectRfc1950Header. In this case, the library will expect to find a ZLIB + header, as defined in RFC + 1950, in the compressed stream. If you will be reading a DEFLATE or + GZIP stream, which does not have such a header, you will want to specify + false. + + + whether to expect an RFC1950 header byte pair when reading + the stream of data to be inflated. + The number of window bits to use. If you need to ask what that is, + then you shouldn't be calling this initializer. + Z_OK if everything goes well. + + + + Inflate the data in the InputBuffer, placing the result in the OutputBuffer. + + + You must have set InputBuffer and OutputBuffer, NextIn and NextOut, and AvailableBytesIn and + AvailableBytesOut before calling this method. + + + + private void InflateBuffer() + { + int bufferSize = 1024; + byte[] buffer = new byte[bufferSize]; + ZlibCodec decompressor = new ZlibCodec(); + + Console.WriteLine("\n============================================"); + Console.WriteLine("Size of Buffer to Inflate: {0} bytes.", CompressedBytes.Length); + MemoryStream ms = new MemoryStream(DecompressedBytes); + + int rc = decompressor.InitializeInflate(); + + decompressor.InputBuffer = CompressedBytes; + decompressor.NextIn = 0; + decompressor.AvailableBytesIn = CompressedBytes.Length; + + decompressor.OutputBuffer = buffer; + + // pass 1: inflate + do + { + decompressor.NextOut = 0; + decompressor.AvailableBytesOut = buffer.Length; + rc = decompressor.Inflate(FlushType.None); + + if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) + throw new Exception("inflating: " + decompressor.Message); + + ms.Write(decompressor.OutputBuffer, 0, buffer.Length - decompressor.AvailableBytesOut); + } + while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); + + // pass 2: finish and flush + do + { + decompressor.NextOut = 0; + decompressor.AvailableBytesOut = buffer.Length; + rc = decompressor.Inflate(FlushType.Finish); + + if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) + throw new Exception("inflating: " + decompressor.Message); + + if (buffer.Length - decompressor.AvailableBytesOut > 0) + ms.Write(buffer, 0, buffer.Length - decompressor.AvailableBytesOut); + } + while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); + + decompressor.EndInflate(); + } + + + + The flush to use when inflating. + Z_OK if everything goes well. + + + + Ends an inflation session. + + + Call this after successively calling Inflate(). This will cause all buffers to be flushed. + After calling this you cannot call Inflate() without a intervening call to one of the + InitializeInflate() overloads. + + Z_OK if everything goes well. + + + + I don't know what this does! + + Z_OK if everything goes well. + + + + Initialize the ZlibCodec for deflation operation. + + + The codec will use the MAX window bits and the default level of compression. + + + + int bufferSize = 40000; + byte[] CompressedBytes = new byte[bufferSize]; + byte[] DecompressedBytes = new byte[bufferSize]; + + ZlibCodec compressor = new ZlibCodec(); + + compressor.InitializeDeflate(CompressionLevel.Default); + + compressor.InputBuffer = System.Text.ASCIIEncoding.ASCII.GetBytes(TextToCompress); + compressor.NextIn = 0; + compressor.AvailableBytesIn = compressor.InputBuffer.Length; + + compressor.OutputBuffer = CompressedBytes; + compressor.NextOut = 0; + compressor.AvailableBytesOut = CompressedBytes.Length; + + while (compressor.TotalBytesIn != TextToCompress.Length && compressor.TotalBytesOut < bufferSize) + { + compressor.Deflate(FlushType.None); + } + + while (true) + { + int rc= compressor.Deflate(FlushType.Finish); + if (rc == ZlibConstants.Z_STREAM_END) break; + } + + compressor.EndDeflate(); + + + + Z_OK if all goes well. You generally don't need to check the return code. + + + + Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel. + + + The codec will use the maximum window bits (15) and the specified + CompressionLevel. It will emit a ZLIB stream as it compresses. + + The compression level for the codec. + Z_OK if all goes well. + + + + Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, + and the explicit flag governing whether to emit an RFC1950 header byte pair. + + + The codec will use the maximum window bits (15) and the specified CompressionLevel. + If you want to generate a zlib stream, you should specify true for + wantRfc1950Header. In this case, the library will emit a ZLIB + header, as defined in RFC + 1950, in the compressed stream. + + The compression level for the codec. + whether to emit an initial RFC1950 byte pair in the compressed stream. + Z_OK if all goes well. + + + + Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, + and the specified number of window bits. + + + The codec will use the specified number of window bits and the specified CompressionLevel. + + The compression level for the codec. + the number of window bits to use. If you don't know what this means, don't use this method. + Z_OK if all goes well. + + + + Initialize the ZlibCodec for deflation operation, using the specified + CompressionLevel, the specified number of window bits, and the explicit flag + governing whether to emit an RFC1950 header byte pair. + + + The compression level for the codec. + whether to emit an initial RFC1950 byte pair in the compressed stream. + the number of window bits to use. If you don't know what this means, don't use this method. + Z_OK if all goes well. + + + + Deflate one batch of data. + + + You must have set InputBuffer and OutputBuffer before calling this method. + + + + private void DeflateBuffer(CompressionLevel level) + { + int bufferSize = 1024; + byte[] buffer = new byte[bufferSize]; + ZlibCodec compressor = new ZlibCodec(); + + Console.WriteLine("\n============================================"); + Console.WriteLine("Size of Buffer to Deflate: {0} bytes.", UncompressedBytes.Length); + MemoryStream ms = new MemoryStream(); + + int rc = compressor.InitializeDeflate(level); + + compressor.InputBuffer = UncompressedBytes; + compressor.NextIn = 0; + compressor.AvailableBytesIn = UncompressedBytes.Length; + + compressor.OutputBuffer = buffer; + + // pass 1: deflate + do + { + compressor.NextOut = 0; + compressor.AvailableBytesOut = buffer.Length; + rc = compressor.Deflate(FlushType.None); + + if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) + throw new Exception("deflating: " + compressor.Message); + + ms.Write(compressor.OutputBuffer, 0, buffer.Length - compressor.AvailableBytesOut); + } + while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); + + // pass 2: finish and flush + do + { + compressor.NextOut = 0; + compressor.AvailableBytesOut = buffer.Length; + rc = compressor.Deflate(FlushType.Finish); + + if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) + throw new Exception("deflating: " + compressor.Message); + + if (buffer.Length - compressor.AvailableBytesOut > 0) + ms.Write(buffer, 0, buffer.Length - compressor.AvailableBytesOut); + } + while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); + + compressor.EndDeflate(); + + ms.Seek(0, SeekOrigin.Begin); + CompressedBytes = new byte[compressor.TotalBytesOut]; + ms.Read(CompressedBytes, 0, CompressedBytes.Length); + } + + + whether to flush all data as you deflate. Generally you will want to + use Z_NO_FLUSH here, in a series of calls to Deflate(), and then call EndDeflate() to + flush everything. + + Z_OK if all goes well. + + + + End a deflation session. + + + Call this after making a series of one or more calls to Deflate(). All buffers are flushed. + + Z_OK if all goes well. + + + + Reset a codec for another deflation session. + + + Call this to reset the deflation state. For example if a thread is deflating + non-consecutive blocks, you can call Reset() after the Deflate(Sync) of the first + block and before the next Deflate(None) of the second block. + + Z_OK if all goes well. + + + + Set the CompressionStrategy and CompressionLevel for a deflation session. + + the level of compression to use. + the strategy to use for compression. + Z_OK if all goes well. + + + + Set the dictionary to be used for either Inflation or Deflation. + + The dictionary bytes to use. + Z_OK if all goes well. + + + + A bunch of constants used in the Zlib interface. + + + + + The maximum number of window bits for the Deflate algorithm. + + + + + The default number of window bits for the Deflate algorithm. + + + + + indicates everything is A-OK + + + + + Indicates that the last operation reached the end of the stream. + + + + + The operation ended in need of a dictionary. + + + + + There was an error with the stream - not enough data, not open and readable, etc. + + + + + There was an error with the data - not enough data, bad data, etc. + + + + + There was an error with the working buffer. + + + + + The size of the working buffer used in the ZlibCodec class. + + + + + The minimum size of the working buffer used in the ZlibCodec class. + + + + + Represents a Zlib stream for compression or decompression. + + + + + The ZlibStream is a Decorator on a . It adds ZLIB compression or decompression to any + stream. + + + Using this stream, applications can compress or decompress data via + stream Read() and Write() operations. Either compresssion or + decompression can occur through either reading or writing. The compression + format used is ZLIB, which is documented in IETF RFC 1950, "ZLIB Compressed + Data Format Specification version 3.3". This implementation of ZLIB always uses + DEFLATE as the compression method. (see IETF RFC 1951, "DEFLATE + Compressed Data Format Specification version 1.3.") + + + The ZLIB format allows for varying compression methods, window sizes, and dictionaries. + This implementation always uses the DEFLATE compression method, a preset dictionary, + and 15 window bits by default. + + + + This class is similar to , except that it adds the + RFC1950 header and trailer bytes to a compressed stream when compressing, or expects + the RFC1950 header and trailer bytes when decompressing. It is also similar to the + . + + + + + + + + Create a ZlibStream using the specified CompressionMode. + + + + + When mode is CompressionMode.Compress, the ZlibStream + will use the default compression level. The "captive" stream will be + closed when the ZlibStream is closed. + + + + + + This example uses a ZlibStream to compress a file, and writes the + compressed data to another file. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(fileToCompress + ".zlib")) + { + using (Stream compressor = new ZlibStream(raw, CompressionMode.Compress)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(fileToCompress & ".zlib") + Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + + The stream which will be read or written. + Indicates whether the ZlibStream will compress or decompress. + + + + Create a ZlibStream using the specified CompressionMode and + the specified CompressionLevel. + + + + + + When mode is CompressionMode.Decompress, the level parameter is ignored. + The "captive" stream will be closed when the ZlibStream is closed. + + + + + + This example uses a ZlibStream to compress data from a file, and writes the + compressed data to another file. + + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(fileToCompress + ".zlib")) + { + using (Stream compressor = new ZlibStream(raw, + CompressionMode.Compress, + CompressionLevel.BestCompression)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(fileToCompress & ".zlib") + Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + + The stream to be read or written while deflating or inflating. + Indicates whether the ZlibStream will compress or decompress. + A tuning knob to trade speed for effectiveness. + + + + Create a ZlibStream using the specified CompressionMode, and + explicitly specify whether the captive stream should be left open after + Deflation or Inflation. + + + + + + When mode is CompressionMode.Compress, the ZlibStream will use + the default compression level. + + + + This constructor allows the application to request that the captive stream + remain open after the deflation or inflation occurs. By default, after + Close() is called on the stream, the captive stream is also + closed. In some cases this is not desired, for example if the stream is a + that will be re-read after + compression. Specify true for the parameter to leave the stream + open. + + + + See the other overloads of this constructor for example code. + + + + + The stream which will be read or written. This is called the + "captive" stream in other places in this documentation. + Indicates whether the ZlibStream will compress or decompress. + true if the application would like the stream to remain + open after inflation/deflation. + + + + Create a ZlibStream using the specified CompressionMode + and the specified CompressionLevel, and explicitly specify + whether the stream should be left open after Deflation or Inflation. + + + + + + This constructor allows the application to request that the captive + stream remain open after the deflation or inflation occurs. By + default, after Close() is called on the stream, the captive + stream is also closed. In some cases this is not desired, for example + if the stream is a that will be + re-read after compression. Specify true for the parameter to leave the stream open. + + + + When mode is CompressionMode.Decompress, the level parameter is + ignored. + + + + + + + This example shows how to use a ZlibStream to compress the data from a file, + and store the result into another file. The filestream remains open to allow + additional data to be written to it. + + + using (var output = System.IO.File.Create(fileToCompress + ".zlib")) + { + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (Stream compressor = new ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + // can write additional data to the output stream here + } + + + Using output As FileStream = File.Create(fileToCompress & ".zlib") + Using input As Stream = File.OpenRead(fileToCompress) + Using compressor As Stream = New ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + ' can write additional data to the output stream here. + End Using + + + + The stream which will be read or written. + + Indicates whether the ZlibStream will compress or decompress. + + + true if the application would like the stream to remain open after + inflation/deflation. + + + + A tuning knob to trade speed for effectiveness. This parameter is + effective only when mode is CompressionMode.Compress. + + + + + This property sets the flush behavior on the stream. + Sorry, though, not sure exactly how to describe all the various settings. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is + 1024 bytes. The minimum size is 128 bytes. You may get better performance + with a larger buffer. Then again, you might not. You would have to test + it. + + + + Set this before the first call to Read() or Write() on the + stream. If you try to set it afterwards, it will throw. + + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Dispose the stream. + + + + This may or may not result in a Close() call on the captive + stream. See the constructors that have a leaveOpen parameter + for more information. + + + This method may be invoked in two distinct scenarios. If disposing + == true, the method has been called directly or indirectly by a + user's code, for example via the public Dispose() method. In this + case, both managed and unmanaged resources can be referenced and + disposed. If disposing == false, the method has been called by the + runtime from inside the object finalizer and this method should not + reference other objects; in that case only unmanaged resources must + be referenced or disposed. + + + + indicates whether the Dispose method was invoked by user code. + + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Flush the stream. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the total bytes + written out, if used in writing, or the total bytes read in, if used in + reading. The count may refer to compressed bytes or uncompressed bytes, + depending on how you've used the stream. + + + + + Read data from the stream. + + + + + + If you wish to use the ZlibStream to compress data while reading, + you can create a ZlibStream with CompressionMode.Compress, + providing an uncompressed data stream. Then call Read() on that + ZlibStream, and the data read will be compressed. If you wish to + use the ZlibStream to decompress data while reading, you can create + a ZlibStream with CompressionMode.Decompress, providing a + readable compressed data stream. Then call Read() on that + ZlibStream, and the data will be decompressed as it is read. + + + + A ZlibStream can be used for Read() or Write(), but + not both. + + + + + + The buffer into which the read data should be placed. + + + the offset within that data array to put the first byte read. + + the number of bytes to read. + + the number of bytes read + + + + Calling this method always throws a . + + + The offset to seek to.... + IF THIS METHOD ACTUALLY DID ANYTHING. + + + The reference specifying how to apply the offset.... IF + THIS METHOD ACTUALLY DID ANYTHING. + + + nothing. This method always throws. + + + + Calling this method always throws a . + + + The new value for the stream length.... IF + THIS METHOD ACTUALLY DID ANYTHING. + + + + + Write data to the stream. + + + + + + If you wish to use the ZlibStream to compress data while writing, + you can create a ZlibStream with CompressionMode.Compress, + and a writable output stream. Then call Write() on that + ZlibStream, providing uncompressed data as input. The data sent to + the output stream will be the compressed form of the data written. If you + wish to use the ZlibStream to decompress data while writing, you + can create a ZlibStream with CompressionMode.Decompress, and a + writable output stream. Then call Write() on that stream, + providing previously compressed data. The data sent to the output stream + will be the decompressed form of the data written. + + + + A ZlibStream can be used for Read() or Write(), but not both. + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Compress a string into a byte array using ZLIB. + + + + Uncompress it with . + + + + + + + + A string to compress. The string will first be encoded + using UTF8, then compressed. + + + The string in compressed form + + + + Compress a byte array into a new byte array using ZLIB. + + + + Uncompress it with . + + + + + + + A buffer to compress. + + + The data in compressed form + + + + Uncompress a ZLIB-compressed byte array into a single string. + + + + + + + A buffer containing ZLIB-compressed data. + + + The uncompressed string + + + + Uncompress a ZLIB-compressed byte array into a byte array. + + + + + + + A buffer containing ZLIB-compressed data. + + + The data in uncompressed form + + + diff --git a/packages/DotNetZip.1.13.3/lib/netstandard2.0/DotNetZip.dll b/packages/DotNetZip.1.13.3/lib/netstandard2.0/DotNetZip.dll new file mode 100644 index 0000000000000000000000000000000000000000..63b5ccd1d44ea788c3afa4636db524ba8b357b1b GIT binary patch literal 239616 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

Bz# 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ℜ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 Of6GSvpU`hr1OE?ZWZ7!~ literal 0 HcmV?d00001 diff --git a/packages/DotNetZip.1.13.3/lib/netstandard2.0/DotNetZip.pdb b/packages/DotNetZip.1.13.3/lib/netstandard2.0/DotNetZip.pdb new file mode 100644 index 0000000000000000000000000000000000000000..c77f4a5eb7997473aade4683b9a38ee65085fb98 GIT binary patch literal 103104 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 aSi_;op6E4TFn=5zCs~SAL+v{PV*VQ*^Ds&P literal 0 HcmV?d00001 diff --git a/packages/DotNetZip.1.13.3/lib/netstandard2.0/DotNetZip.xml b/packages/DotNetZip.1.13.3/lib/netstandard2.0/DotNetZip.xml new file mode 100644 index 0000000..549f424 --- /dev/null +++ b/packages/DotNetZip.1.13.3/lib/netstandard2.0/DotNetZip.xml @@ -0,0 +1,18022 @@ + + + + DotNetZip + + + +

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

+ This is the version using unrolled loops. +

+
+ + Method "mainQSort3", file "blocksort.c", BZip2 1.0.2 + + + Array instance identical to sfmap, both are used only + temporarily and independently, so we do not need to allocate + additional memory. + + + + A read-only decorator stream that performs BZip2 decompression on Read. + + + + + Compressor State + + + + + Create a BZip2InputStream, wrapping it around the given input Stream. + + + + The input stream will be closed when the BZip2InputStream is closed. + + + The stream from which to read compressed data + + + + Create a BZip2InputStream with the given stream, and + specifying whether to leave the wrapped stream open when + the BZip2InputStream is closed. + + The stream from which to read compressed data + + Whether to leave the input stream open, when the BZip2InputStream closes. + + + + + This example reads a bzip2-compressed file, decompresses it, + and writes the decompressed data into a newly created file. + + + var fname = "logfile.log.bz2"; + using (var fs = File.OpenRead(fname)) + { + using (var decompressor = new Ionic.BZip2.BZip2InputStream(fs)) + { + var outFname = fname + ".decompressed"; + using (var output = File.Create(outFname)) + { + byte[] buffer = new byte[2048]; + int n; + while ((n = decompressor.Read(buffer, 0, buffer.Length)) > 0) + { + output.Write(buffer, 0, n); + } + } + } + } + + + + + + Read data from the stream. + + + + + To decompress a BZip2 data stream, create a BZip2InputStream, + providing a stream that reads compressed data. Then call Read() on + that BZip2InputStream, and the data read will be decompressed + as you read. + + + + A BZip2InputStream can be used only for Read(), not for Write(). + + + + The buffer into which the read data should be placed. + the offset within that data array to put the first byte read. + the number of bytes to read. + the number of bytes actually read + + + + Read a single byte from the stream. + + the byte read from the stream, or -1 if EOF + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Flush the stream. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the + total number of uncompressed bytes read in. + + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + this is irrelevant, since it will always throw! + irrelevant! + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + + + + Calling this method always throws a . + + this parameter is never used + this parameter is never used + this parameter is never used + + + + Dispose the stream. + + + indicates whether the Dispose method was invoked by user code. + + + + + Close the stream. + + + + + Read n bits from input, right justifying the result. + + + + For example, if you read 1 bit, the result is either 0 + or 1. + + + + The number of bits to read, always between 1 and 32. + + + + Called by createHuffmanDecodingTables() exclusively. + + + Called by recvDecodingTables() exclusively. + + + Freq table collected to save a pass over the data during + decompression. + + + Initializes the tt array. + + This method is called when the required length of the array is known. + I don't initialize it at construction time to avoid unneccessary + memory allocation when compressing small files. + + + + A write-only decorator stream that compresses data as it is + written using the BZip2 algorithm. + + + + + Constructs a new BZip2OutputStream, that sends its + compressed output to the given output stream. + + + + The destination stream, to which compressed output will be sent. + + + + + This example reads a file, then compresses it with bzip2 file, + and writes the compressed data into a newly created file. + + + var fname = "logfile.log"; + using (var fs = File.OpenRead(fname)) + { + var outFname = fname + ".bz2"; + using (var output = File.Create(outFname)) + { + using (var compressor = new Ionic.BZip2.BZip2OutputStream(output)) + { + byte[] buffer = new byte[2048]; + int n; + while ((n = fs.Read(buffer, 0, buffer.Length)) > 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + + + + Constructs a new BZip2OutputStream with specified blocksize. + + the destination stream. + + The blockSize in units of 100000 bytes. + The valid range is 1..9. + + + + + Constructs a new BZip2OutputStream. + + the destination stream. + + whether to leave the captive stream open upon closing this stream. + + + + + Constructs a new BZip2OutputStream with specified blocksize, + and explicitly specifies whether to leave the wrapped stream open. + + + the destination stream. + + The blockSize in units of 100000 bytes. + The valid range is 1..9. + + + whether to leave the captive stream open upon closing this stream. + + + + + Close the stream. + + + + This may or may not close the underlying stream. Check the + constructors that accept a bool value. + + + + + + Flush the stream. + + + + + The blocksize parameter specified at construction time. + + + + + Write data to the stream. + + + + + Use the BZip2OutputStream to compress data while writing: + create a BZip2OutputStream with a writable output stream. + Then call Write() on that BZip2OutputStream, providing + uncompressed data as input. The data sent to the output stream will + be the compressed form of the input data. + + + + A BZip2OutputStream can be used only for Write() not for Read(). + + + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Indicates whether the stream can be read. + + + The return value is always false. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value should always be true, unless and until the + object is disposed and closed. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the + total number of uncompressed bytes written through. + + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + this is irrelevant, since it will always throw! + irrelevant! + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + + + + Calling this method always throws a . + + this parameter is never used + this parameter is never used + this parameter is never used + never returns anything; always throws + + + + A write-only decorator stream that compresses data as it is + written using the BZip2 algorithm. This stream compresses by + block using multiple threads. + + + This class performs BZIP2 compression through writing. For + more information on the BZIP2 algorithm, see + . + + + + This class is similar to , + except that this implementation uses an approach that employs multiple + worker threads to perform the compression. On a multi-cpu or multi-core + computer, the performance of this class can be significantly higher than + the single-threaded BZip2OutputStream, particularly for larger streams. + How large? Anything over 10mb is a good candidate for parallel + compression. + + + + The tradeoff is that this class uses more memory and more CPU than the + vanilla BZip2OutputStream. Also, for small files, the + ParallelBZip2OutputStream can be much slower than the vanilla + BZip2OutputStream, because of the overhead associated to using the + thread pool. + + + + + + + Constructs a new ParallelBZip2OutputStream, that sends its + compressed output to the given output stream. + + + + The destination stream, to which compressed output will be sent. + + + + + This example reads a file, then compresses it with bzip2 file, + and writes the compressed data into a newly created file. + + + var fname = "logfile.log"; + using (var fs = File.OpenRead(fname)) + { + var outFname = fname + ".bz2"; + using (var output = File.Create(outFname)) + { + using (var compressor = new Ionic.BZip2.ParallelBZip2OutputStream(output)) + { + byte[] buffer = new byte[2048]; + int n; + while ((n = fs.Read(buffer, 0, buffer.Length)) > 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + + + + Constructs a new ParallelBZip2OutputStream with specified blocksize. + + the destination stream. + + The blockSize in units of 100000 bytes. + The valid range is 1..9. + + + + + Constructs a new ParallelBZip2OutputStream. + + the destination stream. + + whether to leave the captive stream open upon closing this stream. + + + + + Constructs a new ParallelBZip2OutputStream with specified blocksize, + and explicitly specifies whether to leave the wrapped stream open. + + + the destination stream. + + The blockSize in units of 100000 bytes. + The valid range is 1..9. + + + whether to leave the captive stream open upon closing this stream. + + + + + The maximum number of concurrent compression worker threads to use. + + + + + This property sets an upper limit on the number of concurrent worker + threads to employ for compression. The implementation of this stream + employs multiple threads from the .NET thread pool, via + ThreadPool.QueueUserWorkItem(), to compress the incoming data by + block. As each block of data is compressed, this stream re-orders the + compressed blocks and writes them to the output stream. + + + + A higher number of workers enables a higher degree of + parallelism, which tends to increase the speed of compression on + multi-cpu computers. On the other hand, a higher number of buffer + pairs also implies a larger memory consumption, more active worker + threads, and a higher cpu utilization for any compression. This + property enables the application to limit its memory consumption and + CPU utilization behavior depending on requirements. + + + + By default, DotNetZip allocates 4 workers per CPU core, subject to the + upper limit specified in this property. For example, suppose the + application sets this property to 16. Then, on a machine with 2 + cores, DotNetZip will use 8 workers; that number does not exceed the + upper limit specified by this property, so the actual number of + workers used will be 4 * 2 = 8. On a machine with 4 cores, DotNetZip + will use 16 workers; again, the limit does not apply. On a machine + with 8 cores, DotNetZip will use 16 workers, because of the limit. + + + + For each compression "worker thread" that occurs in parallel, there is + up to 2mb of memory allocated, for buffering and processing. The + actual number depends on the property. + + + + CPU utilization will also go up with additional workers, because a + larger number of buffer pairs allows a larger number of background + threads to compress in parallel. If you find that parallel + compression is consuming too much memory or CPU, you can adjust this + value downward. + + + + The default value is 16. Different values may deliver better or + worse results, depending on your priorities and the dynamic + performance characteristics of your storage and compute resources. + + + + The application can set this value at any time, but it is effective + only before the first call to Write(), which is when the buffers are + allocated. + + + + + + Close the stream. + + + + This may or may not close the underlying stream. Check the + constructors that accept a bool value. + + + + + + Flush the stream. + + + + + The blocksize parameter specified at construction time. + + + + + Write data to the stream. + + + + + Use the ParallelBZip2OutputStream to compress data while + writing: create a ParallelBZip2OutputStream with a writable + output stream. Then call Write() on that + ParallelBZip2OutputStream, providing uncompressed data as + input. The data sent to the output stream will be the compressed + form of the input data. + + + + A ParallelBZip2OutputStream can be used only for + Write() not for Read(). + + + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Indicates whether the stream can be read. + + + The return value is always false. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the + total number of uncompressed bytes written through. + + + + + The total number of bytes written out by the stream. + + + This value is meaningful only after a call to Close(). + + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + this is irrelevant, since it will always throw! + irrelevant! + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + + + + Calling this method always throws a . + + this parameter is never used + this parameter is never used + this parameter is never used + never returns anything; always throws + + + + Returns the "random" number at a specific index. + + the index + the random number + + + + Computes a CRC-32. The CRC-32 algorithm is parameterized - you + can set the polynomial and enable or disable bit + reversal. This can be used for GZIP, BZip2, or ZIP. + + + This type is used internally by DotNetZip; it is generally not used + directly by applications wishing to create, read, or manipulate zip + archive files. + + + + + Indicates the total number of bytes applied to the CRC. + + + + + Indicates the current CRC for all blocks slurped in. + + + + + Returns the CRC32 for the specified stream. + + The stream over which to calculate the CRC32 + the CRC32 calculation + + + + Returns the CRC32 for the specified stream, and writes the input into the + output stream. + + The stream over which to calculate the CRC32 + The stream into which to deflate the input + the CRC32 calculation + + + + Get the CRC32 for the given (word,byte) combo. This is a + computation defined by PKzip for PKZIP 2.0 (weak) encryption. + + The word to start with. + The byte to combine it with. + The CRC-ized result. + + + + Update the value for the running CRC32 using the given block of bytes. + This is useful when using the CRC32() class in a Stream. + + block of bytes to slurp + starting point in the block + how many bytes within the block to slurp + + + + Process one byte in the CRC. + + the byte to include into the CRC . + + + + Process a run of N identical bytes into the CRC. + + + + This method serves as an optimization for updating the CRC when a + run of identical bytes is found. Rather than passing in a buffer of + length n, containing all identical bytes b, this method accepts the + byte value and the length of the (virtual) buffer - the length of + the run. + + + the byte to include into the CRC. + the number of times that byte should be repeated. + + + + Combines the given CRC32 value with the current running total. + + + This is useful when using a divide-and-conquer approach to + calculating a CRC. Multiple threads can each calculate a + CRC32 on a segment of the data, and then combine the + individual CRC32 values at the end. + + the crc value to be combined with this one + the length of data the CRC value was calculated on + + + + Create an instance of the CRC32 class using the default settings: no + bit reversal, and a polynomial of 0xEDB88320. + + + + + Create an instance of the CRC32 class, specifying whether to reverse + data bits or not. + + + specify true if the instance should reverse data bits. + + + + In the CRC-32 used by BZip2, the bits are reversed. Therefore if you + want a CRC32 with compatibility with BZip2, you should pass true + here. In the CRC-32 used by GZIP and PKZIP, the bits are not + reversed; Therefore if you want a CRC32 with compatibility with + those, you should pass false. + + + + + + Create an instance of the CRC32 class, specifying the polynomial and + whether to reverse data bits or not. + + + The polynomial to use for the CRC, expressed in the reversed (LSB) + format: the highest ordered bit in the polynomial value is the + coefficient of the 0th power; the second-highest order bit is the + coefficient of the 1 power, and so on. Expressed this way, the + polynomial for the CRC-32C used in IEEE 802.3, is 0xEDB88320. + + + specify true if the instance should reverse data bits. + + + + + In the CRC-32 used by BZip2, the bits are reversed. Therefore if you + want a CRC32 with compatibility with BZip2, you should pass true + here for the reverseBits parameter. In the CRC-32 used by + GZIP and PKZIP, the bits are not reversed; Therefore if you want a + CRC32 with compatibility with those, you should pass false for the + reverseBits parameter. + + + + + + Reset the CRC-32 class - clear the CRC "remainder register." + + + + Use this when employing a single instance of this class to compute + multiple, distinct CRCs on multiple, distinct data blocks. + + + + + + A Stream that calculates a CRC32 (a checksum) on all bytes read, + or on all bytes written. + + + + + This class can be used to verify the CRC of a ZipEntry when + reading from a stream, or to calculate a CRC when writing to a + stream. The stream should be used to either read, or write, but + not both. If you intermix reads and writes, the results are not + defined. + + + + This class is intended primarily for use internally by the + DotNetZip library. + + + + + + The default constructor. + + + + Instances returned from this constructor will leave the underlying + stream open upon Close(). The stream uses the default CRC32 + algorithm, which implies a polynomial of 0xEDB88320. + + + The underlying stream + + + + The constructor allows the caller to specify how to handle the + underlying stream at close. + + + + The stream uses the default CRC32 algorithm, which implies a + polynomial of 0xEDB88320. + + + The underlying stream + true to leave the underlying stream + open upon close of the CrcCalculatorStream; false otherwise. + + + + A constructor allowing the specification of the length of the stream + to read. + + + + The stream uses the default CRC32 algorithm, which implies a + polynomial of 0xEDB88320. + + + Instances returned from this constructor will leave the underlying + stream open upon Close(). + + + The underlying stream + The length of the stream to slurp + + + + A constructor allowing the specification of the length of the stream + to read, as well as whether to keep the underlying stream open upon + Close(). + + + + The stream uses the default CRC32 algorithm, which implies a + polynomial of 0xEDB88320. + + + The underlying stream + The length of the stream to slurp + true to leave the underlying stream + open upon close of the CrcCalculatorStream; false otherwise. + + + + A constructor allowing the specification of the length of the stream + to read, as well as whether to keep the underlying stream open upon + Close(), and the CRC32 instance to use. + + + + The stream uses the specified CRC32 instance, which allows the + application to specify how the CRC gets calculated. + + + The underlying stream + The length of the stream to slurp + true to leave the underlying stream + open upon close of the CrcCalculatorStream; false otherwise. + the CRC32 instance to use to calculate the CRC32 + + + + Gets the total number of bytes run through the CRC32 calculator. + + + + This is either the total number of bytes read, or the total number of + bytes written, depending on the direction of this stream. + + + + + Provides the current CRC for all blocks slurped in. + + + + The running total of the CRC is kept as data is written or read + through the stream. read this property after all reads or writes to + get an accurate CRC for the entire stream. + + + + + + Indicates whether the underlying stream will be left open when the + CrcCalculatorStream is Closed. + + + + Set this at any point before calling . + + + + + + Read from the stream + + the buffer to read + the offset at which to start + the number of bytes to read + the number of bytes actually read + + + + Write to the stream. + + the buffer from which to write + the offset at which to start writing + the number of bytes to write + + + + Indicates whether the stream supports reading. + + + + + Indicates whether the stream supports seeking. + + + + Always returns false. + + + + + + Indicates whether the stream supports writing. + + + + + Flush the stream. + + + + + Returns the length of the underlying stream. + + + + + The getter for this property returns the total bytes read. + If you use the setter, it will throw + . + + + + + Seeking is not supported on this stream. This method always throws + + + N/A + N/A + N/A + + + + This method always throws + + + N/A + + + + Closes the stream. + + + + + A class for compressing and decompressing streams using the Deflate algorithm. + + + + + + The DeflateStream is a Decorator on a . It adds DEFLATE compression or decompression to any + stream. + + + + Using this stream, applications can compress or decompress data via stream + Read and Write operations. Either compresssion or decompression + can occur through either reading or writing. The compression format used is + DEFLATE, which is documented in IETF RFC 1951, "DEFLATE + Compressed Data Format Specification version 1.3.". + + + + This class is similar to , except that + ZlibStream adds the RFC + 1950 - ZLIB framing bytes to a compressed stream when compressing, or + expects the RFC1950 framing bytes when decompressing. The DeflateStream + does not. + + + + + + + + + + Create a DeflateStream using the specified CompressionMode. + + + + When mode is CompressionMode.Compress, the DeflateStream will use + the default compression level. The "captive" stream will be closed when + the DeflateStream is closed. + + + + This example uses a DeflateStream to compress data from a file, and writes + the compressed data to another file. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(fileToCompress + ".deflated")) + { + using (Stream compressor = new DeflateStream(raw, CompressionMode.Compress)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(fileToCompress & ".deflated") + Using compressor As Stream = New DeflateStream(raw, CompressionMode.Compress) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream which will be read or written. + Indicates whether the DeflateStream will compress or decompress. + + + + Create a DeflateStream using the specified CompressionMode and the specified CompressionLevel. + + + + + + When mode is CompressionMode.Decompress, the level parameter is + ignored. The "captive" stream will be closed when the DeflateStream is + closed. + + + + + + + This example uses a DeflateStream to compress data from a file, and writes + the compressed data to another file. + + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(fileToCompress + ".deflated")) + { + using (Stream compressor = new DeflateStream(raw, + CompressionMode.Compress, + CompressionLevel.BestCompression)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n= -1; + while (n != 0) + { + if (n > 0) + compressor.Write(buffer, 0, n); + n= input.Read(buffer, 0, buffer.Length); + } + } + } + } + + + + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(fileToCompress & ".deflated") + Using compressor As Stream = New DeflateStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream to be read or written while deflating or inflating. + Indicates whether the DeflateStream will compress or decompress. + A tuning knob to trade speed for effectiveness. + + + + Create a DeflateStream using the specified + CompressionMode, and explicitly specify whether the + stream should be left open after Deflation or Inflation. + + + + + + This constructor allows the application to request that the captive stream + remain open after the deflation or inflation occurs. By default, after + Close() is called on the stream, the captive stream is also + closed. In some cases this is not desired, for example if the stream is a + memory stream that will be re-read after compression. Specify true for + the parameter to leave the stream open. + + + + The DeflateStream will use the default compression level. + + + + See the other overloads of this constructor for example code. + + + + + The stream which will be read or written. This is called the + "captive" stream in other places in this documentation. + + + + Indicates whether the DeflateStream will compress or decompress. + + + true if the application would like the stream to + remain open after inflation/deflation. + + + + Create a DeflateStream using the specified CompressionMode + and the specified CompressionLevel, and explicitly specify whether + the stream should be left open after Deflation or Inflation. + + + + + + When mode is CompressionMode.Decompress, the level parameter is ignored. + + + + This constructor allows the application to request that the captive stream + remain open after the deflation or inflation occurs. By default, after + Close() is called on the stream, the captive stream is also + closed. In some cases this is not desired, for example if the stream is a + that will be re-read after + compression. Specify true for the parameter + to leave the stream open. + + + + + + + This example shows how to use a DeflateStream to compress data from + a file, and store the compressed data into another file. + + + using (var output = System.IO.File.Create(fileToCompress + ".deflated")) + { + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (Stream compressor = new DeflateStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n= -1; + while (n != 0) + { + if (n > 0) + compressor.Write(buffer, 0, n); + n= input.Read(buffer, 0, buffer.Length); + } + } + } + // can write additional data to the output stream here + } + + + + Using output As FileStream = File.Create(fileToCompress & ".deflated") + Using input As Stream = File.OpenRead(fileToCompress) + Using compressor As Stream = New DeflateStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + ' can write additional data to the output stream here. + End Using + + + The stream which will be read or written. + Indicates whether the DeflateStream will compress or decompress. + true if the application would like the stream to remain open after inflation/deflation. + A tuning knob to trade speed for effectiveness. + + + + This property sets the flush behavior on the stream. + + See the ZLIB documentation for the meaning of the flush behavior. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is + 1024 bytes. The minimum size is 128 bytes. You may get better performance + with a larger buffer. Then again, you might not. You would have to test + it. + + + + Set this before the first call to Read() or Write() on the + stream. If you try to set it afterwards, it will throw. + + + + + + The ZLIB strategy to be used during compression. + + + + By tweaking this parameter, you may be able to optimize the compression for + data with particular characteristics. + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Dispose the stream. + + + + This may or may not result in a Close() call on the captive + stream. See the constructors that have a leaveOpen parameter + for more information. + + + Application code won't call this code directly. This method may be + invoked in two distinct scenarios. If disposing == true, the method + has been called directly or indirectly by a user's code, for example + via the public Dispose() method. In this case, both managed and + unmanaged resources can be referenced and disposed. If disposing == + false, the method has been called by the runtime from inside the + object finalizer and this method should not reference other objects; + in that case only unmanaged resources must be referenced or + disposed. + + + + true if the Dispose method was invoked by user code. + + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Flush the stream. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the total bytes + written out, if used in writing, or the total bytes read in, if used in + reading. The count may refer to compressed bytes or uncompressed bytes, + depending on how you've used the stream. + + + + + Read data from the stream. + + + + + If you wish to use the DeflateStream to compress data while + reading, you can create a DeflateStream with + CompressionMode.Compress, providing an uncompressed data stream. + Then call Read() on that DeflateStream, and the data read will be + compressed as you read. If you wish to use the DeflateStream to + decompress data while reading, you can create a DeflateStream with + CompressionMode.Decompress, providing a readable compressed data + stream. Then call Read() on that DeflateStream, and the data read + will be decompressed as you read. + + + + A DeflateStream can be used for Read() or Write(), but not both. + + + + The buffer into which the read data should be placed. + the offset within that data array to put the first byte read. + the number of bytes to read. + the number of bytes actually read + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + this is irrelevant, since it will always throw! + irrelevant! + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + + + + Write data to the stream. + + + + + If you wish to use the DeflateStream to compress data while + writing, you can create a DeflateStream with + CompressionMode.Compress, and a writable output stream. Then call + Write() on that DeflateStream, providing uncompressed data + as input. The data sent to the output stream will be the compressed form + of the data written. If you wish to use the DeflateStream to + decompress data while writing, you can create a DeflateStream with + CompressionMode.Decompress, and a writable output stream. Then + call Write() on that stream, providing previously compressed + data. The data sent to the output stream will be the decompressed form of + the data written. + + + + A DeflateStream can be used for Read() or Write(), + but not both. + + + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Compress a string into a byte array using DEFLATE (RFC 1951). + + + + Uncompress it with . + + + DeflateStream.UncompressString(byte[]) + DeflateStream.CompressBuffer(byte[]) + GZipStream.CompressString(string) + ZlibStream.CompressString(string) + + + A string to compress. The string will first be encoded + using UTF8, then compressed. + + + The string in compressed form + + + + Compress a byte array into a new byte array using DEFLATE. + + + + Uncompress it with . + + + DeflateStream.CompressString(string) + DeflateStream.UncompressBuffer(byte[]) + GZipStream.CompressBuffer(byte[]) + ZlibStream.CompressBuffer(byte[]) + + + A buffer to compress. + + + The data in compressed form + + + + Uncompress a DEFLATE'd byte array into a single string. + + + DeflateStream.CompressString(String) + DeflateStream.UncompressBuffer(byte[]) + GZipStream.UncompressString(byte[]) + ZlibStream.UncompressString(byte[]) + + + A buffer containing DEFLATE-compressed data. + + + The uncompressed string + + + + Uncompress a DEFLATE'd byte array into a byte array. + + + DeflateStream.CompressBuffer(byte[]) + DeflateStream.UncompressString(byte[]) + GZipStream.UncompressBuffer(byte[]) + ZlibStream.UncompressBuffer(byte[]) + + + A buffer containing data that has been compressed with DEFLATE. + + + The data in uncompressed form + + + + A class for compressing and decompressing GZIP streams. + + + + + The GZipStream is a Decorator on a + . It adds GZIP compression or decompression to any + stream. + + + + Like the System.IO.Compression.GZipStream in the .NET Base Class Library, the + Ionic.Zlib.GZipStream can compress while writing, or decompress while + reading, but not vice versa. The compression method used is GZIP, which is + documented in IETF RFC + 1952, "GZIP file format specification version 4.3". + + + A GZipStream can be used to decompress data (through Read()) or + to compress data (through Write()), but not both. + + + + If you wish to use the GZipStream to compress data, you must wrap it + around a write-able stream. As you call Write() on the GZipStream, the + data will be compressed into the GZIP format. If you want to decompress data, + you must wrap the GZipStream around a readable stream that contains an + IETF RFC 1952-compliant stream. The data will be decompressed as you call + Read() on the GZipStream. + + + + Though the GZIP format allows data from multiple files to be concatenated + together, this stream handles only a single segment of GZIP format, typically + representing a single file. + + + + This class is similar to and . + ZlibStream handles RFC1950-compliant streams. + handles RFC1951-compliant streams. This class handles RFC1952-compliant streams. + + + + + + + + + + The comment on the GZIP stream. + + + + + The GZIP format allows for each file to optionally have an associated + comment stored with the file. The comment is encoded with the ISO-8859-1 + code page. To include a comment in a GZIP stream you create, set this + property before calling Write() for the first time on the + GZipStream. + + + + When using GZipStream to decompress, you can retrieve this property + after the first call to Read(). If no comment has been set in the + GZIP bytestream, the Comment property will return null + (Nothing in VB). + + + + + + The FileName for the GZIP stream. + + + + + + The GZIP format optionally allows each file to have an associated + filename. When compressing data (through Write()), set this + FileName before calling Write() the first time on the GZipStream. + The actual filename is encoded into the GZIP bytestream with the + ISO-8859-1 code page, according to RFC 1952. It is the application's + responsibility to insure that the FileName can be encoded and decoded + correctly with this code page. + + + + When decompressing (through Read()), you can retrieve this value + any time after the first Read(). In the case where there was no filename + encoded into the GZIP bytestream, the property will return null (Nothing + in VB). + + + + + + The last modified time for the GZIP stream. + + + + GZIP allows the storage of a last modified time with each GZIP entry. + When compressing data, you can set this before the first call to + Write(). When decompressing, you can retrieve this value any time + after the first call to Read(). + + + + + The CRC on the GZIP stream. + + + This is used for internal error checking. You probably don't need to look at this property. + + + + + Create a GZipStream using the specified CompressionMode. + + + + + When mode is CompressionMode.Compress, the GZipStream will use the + default compression level. + + + + As noted in the class documentation, the CompressionMode (Compress + or Decompress) also establishes the "direction" of the stream. A + GZipStream with CompressionMode.Compress works only through + Write(). A GZipStream with + CompressionMode.Decompress works only through Read(). + + + + + + This example shows how to use a GZipStream to compress data. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(outputFile)) + { + using (Stream compressor = new GZipStream(raw, CompressionMode.Compress)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Dim outputFile As String = (fileToCompress & ".compressed") + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(outputFile) + Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + + + This example shows how to use a GZipStream to uncompress a file. + + private void GunZipFile(string filename) + { + if (!filename.EndsWith(".gz)) + throw new ArgumentException("filename"); + var DecompressedFile = filename.Substring(0,filename.Length-3); + byte[] working = new byte[WORKING_BUFFER_SIZE]; + int n= 1; + using (System.IO.Stream input = System.IO.File.OpenRead(filename)) + { + using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) + { + using (var output = System.IO.File.Create(DecompressedFile)) + { + while (n !=0) + { + n= decompressor.Read(working, 0, working.Length); + if (n > 0) + { + output.Write(working, 0, n); + } + } + } + } + } + } + + + + Private Sub GunZipFile(ByVal filename as String) + If Not (filename.EndsWith(".gz)) Then + Throw New ArgumentException("filename") + End If + Dim DecompressedFile as String = filename.Substring(0,filename.Length-3) + Dim working(WORKING_BUFFER_SIZE) as Byte + Dim n As Integer = 1 + Using input As Stream = File.OpenRead(filename) + Using decompressor As Stream = new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, True) + Using output As Stream = File.Create(UncompressedFile) + Do + n= decompressor.Read(working, 0, working.Length) + If n > 0 Then + output.Write(working, 0, n) + End IF + Loop While (n > 0) + End Using + End Using + End Using + End Sub + + + + The stream which will be read or written. + Indicates whether the GZipStream will compress or decompress. + + + + Create a GZipStream using the specified CompressionMode and + the specified CompressionLevel. + + + + + The CompressionMode (Compress or Decompress) also establishes the + "direction" of the stream. A GZipStream with + CompressionMode.Compress works only through Write(). A + GZipStream with CompressionMode.Decompress works only + through Read(). + + + + + + + This example shows how to use a GZipStream to compress a file into a .gz file. + + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(fileToCompress + ".gz")) + { + using (Stream compressor = new GZipStream(raw, + CompressionMode.Compress, + CompressionLevel.BestCompression)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(fileToCompress & ".gz") + Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream to be read or written while deflating or inflating. + Indicates whether the GZipStream will compress or decompress. + A tuning knob to trade speed for effectiveness. + + + + Create a GZipStream using the specified CompressionMode, and + explicitly specify whether the stream should be left open after Deflation + or Inflation. + + + + + This constructor allows the application to request that the captive stream + remain open after the deflation or inflation occurs. By default, after + Close() is called on the stream, the captive stream is also + closed. In some cases this is not desired, for example if the stream is a + memory stream that will be re-read after compressed data has been written + to it. Specify true for the parameter to leave + the stream open. + + + + The (Compress or Decompress) also + establishes the "direction" of the stream. A GZipStream with + CompressionMode.Compress works only through Write(). A GZipStream + with CompressionMode.Decompress works only through Read(). + + + + The GZipStream will use the default compression level. If you want + to specify the compression level, see . + + + + See the other overloads of this constructor for example code. + + + + + + The stream which will be read or written. This is called the "captive" + stream in other places in this documentation. + + + Indicates whether the GZipStream will compress or decompress. + + + + true if the application would like the base stream to remain open after + inflation/deflation. + + + + + Create a GZipStream using the specified CompressionMode and the + specified CompressionLevel, and explicitly specify whether the + stream should be left open after Deflation or Inflation. + + + + + + This constructor allows the application to request that the captive stream + remain open after the deflation or inflation occurs. By default, after + Close() is called on the stream, the captive stream is also + closed. In some cases this is not desired, for example if the stream is a + memory stream that will be re-read after compressed data has been written + to it. Specify true for the parameter to + leave the stream open. + + + + As noted in the class documentation, the CompressionMode (Compress + or Decompress) also establishes the "direction" of the stream. A + GZipStream with CompressionMode.Compress works only through + Write(). A GZipStream with CompressionMode.Decompress works only + through Read(). + + + + + + This example shows how to use a GZipStream to compress data. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(outputFile)) + { + using (Stream compressor = new GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, true)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Dim outputFile As String = (fileToCompress & ".compressed") + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(outputFile) + Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, True) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream which will be read or written. + Indicates whether the GZipStream will compress or decompress. + true if the application would like the stream to remain open after inflation/deflation. + A tuning knob to trade speed for effectiveness. + + + + This property sets the flush behavior on the stream. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is + 1024 bytes. The minimum size is 128 bytes. You may get better performance + with a larger buffer. Then again, you might not. You would have to test + it. + + + + Set this before the first call to Read() or Write() on the + stream. If you try to set it afterwards, it will throw. + + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Dispose the stream. + + + + This may or may not result in a Close() call on the captive + stream. See the constructors that have a leaveOpen parameter + for more information. + + + This method may be invoked in two distinct scenarios. If disposing + == true, the method has been called directly or indirectly by a + user's code, for example via the public Dispose() method. In this + case, both managed and unmanaged resources can be referenced and + disposed. If disposing == false, the method has been called by the + runtime from inside the object finalizer and this method should not + reference other objects; in that case only unmanaged resources must + be referenced or disposed. + + + + indicates whether the Dispose method was invoked by user code. + + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Flush the stream. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the total bytes + written out, if used in writing, or the total bytes read in, if used in + reading. The count may refer to compressed bytes or uncompressed bytes, + depending on how you've used the stream. + + + + + Read and decompress data from the source stream. + + + + With a GZipStream, decompression is done through reading. + + + + + byte[] working = new byte[WORKING_BUFFER_SIZE]; + using (System.IO.Stream input = System.IO.File.OpenRead(_CompressedFile)) + { + using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) + { + using (var output = System.IO.File.Create(_DecompressedFile)) + { + int n; + while ((n= decompressor.Read(working, 0, working.Length)) !=0) + { + output.Write(working, 0, n); + } + } + } + } + + + The buffer into which the decompressed data should be placed. + the offset within that data array to put the first byte read. + the number of bytes to read. + the number of bytes actually read + + + + Calling this method always throws a . + + irrelevant; it will always throw! + irrelevant; it will always throw! + irrelevant! + + + + Calling this method always throws a . + + irrelevant; this method will always throw! + + + + Write data to the stream. + + + + + If you wish to use the GZipStream to compress data while writing, + you can create a GZipStream with CompressionMode.Compress, and a + writable output stream. Then call Write() on that GZipStream, + providing uncompressed data as input. The data sent to the output stream + will be the compressed form of the data written. + + + + A GZipStream can be used for Read() or Write(), but not + both. Writing implies compression. Reading implies decompression. + + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Compress a string into a byte array using GZip. + + + + Uncompress it with . + + + + + + + A string to compress. The string will first be encoded + using UTF8, then compressed. + + + The string in compressed form + + + + Compress a byte array into a new byte array using GZip. + + + + Uncompress it with . + + + + + + + A buffer to compress. + + + The data in compressed form + + + + Uncompress a GZip'ed byte array into a single string. + + + + + + + A buffer containing GZIP-compressed data. + + + The uncompressed string + + + + Uncompress a GZip'ed byte array into a byte array. + + + + + + + A buffer containing data that has been compressed with GZip. + + + The data in uncompressed form + + + + A class for compressing streams using the + Deflate algorithm with multiple threads. + + + + + This class performs DEFLATE compression through writing. For + more information on the Deflate algorithm, see IETF RFC 1951, + "DEFLATE Compressed Data Format Specification version 1.3." + + + + This class is similar to , except + that this class is for compression only, and this implementation uses an + approach that employs multiple worker threads to perform the DEFLATE. On + a multi-cpu or multi-core computer, the performance of this class can be + significantly higher than the single-threaded DeflateStream, particularly + for larger streams. How large? Anything over 10mb is a good candidate + for parallel compression. + + + + The tradeoff is that this class uses more memory and more CPU than the + vanilla DeflateStream, and also is less efficient as a compressor. For + large files the size of the compressed data stream can be less than 1% + larger than the size of a compressed data stream from the vanialla + DeflateStream. For smaller files the difference can be larger. The + difference will also be larger if you set the BufferSize to be lower than + the default value. Your mileage may vary. Finally, for small files, the + ParallelDeflateOutputStream can be much slower than the vanilla + DeflateStream, because of the overhead associated to using the thread + pool. + + + + + + + + Create a ParallelDeflateOutputStream. + + + + + This stream compresses data written into it via the DEFLATE + algorithm (see RFC 1951), and writes out the compressed byte stream. + + + + The instance will use the default compression level, the default + buffer sizes and the default number of threads and buffers per + thread. + + + + This class is similar to , + except that this implementation uses an approach that employs + multiple worker threads to perform the DEFLATE. On a multi-cpu or + multi-core computer, the performance of this class can be + significantly higher than the single-threaded DeflateStream, + particularly for larger streams. How large? Anything over 10mb is + a good candidate for parallel compression. + + + + + + + This example shows how to use a ParallelDeflateOutputStream to compress + data. It reads a file, compresses it, and writes the compressed data to + a second, output file. + + + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n= -1; + String outputFile = fileToCompress + ".compressed"; + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(outputFile)) + { + using (Stream compressor = new ParallelDeflateOutputStream(raw)) + { + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Dim outputFile As String = (fileToCompress & ".compressed") + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(outputFile) + Using compressor As Stream = New ParallelDeflateOutputStream(raw) + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream to which compressed data will be written. + + + + Create a ParallelDeflateOutputStream using the specified CompressionLevel. + + + See the + constructor for example code. + + The stream to which compressed data will be written. + A tuning knob to trade speed for effectiveness. + + + + Create a ParallelDeflateOutputStream and specify whether to leave the captive stream open + when the ParallelDeflateOutputStream is closed. + + + See the + constructor for example code. + + The stream to which compressed data will be written. + + true if the application would like the stream to remain open after inflation/deflation. + + + + + Create a ParallelDeflateOutputStream and specify whether to leave the captive stream open + when the ParallelDeflateOutputStream is closed. + + + See the + constructor for example code. + + The stream to which compressed data will be written. + A tuning knob to trade speed for effectiveness. + + true if the application would like the stream to remain open after inflation/deflation. + + + + + Create a ParallelDeflateOutputStream using the specified + CompressionLevel and CompressionStrategy, and specifying whether to + leave the captive stream open when the ParallelDeflateOutputStream is + closed. + + + See the + constructor for example code. + + The stream to which compressed data will be written. + A tuning knob to trade speed for effectiveness. + + By tweaking this parameter, you may be able to optimize the compression for + data with particular characteristics. + + + true if the application would like the stream to remain open after inflation/deflation. + + + + + The ZLIB strategy to be used during compression. + + + + + + The maximum number of buffer pairs to use. + + + + + This property sets an upper limit on the number of memory buffer + pairs to create. The implementation of this stream allocates + multiple buffers to facilitate parallel compression. As each buffer + fills up, this stream uses + ThreadPool.QueueUserWorkItem() + to compress those buffers in a background threadpool thread. After a + buffer is compressed, it is re-ordered and written to the output + stream. + + + + A higher number of buffer pairs enables a higher degree of + parallelism, which tends to increase the speed of compression on + multi-cpu computers. On the other hand, a higher number of buffer + pairs also implies a larger memory consumption, more active worker + threads, and a higher cpu utilization for any compression. This + property enables the application to limit its memory consumption and + CPU utilization behavior depending on requirements. + + + + For each compression "task" that occurs in parallel, there are 2 + buffers allocated: one for input and one for output. This property + sets a limit for the number of pairs. The total amount of storage + space allocated for buffering will then be (N*S*2), where N is the + number of buffer pairs, S is the size of each buffer (). By default, DotNetZip allocates 4 buffer + pairs per CPU core, so if your machine has 4 cores, and you retain + the default buffer size of 128k, then the + ParallelDeflateOutputStream will use 4 * 4 * 2 * 128kb of buffer + memory in total, or 4mb, in blocks of 128kb. If you then set this + property to 8, then the number will be 8 * 2 * 128kb of buffer + memory, or 2mb. + + + + CPU utilization will also go up with additional buffers, because a + larger number of buffer pairs allows a larger number of background + threads to compress in parallel. If you find that parallel + compression is consuming too much memory or CPU, you can adjust this + value downward. + + + + The default value is 16. Different values may deliver better or + worse results, depending on your priorities and the dynamic + performance characteristics of your storage and compute resources. + + + + This property is not the number of buffer pairs to use; it is an + upper limit. An illustration: Suppose you have an application that + uses the default value of this property (which is 16), and it runs + on a machine with 2 CPU cores. In that case, DotNetZip will allocate + 4 buffer pairs per CPU core, for a total of 8 pairs. The upper + limit specified by this property has no effect. + + + + The application can set this value at any time, but it is effective + only before the first call to Write(), which is when the buffers are + allocated. + + + + + + The size of the buffers used by the compressor threads. + + + + + The default buffer size is 128k. The application can set this value + at any time, but it is effective only before the first Write(). + + + + Larger buffer sizes implies larger memory consumption but allows + more efficient compression. Using smaller buffer sizes consumes less + memory but may result in less effective compression. For example, + using the default buffer size of 128k, the compression delivered is + within 1% of the compression delivered by the single-threaded . On the other hand, using a + BufferSize of 8k can result in a compressed data stream that is 5% + larger than that delivered by the single-threaded + DeflateStream. Excessively small buffer sizes can also cause + the speed of the ParallelDeflateOutputStream to drop, because of + larger thread scheduling overhead dealing with many many small + buffers. + + + + The total amount of storage space allocated for buffering will be + (N*S*2), where N is the number of buffer pairs, and S is the size of + each buffer (this property). There are 2 buffers used by the + compressor, one for input and one for output. By default, DotNetZip + allocates 4 buffer pairs per CPU core, so if your machine has 4 + cores, then the number of buffer pairs used will be 16. If you + accept the default value of this property, 128k, then the + ParallelDeflateOutputStream will use 16 * 2 * 128kb of buffer memory + in total, or 4mb, in blocks of 128kb. If you set this property to + 64kb, then the number will be 16 * 2 * 64kb of buffer memory, or + 2mb. + + + + + + + The CRC32 for the data that was written out, prior to compression. + + + This value is meaningful only after a call to Close(). + + + + + The total number of uncompressed bytes processed by the ParallelDeflateOutputStream. + + + This value is meaningful only after a call to Close(). + + + + + Write data to the stream. + + + + + + To use the ParallelDeflateOutputStream to compress data, create a + ParallelDeflateOutputStream with CompressionMode.Compress, passing a + writable output stream. Then call Write() on that + ParallelDeflateOutputStream, providing uncompressed data as input. The + data sent to the output stream will be the compressed form of the data + written. + + + + To decompress data, use the class. + + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Flush the stream. + + + + + Close the stream. + + + You must call Close on the stream to guarantee that all of the data written in has + been compressed, and the compressed data has been written out. + + + + Dispose the object + + + Because ParallelDeflateOutputStream is IDisposable, the + application must call this method when finished using the instance. + + + This method is generally called implicitly upon exit from + a using scope in C# (Using in VB). + + + + + The Dispose method + + indicates whether the Dispose method was invoked by user code. + + + + + Resets the stream for use with another stream. + + + Because the ParallelDeflateOutputStream is expensive to create, it + has been designed so that it can be recycled and re-used. You have + to call Close() on the stream first, then you can call Reset() on + it, to use it again on another stream. + + + + The new output stream for this era. + + + + + ParallelDeflateOutputStream deflater = null; + foreach (var inputFile in listOfFiles) + { + string outputFile = inputFile + ".compressed"; + using (System.IO.Stream input = System.IO.File.OpenRead(inputFile)) + { + using (var outStream = System.IO.File.Create(outputFile)) + { + if (deflater == null) + deflater = new ParallelDeflateOutputStream(outStream, + CompressionLevel.Best, + CompressionStrategy.Default, + true); + deflater.Reset(outStream); + + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + deflater.Write(buffer, 0, n); + } + } + } + } + + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream supports Read operations. + + + Always returns false. + + + + + Indicates whether the stream supports Write operations. + + + Returns true if the provided stream is writable. + + + + + Reading this property always throws a NotSupportedException. + + + + + Returns the current position of the output stream. + + + + Because the output gets written by a background thread, + the value may change asynchronously. Setting this + property always throws a NotSupportedException. + + + + + + This method always throws a NotSupportedException. + + + The buffer into which data would be read, IF THIS METHOD + ACTUALLY DID ANYTHING. + + + The offset within that data array at which to insert the + data that is read, IF THIS METHOD ACTUALLY DID + ANYTHING. + + + The number of bytes to write, IF THIS METHOD ACTUALLY DID + ANYTHING. + + nothing. + + + + This method always throws a NotSupportedException. + + + The offset to seek to.... + IF THIS METHOD ACTUALLY DID ANYTHING. + + + The reference specifying how to apply the offset.... IF + THIS METHOD ACTUALLY DID ANYTHING. + + nothing. It always throws. + + + + This method always throws a NotSupportedException. + + + The new value for the stream length.... IF + THIS METHOD ACTUALLY DID ANYTHING. + + + + + Map from a distance to a distance code. + + + No side effects. _dist_code[256] and _dist_code[257] are never used. + + + + + Describes how to flush the current deflate operation. + + + The different FlushType values are useful when using a Deflate in a streaming application. + + + + No flush at all. + + + Closes the current block, but doesn't flush it to + the output. Used internally only in hypothetical + scenarios. This was supposed to be removed by Zlib, but it is + still in use in some edge cases. + + + + + Use this during compression to specify that all pending output should be + flushed to the output buffer and the output should be aligned on a byte + boundary. You might use this in a streaming communication scenario, so that + the decompressor can get all input data available so far. When using this + with a ZlibCodec, AvailableBytesIn will be zero after the call if + enough output space has been provided before the call. Flushing will + degrade compression and so it should be used only when necessary. + + + + + Use this during compression to specify that all output should be flushed, as + with FlushType.Sync, but also, the compression state should be reset + so that decompression can restart from this point if previous compressed + data has been damaged or if random access is desired. Using + FlushType.Full too often can significantly degrade the compression. + + + + Signals the end of the compression/decompression stream. + + + + The compression level to be used when using a DeflateStream or ZlibStream with CompressionMode.Compress. + + + + + None means that the data will be simply stored, with no change at all. + If you are producing ZIPs for use on Mac OSX, be aware that archives produced with CompressionLevel.None + cannot be opened with the default zip reader. Use a different CompressionLevel. + + + + + Same as None. + + + + + The fastest but least effective compression. + + + + + A synonym for BestSpeed. + + + + + A little slower, but better, than level 1. + + + + + A little slower, but better, than level 2. + + + + + A little slower, but better, than level 3. + + + + + A little slower than level 4, but with better compression. + + + + + The default compression level, with a good balance of speed and compression efficiency. + + + + + A synonym for Default. + + + + + Pretty good compression! + + + + + Better compression than Level7! + + + + + The "best" compression, where best means greatest reduction in size of the input data stream. + This is also the slowest compression. + + + + + A synonym for BestCompression. + + + + + Describes options for how the compression algorithm is executed. Different strategies + work better on different sorts of data. The strategy parameter can affect the compression + ratio and the speed of compression but not the correctness of the compresssion. + + + + + The default strategy is probably the best for normal data. + + + + + The Filtered strategy is intended to be used most effectively with data produced by a + filter or predictor. By this definition, filtered data consists mostly of small + values with a somewhat random distribution. In this case, the compression algorithm + is tuned to compress them better. The effect of Filtered is to force more Huffman + coding and less string matching; it is a half-step between Default and HuffmanOnly. + + + + + Using HuffmanOnly will force the compressor to do Huffman encoding only, with no + string matching. + + + + + An enum to specify the direction of transcoding - whether to compress or decompress. + + + + + Used to specify that the stream should compress the data. + + + + + Used to specify that the stream should decompress the data. + + + + + A general purpose exception class for exceptions in the Zlib library. + + + + + The ZlibException class captures exception information generated + by the Zlib library. + + + + + This ctor collects a message attached to the exception. + + the message for the exception. + + + + Performs an unsigned bitwise right shift with the specified number + + Number to operate on + Ammount of bits to shift + The resulting number from the shift operation + + + + Reads a number of characters from the current source TextReader and writes + the data to the target array at the specified index. + + + The source TextReader to read from + Contains the array of characteres read from the source TextReader. + The starting index of the target array. + The maximum number of characters to read from the source TextReader. + + + The number of characters read. The number will be less than or equal to + count depending on the data available in the source TextReader. Returns -1 + if the end of the stream is reached. + + + + + Computes an Adler-32 checksum. + + + The Adler checksum is similar to a CRC checksum, but faster to compute, though less + reliable. It is used in producing RFC1950 compressed streams. The Adler checksum + is a required part of the "ZLIB" standard. Applications will almost never need to + use this class directly. + + + + + + + Calculates the Adler32 checksum. + + + + This is used within ZLIB. You probably don't need to use this directly. + + + + To compute an Adler32 checksum on a byte array: + + var adler = Adler.Adler32(0, null, 0, 0); + adler = Adler.Adler32(adler, buffer, index, length); + + + + + + Encoder and Decoder for ZLIB and DEFLATE (IETF RFC1950 and RFC1951). + + + + This class compresses and decompresses data according to the Deflate algorithm + and optionally, the ZLIB format, as documented in RFC 1950 - ZLIB and RFC 1951 - DEFLATE. + + + + + The buffer from which data is taken. + + + + + An index into the InputBuffer array, indicating where to start reading. + + + + + The number of bytes available in the InputBuffer, starting at NextIn. + + + Generally you should set this to InputBuffer.Length before the first Inflate() or Deflate() call. + The class will update this number as calls to Inflate/Deflate are made. + + + + + Total number of bytes read so far, through all calls to Inflate()/Deflate(). + + + + + Buffer to store output data. + + + + + An index into the OutputBuffer array, indicating where to start writing. + + + + + The number of bytes available in the OutputBuffer, starting at NextOut. + + + Generally you should set this to OutputBuffer.Length before the first Inflate() or Deflate() call. + The class will update this number as calls to Inflate/Deflate are made. + + + + + Total number of bytes written to the output so far, through all calls to Inflate()/Deflate(). + + + + + used for diagnostics, when something goes wrong! + + + + + The compression level to use in this codec. Useful only in compression mode. + + + + + The number of Window Bits to use. + + + This gauges the size of the sliding window, and hence the + compression effectiveness as well as memory consumption. It's best to just leave this + setting alone if you don't know what it is. The maximum value is 15 bits, which implies + a 32k window. + + + + + The compression strategy to use. + + + This is only effective in compression. The theory offered by ZLIB is that different + strategies could potentially produce significant differences in compression behavior + for different data sets. Unfortunately I don't have any good recommendations for how + to set it differently. When I tested changing the strategy I got minimally different + compression performance. It's best to leave this property alone if you don't have a + good feel for it. Or, you may want to produce a test harness that runs through the + different strategy options and evaluates them on different file types. If you do that, + let me know your results. + + + + + The Adler32 checksum on the data transferred through the codec so far. You probably don't need to look at this. + + + + + Create a ZlibCodec. + + + If you use this default constructor, you will later have to explicitly call + InitializeInflate() or InitializeDeflate() before using the ZlibCodec to compress + or decompress. + + + + + Create a ZlibCodec that either compresses or decompresses. + + + Indicates whether the codec should compress (deflate) or decompress (inflate). + + + + + Initialize the inflation state. + + + It is not necessary to call this before using the ZlibCodec to inflate data; + It is implicitly called when you call the constructor. + + Z_OK if everything goes well. + + + + Initialize the inflation state with an explicit flag to + govern the handling of RFC1950 header bytes. + + + + By default, the ZLIB header defined in RFC 1950 is expected. If + you want to read a zlib stream you should specify true for + expectRfc1950Header. If you have a deflate stream, you will want to specify + false. It is only necessary to invoke this initializer explicitly if you + want to specify false. + + + whether to expect an RFC1950 header byte + pair when reading the stream of data to be inflated. + + Z_OK if everything goes well. + + + + Initialize the ZlibCodec for inflation, with the specified number of window bits. + + The number of window bits to use. If you need to ask what that is, + then you shouldn't be calling this initializer. + Z_OK if all goes well. + + + + Initialize the inflation state with an explicit flag to govern the handling of + RFC1950 header bytes. + + + + If you want to read a zlib stream you should specify true for + expectRfc1950Header. In this case, the library will expect to find a ZLIB + header, as defined in RFC + 1950, in the compressed stream. If you will be reading a DEFLATE or + GZIP stream, which does not have such a header, you will want to specify + false. + + + whether to expect an RFC1950 header byte pair when reading + the stream of data to be inflated. + The number of window bits to use. If you need to ask what that is, + then you shouldn't be calling this initializer. + Z_OK if everything goes well. + + + + Inflate the data in the InputBuffer, placing the result in the OutputBuffer. + + + You must have set InputBuffer and OutputBuffer, NextIn and NextOut, and AvailableBytesIn and + AvailableBytesOut before calling this method. + + + + private void InflateBuffer() + { + int bufferSize = 1024; + byte[] buffer = new byte[bufferSize]; + ZlibCodec decompressor = new ZlibCodec(); + + Console.WriteLine("\n============================================"); + Console.WriteLine("Size of Buffer to Inflate: {0} bytes.", CompressedBytes.Length); + MemoryStream ms = new MemoryStream(DecompressedBytes); + + int rc = decompressor.InitializeInflate(); + + decompressor.InputBuffer = CompressedBytes; + decompressor.NextIn = 0; + decompressor.AvailableBytesIn = CompressedBytes.Length; + + decompressor.OutputBuffer = buffer; + + // pass 1: inflate + do + { + decompressor.NextOut = 0; + decompressor.AvailableBytesOut = buffer.Length; + rc = decompressor.Inflate(FlushType.None); + + if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) + throw new Exception("inflating: " + decompressor.Message); + + ms.Write(decompressor.OutputBuffer, 0, buffer.Length - decompressor.AvailableBytesOut); + } + while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); + + // pass 2: finish and flush + do + { + decompressor.NextOut = 0; + decompressor.AvailableBytesOut = buffer.Length; + rc = decompressor.Inflate(FlushType.Finish); + + if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) + throw new Exception("inflating: " + decompressor.Message); + + if (buffer.Length - decompressor.AvailableBytesOut > 0) + ms.Write(buffer, 0, buffer.Length - decompressor.AvailableBytesOut); + } + while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); + + decompressor.EndInflate(); + } + + + + The flush to use when inflating. + Z_OK if everything goes well. + + + + Ends an inflation session. + + + Call this after successively calling Inflate(). This will cause all buffers to be flushed. + After calling this you cannot call Inflate() without a intervening call to one of the + InitializeInflate() overloads. + + Z_OK if everything goes well. + + + + I don't know what this does! + + Z_OK if everything goes well. + + + + Initialize the ZlibCodec for deflation operation. + + + The codec will use the MAX window bits and the default level of compression. + + + + int bufferSize = 40000; + byte[] CompressedBytes = new byte[bufferSize]; + byte[] DecompressedBytes = new byte[bufferSize]; + + ZlibCodec compressor = new ZlibCodec(); + + compressor.InitializeDeflate(CompressionLevel.Default); + + compressor.InputBuffer = System.Text.ASCIIEncoding.ASCII.GetBytes(TextToCompress); + compressor.NextIn = 0; + compressor.AvailableBytesIn = compressor.InputBuffer.Length; + + compressor.OutputBuffer = CompressedBytes; + compressor.NextOut = 0; + compressor.AvailableBytesOut = CompressedBytes.Length; + + while (compressor.TotalBytesIn != TextToCompress.Length && compressor.TotalBytesOut < bufferSize) + { + compressor.Deflate(FlushType.None); + } + + while (true) + { + int rc= compressor.Deflate(FlushType.Finish); + if (rc == ZlibConstants.Z_STREAM_END) break; + } + + compressor.EndDeflate(); + + + + Z_OK if all goes well. You generally don't need to check the return code. + + + + Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel. + + + The codec will use the maximum window bits (15) and the specified + CompressionLevel. It will emit a ZLIB stream as it compresses. + + The compression level for the codec. + Z_OK if all goes well. + + + + Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, + and the explicit flag governing whether to emit an RFC1950 header byte pair. + + + The codec will use the maximum window bits (15) and the specified CompressionLevel. + If you want to generate a zlib stream, you should specify true for + wantRfc1950Header. In this case, the library will emit a ZLIB + header, as defined in RFC + 1950, in the compressed stream. + + The compression level for the codec. + whether to emit an initial RFC1950 byte pair in the compressed stream. + Z_OK if all goes well. + + + + Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, + and the specified number of window bits. + + + The codec will use the specified number of window bits and the specified CompressionLevel. + + The compression level for the codec. + the number of window bits to use. If you don't know what this means, don't use this method. + Z_OK if all goes well. + + + + Initialize the ZlibCodec for deflation operation, using the specified + CompressionLevel, the specified number of window bits, and the explicit flag + governing whether to emit an RFC1950 header byte pair. + + + The compression level for the codec. + whether to emit an initial RFC1950 byte pair in the compressed stream. + the number of window bits to use. If you don't know what this means, don't use this method. + Z_OK if all goes well. + + + + Deflate one batch of data. + + + You must have set InputBuffer and OutputBuffer before calling this method. + + + + private void DeflateBuffer(CompressionLevel level) + { + int bufferSize = 1024; + byte[] buffer = new byte[bufferSize]; + ZlibCodec compressor = new ZlibCodec(); + + Console.WriteLine("\n============================================"); + Console.WriteLine("Size of Buffer to Deflate: {0} bytes.", UncompressedBytes.Length); + MemoryStream ms = new MemoryStream(); + + int rc = compressor.InitializeDeflate(level); + + compressor.InputBuffer = UncompressedBytes; + compressor.NextIn = 0; + compressor.AvailableBytesIn = UncompressedBytes.Length; + + compressor.OutputBuffer = buffer; + + // pass 1: deflate + do + { + compressor.NextOut = 0; + compressor.AvailableBytesOut = buffer.Length; + rc = compressor.Deflate(FlushType.None); + + if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) + throw new Exception("deflating: " + compressor.Message); + + ms.Write(compressor.OutputBuffer, 0, buffer.Length - compressor.AvailableBytesOut); + } + while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); + + // pass 2: finish and flush + do + { + compressor.NextOut = 0; + compressor.AvailableBytesOut = buffer.Length; + rc = compressor.Deflate(FlushType.Finish); + + if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) + throw new Exception("deflating: " + compressor.Message); + + if (buffer.Length - compressor.AvailableBytesOut > 0) + ms.Write(buffer, 0, buffer.Length - compressor.AvailableBytesOut); + } + while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); + + compressor.EndDeflate(); + + ms.Seek(0, SeekOrigin.Begin); + CompressedBytes = new byte[compressor.TotalBytesOut]; + ms.Read(CompressedBytes, 0, CompressedBytes.Length); + } + + + whether to flush all data as you deflate. Generally you will want to + use Z_NO_FLUSH here, in a series of calls to Deflate(), and then call EndDeflate() to + flush everything. + + Z_OK if all goes well. + + + + End a deflation session. + + + Call this after making a series of one or more calls to Deflate(). All buffers are flushed. + + Z_OK if all goes well. + + + + Reset a codec for another deflation session. + + + Call this to reset the deflation state. For example if a thread is deflating + non-consecutive blocks, you can call Reset() after the Deflate(Sync) of the first + block and before the next Deflate(None) of the second block. + + Z_OK if all goes well. + + + + Set the CompressionStrategy and CompressionLevel for a deflation session. + + the level of compression to use. + the strategy to use for compression. + Z_OK if all goes well. + + + + Set the dictionary to be used for either Inflation or Deflation. + + The dictionary bytes to use. + Z_OK if all goes well. + + + + A bunch of constants used in the Zlib interface. + + + + + The maximum number of window bits for the Deflate algorithm. + + + + + The default number of window bits for the Deflate algorithm. + + + + + indicates everything is A-OK + + + + + Indicates that the last operation reached the end of the stream. + + + + + The operation ended in need of a dictionary. + + + + + There was an error with the stream - not enough data, not open and readable, etc. + + + + + There was an error with the data - not enough data, bad data, etc. + + + + + There was an error with the working buffer. + + + + + The size of the working buffer used in the ZlibCodec class. + + + + + The minimum size of the working buffer used in the ZlibCodec class. + + + + + Represents a Zlib stream for compression or decompression. + + + + + The ZlibStream is a Decorator on a . It adds ZLIB compression or decompression to any + stream. + + + Using this stream, applications can compress or decompress data via + stream Read() and Write() operations. Either compresssion or + decompression can occur through either reading or writing. The compression + format used is ZLIB, which is documented in IETF RFC 1950, "ZLIB Compressed + Data Format Specification version 3.3". This implementation of ZLIB always uses + DEFLATE as the compression method. (see IETF RFC 1951, "DEFLATE + Compressed Data Format Specification version 1.3.") + + + The ZLIB format allows for varying compression methods, window sizes, and dictionaries. + This implementation always uses the DEFLATE compression method, a preset dictionary, + and 15 window bits by default. + + + + This class is similar to , except that it adds the + RFC1950 header and trailer bytes to a compressed stream when compressing, or expects + the RFC1950 header and trailer bytes when decompressing. It is also similar to the + . + + + + + + + + Create a ZlibStream using the specified CompressionMode. + + + + + When mode is CompressionMode.Compress, the ZlibStream + will use the default compression level. The "captive" stream will be + closed when the ZlibStream is closed. + + + + + + This example uses a ZlibStream to compress a file, and writes the + compressed data to another file. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(fileToCompress + ".zlib")) + { + using (Stream compressor = new ZlibStream(raw, CompressionMode.Compress)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(fileToCompress & ".zlib") + Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + + The stream which will be read or written. + Indicates whether the ZlibStream will compress or decompress. + + + + Create a ZlibStream using the specified CompressionMode and + the specified CompressionLevel. + + + + + + When mode is CompressionMode.Decompress, the level parameter is ignored. + The "captive" stream will be closed when the ZlibStream is closed. + + + + + + This example uses a ZlibStream to compress data from a file, and writes the + compressed data to another file. + + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(fileToCompress + ".zlib")) + { + using (Stream compressor = new ZlibStream(raw, + CompressionMode.Compress, + CompressionLevel.BestCompression)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(fileToCompress & ".zlib") + Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + + The stream to be read or written while deflating or inflating. + Indicates whether the ZlibStream will compress or decompress. + A tuning knob to trade speed for effectiveness. + + + + Create a ZlibStream using the specified CompressionMode, and + explicitly specify whether the captive stream should be left open after + Deflation or Inflation. + + + + + + When mode is CompressionMode.Compress, the ZlibStream will use + the default compression level. + + + + This constructor allows the application to request that the captive stream + remain open after the deflation or inflation occurs. By default, after + Close() is called on the stream, the captive stream is also + closed. In some cases this is not desired, for example if the stream is a + that will be re-read after + compression. Specify true for the parameter to leave the stream + open. + + + + See the other overloads of this constructor for example code. + + + + + The stream which will be read or written. This is called the + "captive" stream in other places in this documentation. + Indicates whether the ZlibStream will compress or decompress. + true if the application would like the stream to remain + open after inflation/deflation. + + + + Create a ZlibStream using the specified CompressionMode + and the specified CompressionLevel, and explicitly specify + whether the stream should be left open after Deflation or Inflation. + + + + + + This constructor allows the application to request that the captive + stream remain open after the deflation or inflation occurs. By + default, after Close() is called on the stream, the captive + stream is also closed. In some cases this is not desired, for example + if the stream is a that will be + re-read after compression. Specify true for the parameter to leave the stream open. + + + + When mode is CompressionMode.Decompress, the level parameter is + ignored. + + + + + + + This example shows how to use a ZlibStream to compress the data from a file, + and store the result into another file. The filestream remains open to allow + additional data to be written to it. + + + using (var output = System.IO.File.Create(fileToCompress + ".zlib")) + { + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (Stream compressor = new ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + // can write additional data to the output stream here + } + + + Using output As FileStream = File.Create(fileToCompress & ".zlib") + Using input As Stream = File.OpenRead(fileToCompress) + Using compressor As Stream = New ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + ' can write additional data to the output stream here. + End Using + + + + The stream which will be read or written. + + Indicates whether the ZlibStream will compress or decompress. + + + true if the application would like the stream to remain open after + inflation/deflation. + + + + A tuning knob to trade speed for effectiveness. This parameter is + effective only when mode is CompressionMode.Compress. + + + + + This property sets the flush behavior on the stream. + Sorry, though, not sure exactly how to describe all the various settings. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is + 1024 bytes. The minimum size is 128 bytes. You may get better performance + with a larger buffer. Then again, you might not. You would have to test + it. + + + + Set this before the first call to Read() or Write() on the + stream. If you try to set it afterwards, it will throw. + + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Dispose the stream. + + + + This may or may not result in a Close() call on the captive + stream. See the constructors that have a leaveOpen parameter + for more information. + + + This method may be invoked in two distinct scenarios. If disposing + == true, the method has been called directly or indirectly by a + user's code, for example via the public Dispose() method. In this + case, both managed and unmanaged resources can be referenced and + disposed. If disposing == false, the method has been called by the + runtime from inside the object finalizer and this method should not + reference other objects; in that case only unmanaged resources must + be referenced or disposed. + + + + indicates whether the Dispose method was invoked by user code. + + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Flush the stream. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the total bytes + written out, if used in writing, or the total bytes read in, if used in + reading. The count may refer to compressed bytes or uncompressed bytes, + depending on how you've used the stream. + + + + + Read data from the stream. + + + + + + If you wish to use the ZlibStream to compress data while reading, + you can create a ZlibStream with CompressionMode.Compress, + providing an uncompressed data stream. Then call Read() on that + ZlibStream, and the data read will be compressed. If you wish to + use the ZlibStream to decompress data while reading, you can create + a ZlibStream with CompressionMode.Decompress, providing a + readable compressed data stream. Then call Read() on that + ZlibStream, and the data will be decompressed as it is read. + + + + A ZlibStream can be used for Read() or Write(), but + not both. + + + + + + The buffer into which the read data should be placed. + + + the offset within that data array to put the first byte read. + + the number of bytes to read. + + the number of bytes read + + + + Calling this method always throws a . + + + The offset to seek to.... + IF THIS METHOD ACTUALLY DID ANYTHING. + + + The reference specifying how to apply the offset.... IF + THIS METHOD ACTUALLY DID ANYTHING. + + + nothing. This method always throws. + + + + Calling this method always throws a . + + + The new value for the stream length.... IF + THIS METHOD ACTUALLY DID ANYTHING. + + + + + Write data to the stream. + + + + + + If you wish to use the ZlibStream to compress data while writing, + you can create a ZlibStream with CompressionMode.Compress, + and a writable output stream. Then call Write() on that + ZlibStream, providing uncompressed data as input. The data sent to + the output stream will be the compressed form of the data written. If you + wish to use the ZlibStream to decompress data while writing, you + can create a ZlibStream with CompressionMode.Decompress, and a + writable output stream. Then call Write() on that stream, + providing previously compressed data. The data sent to the output stream + will be the decompressed form of the data written. + + + + A ZlibStream can be used for Read() or Write(), but not both. + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Compress a string into a byte array using ZLIB. + + + + Uncompress it with . + + + + + + + + A string to compress. The string will first be encoded + using UTF8, then compressed. + + + The string in compressed form + + + + Compress a byte array into a new byte array using ZLIB. + + + + Uncompress it with . + + + + + + + A buffer to compress. + + + The data in compressed form + + + + Uncompress a ZLIB-compressed byte array into a single string. + + + + + + + A buffer containing ZLIB-compressed data. + + + The uncompressed string + + + + Uncompress a ZLIB-compressed byte array into a byte array. + + + + + + + A buffer containing ZLIB-compressed data. + + + The data in uncompressed form + + + + This class exposes a set of COM-accessible wrappers for static + methods available on the ZipFile class. You don't need this + class unless you are using DotNetZip from a COM environment. + + + + + A wrapper for ZipFile.IsZipFile(string) + + The filename to of the zip file to check. + true if the file contains a valid zip file. + + + + A wrapper for ZipFile.IsZipFile(string, bool) + + + We cannot use "overloaded" Method names in COM interop. + So, here, we use a unique name. + + The filename to of the zip file to check. + true if the file contains a valid zip file. + + + + A wrapper for ZipFile.CheckZip(string) + + The filename to of the zip file to check. + + true if the named zip file checks OK. Otherwise, false. + + + + A COM-friendly wrapper for the static method . + + + The filename to of the zip file to check. + + The password to check. + + true if the named zip file checks OK. Otherwise, false. + + + + A wrapper for ZipFile.FixZipDirectory(string) + + The filename to of the zip file to fix. + + + + A wrapper for ZipFile.LibraryVersion + + + the version number on the DotNetZip assembly, formatted as a string. + + + + + An enum that provides the various encryption algorithms supported by this + library. + + + + + + PkzipWeak implies the use of Zip 2.0 encryption, which is known to be + weak and subvertible. + + + + A note on interoperability: Values of PkzipWeak and None are + specified in PKWARE's zip + specification, and are considered to be "standard". Zip archives + produced using these options will be interoperable with many other zip tools + and libraries, including Windows Explorer. + + + + Values of WinZipAes128 and WinZipAes256 are not part of the Zip + specification, but rather imply the use of a vendor-specific extension from + WinZip. If you want to produce interoperable Zip archives, do not use these + values. For example, if you produce a zip archive using WinZipAes256, you + will be able to open it in Windows Explorer on Windows XP and Vista, but you + will not be able to extract entries; trying this will lead to an "unspecified + error". For this reason, some people have said that a zip archive that uses + WinZip's AES encryption is not actually a zip archive at all. A zip archive + produced this way will be readable with the WinZip tool (Version 11 and + beyond). + + + + There are other third-party tools and libraries, both commercial and + otherwise, that support WinZip's AES encryption. These will be able to read + AES-encrypted zip archives produced by DotNetZip, and conversely applications + that use DotNetZip to read zip archives will be able to read AES-encrypted + archives produced by those tools or libraries. Consult the documentation for + those other tools and libraries to find out if WinZip's AES encryption is + supported. + + + + In case you care: According to the WinZip specification, the + actual AES key used is derived from the via an + algorithm that complies with RFC 2898, using an iteration + count of 1000. The algorithm is sometimes referred to as PBKDF2, which stands + for "Password Based Key Derivation Function #2". + + + + A word about password strength and length: The AES encryption technology is + very good, but any system is only as secure as the weakest link. If you want + to secure your data, be sure to use a password that is hard to guess. To make + it harder to guess (increase its "entropy"), you should make it longer. If + you use normal characters from an ASCII keyboard, a password of length 20 will + be strong enough that it will be impossible to guess. For more information on + that, I'd encourage you to read this + article. + + + + + + + No encryption at all. + + + + + Traditional or Classic pkzip encryption. + + + + + WinZip AES encryption (128 key bits). + + + + + WinZip AES encryption (256 key bits). + + + + + An encryption algorithm that is not supported by DotNetZip. + + + + + Delegate in which the application writes the ZipEntry content for the named entry. + + + The name of the entry that must be written. + The stream to which the entry data should be written. + + + When you add an entry and specify a WriteDelegate, via , the application + code provides the logic that writes the entry data directly into the zip file. + + + + + This example shows how to define a WriteDelegate that obtains a DataSet, and then + writes the XML for the DataSet into the zip archive. There's no need to + save the XML to a disk file first. + + + private void WriteEntry (String filename, Stream output) + { + DataSet ds1 = ObtainDataSet(); + ds1.WriteXml(output); + } + + private void Run() + { + using (var zip = new ZipFile()) + { + zip.AddEntry(zipEntryName, WriteEntry); + zip.Save(zipFileName); + } + } + + + + Private Sub WriteEntry (ByVal filename As String, ByVal output As Stream) + DataSet ds1 = ObtainDataSet() + ds1.WriteXml(stream) + End Sub + + Public Sub Run() + Using zip = New ZipFile + zip.AddEntry(zipEntryName, New WriteDelegate(AddressOf WriteEntry)) + zip.Save(zipFileName) + End Using + End Sub + + + + + + + Delegate in which the application opens the stream, just-in-time, for the named entry. + + + + The name of the ZipEntry that the application should open the stream for. + + + + When you add an entry via , the application code provides the logic that + opens and closes the stream for the given ZipEntry. + + + + + + + Delegate in which the application closes the stream, just-in-time, for the named entry. + + + + The name of the ZipEntry that the application should close the stream for. + + + The stream to be closed. + + + When you add an entry via , the application code provides the logic that + opens and closes the stream for the given ZipEntry. + + + + + + + Delegate for the callback by which the application tells the + library the CompressionLevel to use for a file. + + + + + Using this callback, the application can, for example, specify that + previously-compressed files (.mp3, .png, .docx, etc) should use a + CompressionLevel of None, or can set the compression level based + on any other factor. + + + + + + + In an EventArgs type, indicates which sort of progress event is being + reported. + + + There are events for reading, events for saving, and events for + extracting. This enumeration allows a single EventArgs type to be sued to + describe one of multiple subevents. For example, a SaveProgress event is + invoked before, after, and during the saving of a single entry. The value + of an enum with this type, specifies which event is being triggered. The + same applies to Extraction, Reading and Adding events. + + + + + Indicates that a Add() operation has started. + + + + + Indicates that an individual entry in the archive has been added. + + + + + Indicates that a Add() operation has completed. + + + + + Indicates that a Read() operation has started. + + + + + Indicates that an individual entry in the archive is about to be read. + + + + + Indicates that an individual entry in the archive has just been read. + + + + + Indicates that a Read() operation has completed. + + + + + The given event reports the number of bytes read so far + during a Read() operation. + + + + + Indicates that a Save() operation has started. + + + + + Indicates that an individual entry in the archive is about to be written. + + + + + Indicates that an individual entry in the archive has just been saved. + + + + + Indicates that a Save() operation has completed. + + + + + Indicates that the zip archive has been created in a + temporary location during a Save() operation. + + + + + Indicates that the temporary file is about to be renamed to the final archive + name during a Save() operation. + + + + + Indicates that the temporary file is has just been renamed to the final archive + name during a Save() operation. + + + + + Indicates that the self-extracting archive has been compiled + during a Save() operation. + + + + + The given event is reporting the number of source bytes that have run through the compressor so far + during a Save() operation. + + + + + Indicates that an entry is about to be extracted. + + + + + Indicates that an entry has just been extracted. + + + + + Indicates that extraction of an entry would overwrite an existing + filesystem file. You must use + + ExtractExistingFileAction.InvokeExtractProgressEvent in the call + to ZipEntry.Extract() in order to receive this event. + + + + + The given event is reporting the number of bytes written so far for + the current entry during an Extract() operation. + + + + + Indicates that an ExtractAll operation is about to begin. + + + + + Indicates that an ExtractAll operation has completed. + + + + + Indicates that an error has occurred while saving a zip file. + This generally means the file cannot be opened, because it has been + removed, or because it is locked by another process. It can also + mean that the file cannot be Read, because of a range lock conflict. + + + + + Provides information about the progress of a save, read, or extract operation. + This is a base class; you will probably use one of the classes derived from this one. + + + + + The total number of entries to be saved or extracted. + + + + + The name of the last entry saved or extracted. + + + + + In an event handler, set this to cancel the save or extract + operation that is in progress. + + + + + The type of event being reported. + + + + + Returns the archive name associated to this event. + + + + + The number of bytes read or written so far for this entry. + + + + + Total number of bytes that will be read or written for this entry. + This number will be -1 if the value cannot be determined. + + + + + Provides information about the progress of a Read operation. + + + + + Provides information about the progress of a Add operation. + + + + + Provides information about the progress of a save operation. + + + + + Constructor for the SaveProgressEventArgs. + + the name of the zip archive. + whether this is before saving the entry, or after + The total number of entries in the zip archive. + Number of entries that have been saved. + The entry involved in the event. + + + + Number of entries saved so far. + + + + + Provides information about the progress of the extract operation. + + + + + Constructor for the ExtractProgressEventArgs. + + the name of the zip archive. + whether this is before saving the entry, or after + The total number of entries in the zip archive. + Number of entries that have been extracted. + The entry involved in the event. + The location to which entries are extracted. + + + + Number of entries extracted so far. This is set only if the + EventType is Extracting_BeforeExtractEntry or Extracting_AfterExtractEntry, and + the Extract() is occurring witin the scope of a call to ExtractAll(). + + + + + Returns the extraction target location, a filesystem path. + + + + + Provides information about the an error that occurred while zipping. + + + + + Returns the exception that occurred, if any. + + + + + Returns the name of the file that caused the exception, if any. + + + + + Issued when an ZipEntry.ExtractWithPassword() method is invoked + with an incorrect password. + + + + + Default ctor. + + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + The innerException for this exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The serialization info for the exception. + The streaming context from which to deserialize. + + + + Indicates that a read was attempted on a stream, and bad or incomplete data was + received. + + + + + Default ctor. + + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + The innerException for this exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The serialization info for the exception. + The streaming context from which to deserialize. + + + + Issued when an CRC check fails upon extracting an entry from a zip archive. + + + + + Default ctor. + + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The serialization info for the exception. + The streaming context from which to deserialize. + + + + Issued when errors occur saving a self-extracting archive. + + + + + Default ctor. + + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The serialization info for the exception. + The streaming context from which to deserialize. + + + + Indicates that an operation was attempted on a ZipFile which was not possible + given the state of the instance. For example, if you call Save() on a ZipFile + which has no filename set, you can get this exception. + + + + + Default ctor. + + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + The innerException for this exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The serialization info for the exception. + The streaming context from which to deserialize. + + + + Base class for all exceptions defined by and throw by the Zip library. + + + + + Default ctor. + + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + The innerException for this exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The serialization info for the exception. + The streaming context from which to deserialize. + + + + An enum for the options when extracting an entry would overwrite an existing file. + + + + + This enum describes the actions that the library can take when an + Extract() or ExtractWithPassword() method is called to extract an + entry to a filesystem, and the extraction would overwrite an existing filesystem + file. + + + + + + + Throw an exception when extraction would overwrite an existing file. (For + COM clients, this is a 0 (zero).) + + + + + When extraction would overwrite an existing file, overwrite the file silently. + The overwrite will happen even if the target file is marked as read-only. + (For COM clients, this is a 1.) + + + + + When extraction would overwrite an existing file, don't overwrite the file, silently. + (For COM clients, this is a 2.) + + + + + When extraction would overwrite an existing file, invoke the ExtractProgress + event, using an event type of . In + this way, the application can decide, just-in-time, whether to overwrite the + file. For example, a GUI application may wish to pop up a dialog to allow + the user to choose. You may want to examine the property before making + the decision. If, after your processing in the Extract progress event, you + want to NOT extract the file, set + on the ZipProgressEventArgs.CurrentEntry to DoNotOverwrite. + If you do want to extract the file, set ZipEntry.ExtractExistingFile + to OverwriteSilently. If you want to cancel the Extraction, set + ZipProgressEventArgs.Cancel to true. Cancelling differs from using + DoNotOverwrite in that a cancel will not extract any further entries, if + there are any. (For COM clients, the value of this enum is a 3.) + + + + + Collects general purpose utility methods. + + + + private null constructor + + + + Utility routine for transforming path names from filesystem format (on Windows that means backslashes) to + a format suitable for use within zipfiles. This means trimming the volume letter and colon (if any) And + swapping backslashes for forward slashes. + + source path. + transformed path + + + + Sanitize paths in zip files. This means making sure that relative paths in a zip file don't go outside + the top directory. Entries like something/../../../../Temp/evil.txt get sanitized to Temp/evil.txt + when extracting + + A path with forward slashes as directory separator + sanitized path + + + + Finds a signature in the zip stream. This is useful for finding + the end of a zip entry, for example, or the beginning of the next ZipEntry. + + + + + Scans through 64k at a time. + + + + If the method fails to find the requested signature, the stream Position + after completion of this method is unchanged. If the method succeeds in + finding the requested signature, the stream position after completion is + direct AFTER the signature found in the stream. + + + + The stream to search + The 4-byte signature to find + The number of bytes read + + + + Create a pseudo-random filename, suitable for use as a temporary + file, and open it. + + + + This method produces a filename of the form + DotNetZip-xxxxxxxx.tmp, where xxxxxxxx is replaced by randomly + chosen characters, and creates that file. + + + + + + Workitem 7889: handle ERROR_LOCK_VIOLATION during read + + + This could be gracefully handled with an extension attribute, but + This assembly used to be built for .NET 2.0, so could not use + extension methods. + + + + + A decorator stream. It wraps another stream, and performs bookkeeping + to keep track of the stream Position. + + + + In some cases, it is not possible to get the Position of a stream, let's + say, on a write-only output stream like ASP.NET's + Response.OutputStream, or on a different write-only stream + provided as the destination for the zip by the application. In this + case, programmers can use this counting stream to count the bytes read + or written. + + + Consider the scenario of an application that saves a self-extracting + archive (SFX), that uses a custom SFX stub. + + + Saving to a filesystem file, the application would open the + filesystem file (getting a FileStream), save the custom sfx stub + into it, and then call ZipFile.Save(), specifying the same + FileStream. ZipFile.Save() does the right thing for the zipentry + offsets, by inquiring the Position of the FileStream before writing + any data, and then adding that initial offset into any ZipEntry + offsets in the zip directory. Everything works fine. + + + Now suppose the application is an ASPNET application and it saves + directly to Response.OutputStream. It's not possible for DotNetZip to + inquire the Position, so the offsets for the SFX will be wrong. + + + The workaround is for the application to use this class to wrap + HttpResponse.OutputStream, then write the SFX stub and the ZipFile + into that wrapper stream. Because ZipFile.Save() can inquire the + Position, it will then do the right thing with the offsets. + + + + + + The constructor. + + The underlying stream + + + + Gets the wrapped stream. + + + + + The count of bytes written out to the stream. + + + + + the count of bytes that have been read from the stream. + + + + + Adjust the byte count on the stream. + + + + the number of bytes to subtract from the count. + + + + + Subtract delta from the count of bytes written to the stream. + This is necessary when seeking back, and writing additional data, + as happens in some cases when saving Zip files. + + + + + + The read method. + + The buffer to hold the data read from the stream. + the offset within the buffer to copy the first byte read. + the number of bytes to read. + the number of bytes read, after decryption and decompression. + + + + Write data into the stream. + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Whether the stream can be read. + + + + + Whether it is possible to call Seek() on the stream. + + + + + Whether it is possible to call Write() on the stream. + + + + + Flushes the underlying stream. + + + + + The length of the underlying stream. + + + + + Returns the sum of number of bytes written, plus the initial + offset before writing. + + + + + The Position of the stream. + + + + + Seek in the stream. + + the offset point to seek to + the reference point from which to seek + The new position + + + + Set the length of the underlying stream. Be careful with this! + + + the length to set on the underlying stream. + + + + This is a helper class supporting WinZip AES encryption. + This class is intended for use only by the DotNetZip library. + + + + Most uses of the DotNetZip library will not involve direct calls into + the WinZipAesCrypto class. Instead, the WinZipAesCrypto class is + instantiated and used by the ZipEntry() class when WinZip AES + encryption or decryption on an entry is employed. + + + + + A stream that encrypts as it writes, or decrypts as it reads. The + Crypto is AES in CTR (counter) mode, which is compatible with the AES + encryption employed by WinZip 12.0. + + + + The AES/CTR encryption protocol used by WinZip works like this: + + - start with a counter, initialized to zero. + + - to encrypt, take the data by 16-byte blocks. For each block: + - apply the transform to the counter + - increement the counter + - XOR the result of the transform with the plaintext to + get the ciphertext. + - compute the mac on the encrypted bytes + - when finished with all blocks, store the computed MAC. + + - to decrypt, take the data by 16-byte blocks. For each block: + - compute the mac on the encrypted bytes, + - apply the transform to the counter + - increement the counter + - XOR the result of the transform with the ciphertext to + get the plaintext. + - when finished with all blocks, compare the computed MAC against + the stored MAC + + + + + + + The constructor. + + The underlying stream + To either encrypt or decrypt. + The pre-initialized WinZipAesCrypto object. + The maximum number of bytes to read from the stream. + + + + Returns the final HMAC-SHA1-80 for the data that was encrypted. + + + + + Close the stream. + + + + + Returns true if the stream can be read. + + + + + Always returns false. + + + + + Returns true if the CryptoMode is Encrypt. + + + + + Flush the content in the stream. + + + + + Getting this property throws a NotImplementedException. + + + + + Getting or Setting this property throws a NotImplementedException. + + + + + This method throws a NotImplementedException. + + + + + This method throws a NotImplementedException. + + + + + This class implements the "traditional" or "classic" PKZip encryption, + which today is considered to be weak. On the other hand it is + ubiquitous. This class is intended for use only by the DotNetZip + library. + + + + Most uses of the DotNetZip library will not involve direct calls into + the ZipCrypto class. Instead, the ZipCrypto class is instantiated and + used by the ZipEntry() class when encryption or decryption on an entry + is employed. If for some reason you really wanted to use a weak + encryption algorithm in some other application, you might use this + library. But you would be much better off using one of the built-in + strong encryption libraries in the .NET Framework, like the AES + algorithm or SHA. + + + + + The default constructor for ZipCrypto. + + + + This class is intended for internal use by the library only. It's + probably not useful to you. Seriously. Stop reading this + documentation. It's a waste of your time. Go do something else. + Check the football scores. Go get an ice cream with a friend. + Seriously. + + + + + + From AppNote.txt: + unsigned char decrypt_byte() + local unsigned short temp + temp :=- Key(2) | 2 + decrypt_byte := (temp * (temp ^ 1)) bitshift-right 8 + end decrypt_byte + + + + + Call this method on a cipher text to render the plaintext. You must + first initialize the cipher with a call to InitCipher. + + + + + var cipher = new ZipCrypto(); + cipher.InitCipher(Password); + // Decrypt the header. This has a side effect of "further initializing the + // encryption keys" in the traditional zip encryption. + byte[] DecryptedMessage = cipher.DecryptMessage(EncryptedMessage); + + + + The encrypted buffer. + + The number of bytes to encrypt. + Should be less than or equal to CipherText.Length. + + + The plaintext. + + + + This is the converse of DecryptMessage. It encrypts the plaintext + and produces a ciphertext. + + + The plain text buffer. + + + The number of bytes to encrypt. + Should be less than or equal to plainText.Length. + + + The ciphertext. + + + + This initializes the cipher with the given password. + See AppNote.txt for details. + + + + The passphrase for encrypting or decrypting with this cipher. + + + + + Step 1 - Initializing the encryption keys + ----------------------------------------- + Start with these keys: + Key(0) := 305419896 (0x12345678) + Key(1) := 591751049 (0x23456789) + Key(2) := 878082192 (0x34567890) + + Then, initialize the keys with a password: + + loop for i from 0 to length(password)-1 + update_keys(password(i)) + end loop + + Where update_keys() is defined as: + + update_keys(char): + Key(0) := crc32(key(0),char) + Key(1) := Key(1) + (Key(0) bitwiseAND 000000ffH) + Key(1) := Key(1) * 134775813 + 1 + Key(2) := crc32(key(2),key(1) rightshift 24) + end update_keys + + Where crc32(old_crc,char) is a routine that given a CRC value and a + character, returns an updated CRC value after applying the CRC-32 + algorithm described elsewhere in this document. + + + + + After the keys are initialized, then you can use the cipher to + encrypt the plaintext. + + + + Essentially we encrypt the password with the keys, then discard the + ciphertext for the password. This initializes the keys for later use. + + + + + + + A Stream for reading and concurrently decrypting data from a zip file, + or for writing and concurrently encrypting data to a zip file. + + + + The constructor. + The underlying stream + To either encrypt or decrypt. + The pre-initialized ZipCrypto object. + + + + Represents a single entry in a ZipFile. Typically, applications get a ZipEntry + by enumerating the entries within a ZipFile, or by adding an entry to a ZipFile. + + + + + True if the referenced entry is a directory. + + + + + Provides a human-readable string with information about the ZipEntry. + + + + + Reads one entry from the zip directory structure in the zip file. + + + + The zipfile for which a directory entry will be read. From this param, the + method gets the ReadStream and the expected text encoding + (ProvisionalAlternateEncoding) which is used if the entry is not marked + UTF-8. + + + + a list of previously seen entry names; used to prevent duplicates. + + + the entry read from the archive. + + + + Returns true if the passed-in value is a valid signature for a ZipDirEntry. + + the candidate 4-byte signature value. + true, if the signature is valid according to the PKWare spec. + + + + Default constructor. + + + Applications should never need to call this directly. It is exposed to + support COM Automation environments. + + + + + The time and date at which the file indicated by the ZipEntry was + last modified. + + + + + The DotNetZip library sets the LastModified value for an entry, equal to + the Last Modified time of the file in the filesystem. If an entry is + added from a stream, the library uses System.DateTime.Now for this + value, for the given entry. + + + + This property allows the application to retrieve and possibly set the + LastModified value on an entry, to an arbitrary value. values with a + setting of DateTimeKind.Unspecified are taken to be expressed as + DateTimeKind.Local. + + + + Be aware that because of the way PKWare's + Zip specification describes how times are stored in the zip file, + the full precision of the System.DateTime datatype is not stored + for the last modified time when saving zip files. For more information on + how times are formatted, see the PKZip specification. + + + + The actual last modified time of a file can be stored in multiple ways in + the zip file, and they are not mutually exclusive: + + + + + In the so-called "DOS" format, which has a 2-second precision. Values + are rounded to the nearest even second. For example, if the time on the + file is 12:34:43, then it will be stored as 12:34:44. This first value + is accessible via the LastModified property. This value is always + present in the metadata for each zip entry. In some cases the value is + invalid, or zero. + + + + In the so-called "Windows" or "NTFS" format, as an 8-byte integer + quantity expressed as the number of 1/10 milliseconds (in other words + the number of 100 nanosecond units) since January 1, 1601 (UTC). This + format is how Windows represents file times. This time is accessible + via the ModifiedTime property. + + + + In the "Unix" format, a 4-byte quantity specifying the number of seconds since + January 1, 1970 UTC. + + + + In an older format, now deprecated but still used by some current + tools. This format is also a 4-byte quantity specifying the number of + seconds since January 1, 1970 UTC. + + + + + + Zip tools and libraries will always at least handle (read or write) the + DOS time, and may also handle the other time formats. Keep in mind that + while the names refer to particular operating systems, there is nothing in + the time formats themselves that prevents their use on other operating + systems. + + + + When reading ZIP files, the DotNetZip library reads the Windows-formatted + time, if it is stored in the entry, and sets both LastModified and + ModifiedTime to that value. When writing ZIP files, the DotNetZip + library by default will write both time quantities. It can also emit the + Unix-formatted time if desired (See .) + + + + The last modified time of the file created upon a call to + ZipEntry.Extract() may be adjusted during extraction to compensate + for differences in how the .NET Base Class Library deals with daylight + saving time (DST) versus how the Windows filesystem deals with daylight + saving time. Raymond Chen provides + some good context. + + + + In a nutshell: Daylight savings time rules change regularly. In 2007, for + example, the inception week of DST changed. In 1977, DST was in place all + year round. In 1945, likewise. And so on. Win32 does not attempt to + guess which time zone rules were in effect at the time in question. It + will render a time as "standard time" and allow the app to change to DST + as necessary. .NET makes a different choice. + + + + Compare the output of FileInfo.LastWriteTime.ToString("f") with what you + see in the Windows Explorer property sheet for a file that was last + written to on the other side of the DST transition. For example, suppose + the file was last modified on October 17, 2003, during DST but DST is not + currently in effect. Explorer's file properties reports Thursday, October + 17, 2003, 8:45:38 AM, but .NETs FileInfo reports Thursday, October 17, + 2003, 9:45 AM. + + + + Win32 says, "Thursday, October 17, 2002 8:45:38 AM PST". Note: Pacific + STANDARD Time. Even though October 17 of that year occurred during Pacific + Daylight Time, Win32 displays the time as standard time because that's + what time it is NOW. + + + + .NET BCL assumes that the current DST rules were in place at the time in + question. So, .NET says, "Well, if the rules in effect now were also in + effect on October 17, 2003, then that would be daylight time" so it + displays "Thursday, October 17, 2003, 9:45 AM PDT" - daylight time. + + + + So .NET gives a value which is more intuitively correct, but is also + potentially incorrect, and which is not invertible. Win32 gives a value + which is intuitively incorrect, but is strictly correct. + + + + Because of this funkiness, this library adds one hour to the LastModified + time on the extracted file, if necessary. That is to say, if the time in + question had occurred in what the .NET Base Class Library assumed to be + DST. This assumption may be wrong given the constantly changing DST rules, + but it is the best we can do. + + + + + + + + Ability to set Last Modified DOS time to zero + (for using with EmitTimesInWindowsFormatWhenSaving+EmitTimesInUnixFormatWhenSaving setted to false) + some flasher hardware use as marker of first binary + + + + + Last Modified time for the file represented by the entry. + + + + + + This value corresponds to the "last modified" time in the NTFS file times + as described in the Zip + specification. When getting this property, the value may be + different from . When setting the property, + the property also gets set, but with a lower + precision. + + + + Let me explain. It's going to take a while, so get + comfortable. Originally, waaaaay back in 1989 when the ZIP specification + was originally described by the esteemed Mr. Phil Katz, the dominant + operating system of the time was MS-DOS. MSDOS stored file times with a + 2-second precision, because, c'mon, who is ever going to need better + resolution than THAT? And so ZIP files, regardless of the platform on + which the zip file was created, store file times in exactly the same format that DOS used + in 1989. + + + + Since then, the ZIP spec has evolved, but the internal format for file + timestamps remains the same. Despite the fact that the way times are + stored in a zip file is rooted in DOS heritage, any program on any + operating system can format a time in this way, and most zip tools and + libraries DO - they round file times to the nearest even second and store + it just like DOS did 25+ years ago. + + + + PKWare extended the ZIP specification to allow a zip file to store what + are called "NTFS Times" and "Unix(tm) times" for a file. These are the + last write, last access, and file creation + times of a particular file. These metadata are not actually specific + to NTFS or Unix. They are tracked for each file by NTFS and by various + Unix filesystems, but they are also tracked by other filesystems, too. + The key point is that the times are formatted in the zip file + in the same way that NTFS formats the time (ticks since win32 epoch), + or in the same way that Unix formats the time (seconds since Unix + epoch). As with the DOS time, any tool or library running on any + operating system is capable of formatting a time in one of these ways + and embedding it into the zip file. + + + + These extended times are higher precision quantities than the DOS time. + As described above, the (DOS) LastModified has a precision of 2 seconds. + The Unix time is stored with a precision of 1 second. The NTFS time is + stored with a precision of 0.0000001 seconds. The quantities are easily + convertible, except for the loss of precision you may incur. + + + + A zip archive can store the {C,A,M} times in NTFS format, in Unix format, + or not at all. Often a tool running on Unix or Mac will embed the times + in Unix format (1 second precision), while WinZip running on Windows might + embed the times in NTFS format (precision of of 0.0000001 seconds). When + reading a zip file with these "extended" times, in either format, + DotNetZip represents the values with the + ModifiedTime, AccessedTime and CreationTime + properties on the ZipEntry. + + + + While any zip application or library, regardless of the platform it + runs on, could use any of the time formats allowed by the ZIP + specification, not all zip tools or libraries do support all these + formats. Storing the higher-precision times for each entry is + optional for zip files, and many tools and libraries don't use the + higher precision quantities at all. The old DOS time, represented by + , is guaranteed to be present, though it + sometimes unset. + + + + Ok, getting back to the question about how the LastModified + property relates to this ModifiedTime + property... LastModified is always set, while + ModifiedTime is not. (The other times stored in the NTFS + times extension, CreationTime and AccessedTime also + may not be set on an entry that is read from an existing zip file.) + When reading a zip file, then LastModified takes the DOS time + that is stored with the file. If the DOS time has been stored as zero + in the zipfile, then this library will use DateTime.Now for the + LastModified value. If the ZIP file was created by an evolved + tool, then there will also be higher precision NTFS or Unix times in + the zip file. In that case, this library will read those times, and + set LastModified and ModifiedTime to the same value, the + one corresponding to the last write time of the file. If there are no + higher precision times stored for the entry, then ModifiedTime + remains unset (likewise AccessedTime and CreationTime), + and LastModified keeps its DOS time. + + + + When creating zip files with this library, by default the extended time + properties (ModifiedTime, AccessedTime, and + CreationTime) are set on the ZipEntry instance, and these data are + stored in the zip archive for each entry, in NTFS format. If you add an + entry from an actual filesystem file, then the entry gets the actual file + times for that file, to NTFS-level precision. If you add an entry from a + stream, or a string, then the times get the value DateTime.Now. In + this case LastModified and ModifiedTime will be identical, + to 2 seconds of precision. You can explicitly set the + CreationTime, AccessedTime, and ModifiedTime of an + entry using the property setters. If you want to set all of those + quantities, it's more efficient to use the method. Those + changes are not made permanent in the zip file until you call or one of its cousins. + + + + When creating a zip file, you can override the default behavior of + this library for formatting times in the zip file, disabling the + embedding of file times in NTFS format or enabling the storage of file + times in Unix format, or both. You may want to do this, for example, + when creating a zip file on Windows, that will be consumed on a Mac, + by an application that is not hip to the "NTFS times" format. To do + this, use the and + properties. A valid zip + file may store the file times in both formats. But, there are no + guarantees that a program running on Mac or Linux will gracefully + handle the NTFS-formatted times when Unix times are present, or that a + non-DotNetZip-powered application running on Windows will be able to + handle file times in Unix format. DotNetZip will always do something + reasonable; other libraries or tools may not. When in doubt, test. + + + + I'll bet you didn't think one person could type so much about time, eh? + And reading it was so enjoyable, too! Well, in appreciation, maybe you + should donate? + + + + + + + + + + + Last Access time for the file represented by the entry. + + + This value may or may not be meaningful. If the ZipEntry was read from an existing + Zip archive, this information may not be available. For an explanation of why, see + . + + + + + + + + The file creation time for the file represented by the entry. + + + + This value may or may not be meaningful. If the ZipEntry was read + from an existing zip archive, and the creation time was not set on the entry + when the zip file was created, then this property may be meaningless. For an + explanation of why, see . + + + + + + + + Sets the NTFS Creation, Access, and Modified times for the given entry. + + + + + When adding an entry from a file or directory, the Creation, Access, and + Modified times for the given entry are automatically set from the + filesystem values. When adding an entry from a stream or string, the + values are implicitly set to DateTime.Now. The application may wish to + set these values to some arbitrary value, before saving the archive, and + can do so using the various setters. If you want to set all of the times, + this method is more efficient. + + + + The values you set here will be retrievable with the , and properties. + + + + When this method is called, if both and are false, then the + EmitTimesInWindowsFormatWhenSaving flag is automatically set. + + + + DateTime values provided here without a DateTimeKind are assumed to be Local Time. + + + + the creation time of the entry. + the last access time of the entry. + the last modified time of the entry. + + + + + + + + + + Specifies whether the Creation, Access, and Modified times for the given + entry will be emitted in "Windows format" when the zip archive is saved. + + + + + An application creating a zip archive can use this flag to explicitly + specify that the file times for the entry should or should not be stored + in the zip archive in the format used by Windows. The default value of + this property is true. + + + + When adding an entry from a file or directory, the Creation (), Access (), and Modified + () times for the given entry are automatically + set from the filesystem values. When adding an entry from a stream or + string, all three values are implicitly set to DateTime.Now. Applications + can also explicitly set those times by calling . + + + + PKWARE's + zip specification describes multiple ways to format these times in a + zip file. One is the format Windows applications normally use: 100ns ticks + since Jan 1, 1601 UTC. The other is a format Unix applications typically + use: seconds since January 1, 1970 UTC. Each format can be stored in an + "extra field" in the zip entry when saving the zip archive. The former + uses an extra field with a Header Id of 0x000A, while the latter uses a + header ID of 0x5455. + + + + Not all zip tools and libraries can interpret these fields. Windows + compressed folders is one that can read the Windows Format timestamps, + while I believe the Infozip + tools can read the Unix format timestamps. Although the time values are + easily convertible, subject to a loss of precision, some tools and + libraries may be able to read only one or the other. DotNetZip can read or + write times in either or both formats. + + + + The times stored are taken from , , and . + + + + This property is not mutually exclusive from the property. It is + possible that a zip entry can embed the timestamps in both forms, one + form, or neither. But, there are no guarantees that a program running on + Mac or Linux will gracefully handle NTFS Formatted times, or that a + non-DotNetZip-powered application running on Windows will be able to + handle file times in Unix format. When in doubt, test. + + + + Normally you will use the ZipFile.EmitTimesInWindowsFormatWhenSaving + property, to specify the behavior for all entries in a zip, rather than + the property on each individual entry. + + + + + + + + + + + + + Specifies whether the Creation, Access, and Modified times for the given + entry will be emitted in "Unix(tm) format" when the zip archive is saved. + + + + + An application creating a zip archive can use this flag to explicitly + specify that the file times for the entry should or should not be stored + in the zip archive in the format used by Unix. By default this flag is + false, meaning the Unix-format times are not stored in the zip + archive. + + + + When adding an entry from a file or directory, the Creation (), Access (), and Modified + () times for the given entry are automatically + set from the filesystem values. When adding an entry from a stream or + string, all three values are implicitly set to DateTime.Now. Applications + can also explicitly set those times by calling . + + + + PKWARE's + zip specification describes multiple ways to format these times in a + zip file. One is the format Windows applications normally use: 100ns ticks + since Jan 1, 1601 UTC. The other is a format Unix applications typically + use: seconds since Jan 1, 1970 UTC. Each format can be stored in an + "extra field" in the zip entry when saving the zip archive. The former + uses an extra field with a Header Id of 0x000A, while the latter uses a + header ID of 0x5455. + + + + Not all tools and libraries can interpret these fields. Windows + compressed folders is one that can read the Windows Format timestamps, + while I believe the Infozip + tools can read the Unix format timestamps. Although the time values are + easily convertible, subject to a loss of precision, some tools and + libraries may be able to read only one or the other. DotNetZip can read or + write times in either or both formats. + + + + The times stored are taken from , , and . + + + + This property is not mutually exclusive from the property. It is + possible that a zip entry can embed the timestamps in both forms, one + form, or neither. But, there are no guarantees that a program running on + Mac or Linux will gracefully handle NTFS Formatted times, or that a + non-DotNetZip-powered application running on Windows will be able to + handle file times in Unix format. When in doubt, test. + + + + Normally you will use the ZipFile.EmitTimesInUnixFormatWhenSaving + property, to specify the behavior for all entries, rather than the + property on each individual entry. + + + + + + + + + + + + + The type of timestamp attached to the ZipEntry. + + + + This property is valid only for a ZipEntry that was read from a zip archive. + It indicates the type of timestamp attached to the entry. + + + + + + + + The file attributes for the entry. + + + + + + The attributes in NTFS include + ReadOnly, Archive, Hidden, System, and Indexed. When adding a + ZipEntry to a ZipFile, these attributes are set implicitly when + adding an entry from the filesystem. When adding an entry from a stream + or string, the Attributes are not set implicitly. Regardless of the way + an entry was added to a ZipFile, you can set the attributes + explicitly if you like. + + + + When reading a ZipEntry from a ZipFile, the attributes are + set according to the data stored in the ZipFile. If you extract the + entry from the archive to a filesystem file, DotNetZip will set the + attributes on the resulting file accordingly. + + + + The attributes can be set explicitly by the application. For example the + application may wish to set the FileAttributes.ReadOnly bit for all + entries added to an archive, so that on unpack, this attribute will be set + on the extracted file. Any changes you make to this property are made + permanent only when you call a Save() method on the ZipFile + instance that contains the ZipEntry. + + + + For example, an application may wish to zip up a directory and set the + ReadOnly bit on every file in the archive, so that upon later extraction, + the resulting files will be marked as ReadOnly. Not every extraction tool + respects these attributes, but if you unpack with DotNetZip, as for + example in a self-extracting archive, then the attributes will be set as + they are stored in the ZipFile. + + + + These attributes may not be interesting or useful if the resulting archive + is extracted on a non-Windows platform. How these attributes get used + upon extraction depends on the platform and tool used. + + + + + + + The name of the filesystem file, referred to by the ZipEntry. + + + + + This property specifies the thing-to-be-zipped on disk, and is set only + when the ZipEntry is being created from a filesystem file. If the + ZipFile is instantiated by reading an existing .zip archive, then + the LocalFileName will be null (Nothing in VB). + + + + When it is set, the value of this property may be different than , which is the path used in the archive itself. If you + call Zip.AddFile("foop.txt", AlternativeDirectory), then the path + used for the ZipEntry within the zip archive will be different + than this path. + + + + If the entry is being added from a stream, then this is null (Nothing in VB). + + + + + + + + The name of the file contained in the ZipEntry. + + + + + + This is the name of the entry in the ZipFile itself. When creating + a zip archive, if the ZipEntry has been created from a filesystem + file, via a call to or , or a related overload, the value + of this property is derived from the name of that file. The + FileName property does not include drive letters, and may include a + different directory path, depending on the value of the + directoryPathInArchive parameter used when adding the entry into + the ZipFile. + + + + In some cases there is no related filesystem file - for example when a + ZipEntry is created using or one of the similar overloads. In this case, the value of + this property is derived from the fileName and the directory path passed + to that method. + + + + When reading a zip file, this property takes the value of the entry name + as stored in the zip file. If you extract such an entry, the extracted + file will take the name given by this property. + + + + Applications can set this property when creating new zip archives or when + reading existing archives. When setting this property, the actual value + that is set will replace backslashes with forward slashes, in accordance + with the Zip + specification, for compatibility with Unix(tm) and ... get + this.... Amiga! + + + + If an application reads a ZipFile via or a related overload, and then explicitly + sets the FileName on an entry contained within the ZipFile, and + then calls , the application will effectively + rename the entry within the zip archive. + + + + If an application sets the value of FileName, then calls + Extract() on the entry, the entry is extracted to a file using the + newly set value as the filename. The FileName value is made + permanent in the zip archive only after a call to one of the + ZipFile.Save() methods on the ZipFile that contains the + ZipEntry. + + + + If an application attempts to set the FileName to a value that + would result in a duplicate entry in the ZipFile, an exception is + thrown. + + + + When a ZipEntry is contained within a ZipFile, applications + cannot rename the entry within the context of a foreach (For + Each in VB) loop, because of the way the ZipFile stores + entries. If you need to enumerate through all the entries and rename one + or more of them, use ZipFile.EntriesSorted as the + collection. See also, ZipFile.GetEnumerator(). + + + + + + + The stream that provides content for the ZipEntry. + + + + + + The application can use this property to set the input stream for an + entry on a just-in-time basis. Imagine a scenario where the application + creates a ZipFile comprised of content obtained from hundreds of + files, via calls to AddFile(). The DotNetZip library opens streams + on these files on a just-in-time basis, only when writing the entry out to + an external store within the scope of a ZipFile.Save() call. Only + one input stream is opened at a time, as each entry is being written out. + + + + Now imagine a different application that creates a ZipFile + with content obtained from hundreds of streams, added through . Normally the + application would supply an open stream to that call. But when large + numbers of streams are being added, this can mean many open streams at one + time, unnecessarily. + + + + To avoid this, call and specify delegates that open and close the stream at + the time of Save. + + + + + Setting the value of this property when the entry was not added from a + stream (for example, when the ZipEntry was added with or , or when the entry was added by + reading an existing zip archive) will throw an exception. + + + + + + + + A flag indicating whether the InputStream was provided Just-in-time. + + + + + + When creating a zip archive, an application can obtain content for one or + more of the ZipEntry instances from streams, using the method. At the time + of calling that method, the application can supply null as the value of + the stream parameter. By doing so, the application indicates to the + library that it will provide a stream for the entry on a just-in-time + basis, at the time one of the ZipFile.Save() methods is called and + the data for the various entries are being compressed and written out. + + + + In this case, the application can set the + property, typically within the SaveProgress event (event type: ) for that entry. + + + + The application will later want to call Close() and Dispose() on that + stream. In the SaveProgress event, when the event type is , the application can + do so. This flag indicates that the stream has been provided by the + application on a just-in-time basis and that it is the application's + responsibility to call Close/Dispose on that stream. + + + + + + + + An enum indicating the source of the ZipEntry. + + + + + The version of the zip engine needed to read the ZipEntry. + + + + + This is a readonly property, indicating the version of
the Zip + specification that the extracting tool or library must support to + extract the given entry. Generally higher versions indicate newer + features. Older zip engines obviously won't know about new features, and + won't be able to extract entries that depend on those newer features. + + + + + value + Features + + + + 20 + a basic Zip Entry, potentially using PKZIP encryption. + + + + + 45 + The ZIP64 extension is used on the entry. + + + + + 46 + File is compressed using BZIP2 compression* + + + + 50 + File is encrypted using PkWare's DES, 3DES, (broken) RC2 or RC4 + + + + 51 + File is encrypted using PKWare's AES encryption or corrected RC2 encryption. + + + + 52 + File is encrypted using corrected RC2-64 encryption** + + + + 61 + File is encrypted using non-OAEP key wrapping*** + + + + 63 + File is compressed using LZMA, PPMd+, Blowfish, or Twofish + + + + + + There are other values possible, not listed here. DotNetZip supports + regular PKZip encryption, and ZIP64 extensions. DotNetZip cannot extract + entries that require a zip engine higher than 45. + + + + This value is set upon reading an existing zip file, or after saving a zip + archive. + + + + + + The comment attached to the ZipEntry. + + + + + Each entry in a zip file can optionally have a comment associated to + it. The comment might be displayed by a zip tool during extraction, for + example. + + + + By default, the Comment is encoded in IBM437 code page. You can + specify an alternative with and + . + + + + + + + + Indicates whether the entry requires ZIP64 extensions. + + + + + + This property is null (Nothing in VB) until a Save() method on the + containing instance has been called. The property is + non-null (HasValue is true) only after a Save() method has + been called. + + + + After the containing ZipFile has been saved, the Value of this + property is true if any of the following three conditions holds: the + uncompressed size of the entry is larger than 0xFFFFFFFF; the compressed + size of the entry is larger than 0xFFFFFFFF; the relative offset of the + entry within the zip archive is larger than 0xFFFFFFFF. These quantities + are not known until a Save() is attempted on the zip archive and + the compression is applied. + + + + If none of the three conditions holds, then the Value is false. + + + + A Value of false does not indicate that the entry, as saved in the + zip archive, does not use ZIP64. It merely indicates that ZIP64 is + not required. An entry may use ZIP64 even when not required if + the property on the containing + ZipFile instance is set to , or if + the property on the containing + ZipFile instance is set to + and the output stream was not seekable. + + + + + + + + Indicates whether the entry actually used ZIP64 extensions, as it was most + recently written to the output file or stream. + + + + + + This Nullable property is null (Nothing in VB) until a Save() + method on the containing instance has been + called. HasValue is true only after a Save() method has been + called. + + + + The value of this property for a particular ZipEntry may change + over successive calls to Save() methods on the containing ZipFile, + even if the file that corresponds to the ZipEntry does not. This + may happen if other entries contained in the ZipFile expand, + causing the offset for this particular entry to exceed 0xFFFFFFFF. + + + + + + + The bitfield for the entry as defined in the zip spec. You probably + never need to look at this. + + + + + You probably do not need to concern yourself with the contents of this + property, but in case you do: + + + + + bit + meaning + + + + 0 + set if encryption is used. + + + + 1-2 + + set to determine whether normal, max, fast deflation. DotNetZip library + always leaves these bits unset when writing (indicating "normal" + deflation"), but can read an entry with any value here. + + + + + 3 + + Indicates that the Crc32, Compressed and Uncompressed sizes are zero in the + local header. This bit gets set on an entry during writing a zip file, when + it is saved to a non-seekable output stream. + + + + + + 4 + reserved for "enhanced deflating". This library doesn't do enhanced deflating. + + + + 5 + set to indicate the zip is compressed patched data. This library doesn't do that. + + + + 6 + + set if PKWare's strong encryption is used (must also set bit 1 if bit 6 is + set). This bit is not set if WinZip's AES encryption is set. + + + + 7 + not used + + + + 8 + not used + + + + 9 + not used + + + + 10 + not used + + + + 11 + + Language encoding flag (EFS). If this bit is set, the filename and comment + fields for this file must be encoded using UTF-8. This library currently + does not support UTF-8. + + + + + 12 + Reserved by PKWARE for enhanced compression. + + + + 13 + + Used when encrypting the Central Directory to indicate selected data + values in the Local Header are masked to hide their actual values. See + the section in the Zip + specification describing the Strong Encryption Specification for + details. + + + + + 14 + Reserved by PKWARE. + + + + 15 + Reserved by PKWARE. + + + + + + + + + The compression method employed for this ZipEntry. + + + + + + The + Zip specification allows a variety of compression methods. This + library supports just two: 0x08 = Deflate. 0x00 = Store (no compression), + for reading or writing. + + + + When reading an entry from an existing zipfile, the value you retrieve + here indicates the compression method used on the entry by the original + creator of the zip. When writing a zipfile, you can specify either 0x08 + (Deflate) or 0x00 (None). If you try setting something else, you will get + an exception. + + + + You may wish to set CompressionMethod to CompressionMethod.None (0) + when zipping already-compressed data like a jpg, png, or mp3 file. + This can save time and cpu cycles. + + + + When setting this property on a ZipEntry that is read from an + existing zip file, calling ZipFile.Save() will cause the new + CompressionMethod to be used on the entry in the newly saved zip file. + + + + Setting this property may have the side effect of modifying the + CompressionLevel property. If you set the CompressionMethod to a + value other than None, and CompressionLevel is previously + set to None, then CompressionLevel will be set to + Default. + + + + + + + In this example, the first entry added to the zip archive uses the default + behavior - compression is used where it makes sense. The second entry, + the MP3 file, is added to the archive without being compressed. + + using (ZipFile zip = new ZipFile(ZipFileToCreate)) + { + ZipEntry e1= zip.AddFile(@"notes\Readme.txt"); + ZipEntry e2= zip.AddFile(@"music\StopThisTrain.mp3"); + e2.CompressionMethod = CompressionMethod.None; + zip.Save(); + } + + + + Using zip As New ZipFile(ZipFileToCreate) + zip.AddFile("notes\Readme.txt") + Dim e2 as ZipEntry = zip.AddFile("music\StopThisTrain.mp3") + e2.CompressionMethod = CompressionMethod.None + zip.Save + End Using + + + + + + Sets the compression level to be used for the entry when saving the zip + archive. This applies only for CompressionMethod = DEFLATE. + + + + + When using the DEFLATE compression method, Varying the compression + level used on entries can affect the size-vs-speed tradeoff when + compression and decompressing data streams or files. + + + + If you do not set this property, the default compression level is used, + which normally gives a good balance of compression efficiency and + compression speed. In some tests, using BestCompression can + double the time it takes to compress, while delivering just a small + increase in compression efficiency. This behavior will vary with the + type of data you compress. If you are in doubt, just leave this setting + alone, and accept the default. + + + + When setting this property on a ZipEntry that is read from an + existing zip file, calling ZipFile.Save() will cause the new + CompressionLevel to be used on the entry in the newly saved zip file. + + + + Setting this property may have the side effect of modifying the + CompressionMethod property. If you set the CompressionLevel + to a value other than None, CompressionMethod will be set + to Deflate, if it was previously None. + + + + Setting this property has no effect if the CompressionMethod is something + other than Deflate or None. + + + + + + + + The compressed size of the file, in bytes, within the zip archive. + + + + When reading a ZipFile, this value is read in from the existing + zip file. When creating or updating a ZipFile, the compressed + size is computed during compression. Therefore the value on a + ZipEntry is valid after a call to Save() (or one of its + overloads) in that case. + + + + + + + The size of the file, in bytes, before compression, or after extraction. + + + + When reading a ZipFile, this value is read in from the existing + zip file. When creating or updating a ZipFile, the uncompressed + size is computed during compression. Therefore the value on a + ZipEntry is valid after a call to Save() (or one of its + overloads) in that case. + + + + + + + The ratio of compressed size to uncompressed size of the ZipEntry. + + + + + This is a ratio of the compressed size to the uncompressed size of the + entry, expressed as a double in the range of 0 to 100+. A value of 100 + indicates no compression at all. It could be higher than 100 when the + compression algorithm actually inflates the data, as may occur for small + files, or uncompressible data that is encrypted. + + + + You could format it for presentation to a user via a format string of + "{3,5:F0}%" to see it as a percentage. + + + + If the size of the original uncompressed file is 0, implying a + denominator of 0, the return value will be zero. + + + + This property is valid after reading in an existing zip file, or after + saving the ZipFile that contains the ZipEntry. You cannot know the + effect of a compression transform until you try it. + + + + + + + The 32-bit CRC (Cyclic Redundancy Check) on the contents of the ZipEntry. + + + + + You probably don't need to concern yourself with this. It is used + internally by DotNetZip to verify files or streams upon extraction. + + The value is a 32-bit + CRC using 0xEDB88320 for the polynomial. This is the same CRC-32 used in + PNG, MPEG-2, and other protocols and formats. It is a read-only property; when + creating a Zip archive, the CRC for each entry is set only after a call to + Save() on the containing ZipFile. When reading an existing zip file, the value + of this property reflects the stored CRC for the entry. + + + + + + True if the entry is a directory (not a file). + This is a readonly property on the entry. + + + + + A derived property that is true if the entry uses encryption. + + + + + This is a readonly property on the entry. When reading a zip file, + the value for the ZipEntry is determined by the data read + from the zip file. After saving a ZipFile, the value of this + property for each ZipEntry indicates whether encryption was + actually used (which will have been true if the was set and the property + was something other than . + + + + + + Set this to specify which encryption algorithm to use for the entry when + saving it to a zip archive. + + + + + + Set this property in order to encrypt the entry when the ZipFile is + saved. When setting this property, you must also set a on the entry. If you set a value other than on this property and do not set a + Password then the entry will not be encrypted. The ZipEntry + data is encrypted as the ZipFile is saved, when you call or one of its cousins on the containing + ZipFile instance. You do not need to specify the Encryption + when extracting entries from an archive. + + + + The Zip specification from PKWare defines a set of encryption algorithms, + and the data formats for the zip archive that support them, and PKWare + supports those algorithms in the tools it produces. Other vendors of tools + and libraries, such as WinZip or Xceed, typically support a + subset of the algorithms specified by PKWare. These tools can + sometimes support additional different encryption algorithms and data + formats, not specified by PKWare. The AES Encryption specified and + supported by WinZip is the most popular example. This library supports a + subset of the complete set of algorithms specified by PKWare and other + vendors. + + + + There is no common, ubiquitous multi-vendor standard for strong encryption + within zip files. There is broad support for so-called "traditional" Zip + encryption, sometimes called Zip 2.0 encryption, as specified + by PKWare, but this encryption is considered weak and + breakable. This library currently supports the Zip 2.0 "weak" encryption, + and also a stronger WinZip-compatible AES encryption, using either 128-bit + or 256-bit key strength. If you want DotNetZip to support an algorithm + that is not currently supported, call the author of this library and maybe + we can talk business. + + + + The class also has a property. In most cases you will use + that property when setting encryption. This property takes + precedence over any Encryption set on the ZipFile itself. + Typically, you would use the per-entry Encryption when most entries in the + zip archive use one encryption algorithm, and a few entries use a + different one. If all entries in the zip file use the same Encryption, + then it is simpler to just set this property on the ZipFile itself, when + creating a zip archive. + + + + Some comments on updating archives: If you read a ZipFile, you can + modify the Encryption on an encrypted entry: you can remove encryption + from an entry that was encrypted; you can encrypt an entry that was not + encrypted previously; or, you can change the encryption algorithm. The + changes in encryption are not made permanent until you call Save() on the + ZipFile. To effect changes in encryption, the entry content is + streamed through several transformations, depending on the modification + the application has requested. For example if the entry is not encrypted + and the application sets Encryption to PkzipWeak, then at + the time of Save(), the original entry is read and decompressed, + then re-compressed and encrypted. Conversely, if the original entry is + encrypted with PkzipWeak encryption, and the application sets the + Encryption property to WinZipAes128, then at the time of + Save(), the original entry is decrypted via PKZIP encryption and + decompressed, then re-compressed and re-encrypted with AES. This all + happens automatically within the library, but it can be time-consuming for + large entries. + + + + Additionally, when updating archives, it is not possible to change the + password when changing the encryption algorithm. To change both the + algorithm and the password, you need to Save() the zipfile twice. First + set the Encryption to None, then call Save(). Then set the + Encryption to the new value (not "None"), then call Save() + once again. + + + + The WinZip AES encryption algorithms are not supported on the .NET Compact + Framework. + + + + + + This example creates a zip archive that uses encryption, and then extracts + entries from the archive. When creating the zip archive, the ReadMe.txt + file is zipped without using a password or encryption. The other file + uses encryption. + + + // Create a zip archive with AES Encryption. + using (ZipFile zip = new ZipFile()) + { + zip.AddFile("ReadMe.txt") + ZipEntry e1= zip.AddFile("2008-Regional-Sales-Report.pdf"); + e1.Encryption= EncryptionAlgorithm.WinZipAes256; + e1.Password= "Top.Secret.No.Peeking!"; + zip.Save("EncryptedArchive.zip"); + } + + // Extract a zip archive that uses AES Encryption. + // You do not need to specify the algorithm during extraction. + using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) + { + // Specify the password that is used during extraction, for + // all entries that require a password: + zip.Password= "Top.Secret.No.Peeking!"; + zip.ExtractAll("extractDirectory"); + } + + + + ' Create a zip that uses Encryption. + Using zip As New ZipFile() + zip.AddFile("ReadMe.txt") + Dim e1 as ZipEntry + e1= zip.AddFile("2008-Regional-Sales-Report.pdf") + e1.Encryption= EncryptionAlgorithm.WinZipAes256 + e1.Password= "Top.Secret.No.Peeking!" + zip.Save("EncryptedArchive.zip") + End Using + + ' Extract a zip archive that uses AES Encryption. + ' You do not need to specify the algorithm during extraction. + Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) + ' Specify the password that is used during extraction, for + ' all entries that require a password: + zip.Password= "Top.Secret.No.Peeking!" + zip.ExtractAll("extractDirectory") + End Using + + + + + + Thrown in the setter if EncryptionAlgorithm.Unsupported is specified. + + + ZipEntry.Password + ZipFile.Encryption + + + + The Password to be used when encrypting a ZipEntry upon + ZipFile.Save(), or when decrypting an entry upon Extract(). + + + + + This is a write-only property on the entry. Set this to request that the + entry be encrypted when writing the zip archive, or set it to specify the + password to be used when extracting an existing entry that is encrypted. + + + + The password set here is implicitly used to encrypt the entry during the + operation, or to decrypt during the or operation. If you set + the Password on a ZipEntry after calling Save(), there is no + effect. + + + + Consider setting the property when using a + password. Answering concerns that the standard password protection + supported by all zip tools is weak, WinZip has extended the ZIP + specification with a way to use AES Encryption to protect entries in the + Zip file. Unlike the "PKZIP 2.0" encryption specified in the PKZIP + specification, AES + Encryption uses a standard, strong, tested, encryption + algorithm. DotNetZip can create zip archives that use WinZip-compatible + AES encryption, if you set the property. But, + archives created that use AES encryption may not be readable by all other + tools and libraries. For example, Windows Explorer cannot read a + "compressed folder" (a zip file) that uses AES encryption, though it can + read a zip file that uses "PKZIP encryption." + + + + The class also has a + property. This property takes precedence over any password set on the + ZipFile itself. Typically, you would use the per-entry Password when most + entries in the zip archive use one password, and a few entries use a + different password. If all entries in the zip file use the same password, + then it is simpler to just set this property on the ZipFile itself, + whether creating a zip archive or extracting a zip archive. + + + + Some comments on updating archives: If you read a ZipFile, you + cannot modify the password on any encrypted entry, except by extracting + the entry with the original password (if any), removing the original entry + via , and then adding a new + entry with a new Password. + + + + For example, suppose you read a ZipFile, and there is an encrypted + entry. Setting the Password property on that ZipEntry and then + calling Save() on the ZipFile does not update the password + on that entry in the archive. Neither is an exception thrown. Instead, + what happens during the Save() is the existing entry is copied + through to the new zip archive, in its original encrypted form. Upon + re-reading that archive, the entry can be decrypted with its original + password. + + + + If you read a ZipFile, and there is an un-encrypted entry, you can set the + Password on the entry and then call Save() on the ZipFile, and get + encryption on that entry. + + + + + + + This example creates a zip file with two entries, and then extracts the + entries from the zip file. When creating the zip file, the two files are + added to the zip file using password protection. Each entry uses a + different password. During extraction, each file is extracted with the + appropriate password. + + + // create a file with encryption + using (ZipFile zip = new ZipFile()) + { + ZipEntry entry; + entry= zip.AddFile("Declaration.txt"); + entry.Password= "123456!"; + entry = zip.AddFile("Report.xls"); + entry.Password= "1Secret!"; + zip.Save("EncryptedArchive.zip"); + } + + // extract entries that use encryption + using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) + { + ZipEntry entry; + entry = zip["Declaration.txt"]; + entry.Password = "123456!"; + entry.Extract("extractDir"); + entry = zip["Report.xls"]; + entry.Password = "1Secret!"; + entry.Extract("extractDir"); + } + + + + + Using zip As New ZipFile + Dim entry as ZipEntry + entry= zip.AddFile("Declaration.txt") + entry.Password= "123456!" + entry = zip.AddFile("Report.xls") + entry.Password= "1Secret!" + zip.Save("EncryptedArchive.zip") + End Using + + + ' extract entries that use encryption + Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) + Dim entry as ZipEntry + entry = zip("Declaration.txt") + entry.Password = "123456!" + entry.Extract("extractDir") + entry = zip("Report.xls") + entry.Password = "1Secret!" + entry.Extract("extractDir") + End Using + + + + + + + ZipFile.Password + + + + The action the library should take when extracting a file that already exists. + + + + + This property affects the behavior of the Extract methods (one of the + Extract() or ExtractWithPassword() overloads), when + extraction would would overwrite an existing filesystem file. If you do + not set this property, the library throws an exception when extracting + an entry would overwrite an existing file. + + + + This property has no effect when extracting to a stream, or when the file to be + extracted does not already exist. + + + + + + + This example shows how to set the ExtractExistingFile property in + an ExtractProgress event, in response to user input. The + ExtractProgress event is invoked if and only if the + ExtractExistingFile property was previously set to + ExtractExistingFileAction.InvokeExtractProgressEvent. + + public static void ExtractProgress(object sender, ExtractProgressEventArgs e) + { + if (e.EventType == ZipProgressEventType.Extracting_BeforeExtractEntry) + Console.WriteLine("extract {0} ", e.CurrentEntry.FileName); + + else if (e.EventType == ZipProgressEventType.Extracting_ExtractEntryWouldOverwrite) + { + ZipEntry entry = e.CurrentEntry; + string response = null; + // Ask the user if he wants overwrite the file + do + { + Console.Write("Overwrite {0} in {1} ? (y/n/C) ", entry.FileName, e.ExtractLocation); + response = Console.ReadLine(); + Console.WriteLine(); + + } while (response != null && response[0]!='Y' && + response[0]!='N' && response[0]!='C'); + + if (response[0]=='C') + e.Cancel = true; + else if (response[0]=='Y') + entry.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently; + else + entry.ExtractExistingFile= ExtractExistingFileAction.DoNotOverwrite; + } + } + + + + + + The action to take when an error is encountered while + opening or reading files as they are saved into a zip archive. + + + + + Errors can occur within a call to ZipFile.Save, as the various files contained + in a ZipFile are being saved into the zip archive. During the + Save, DotNetZip will perform a File.Open on the file + associated to the ZipEntry, and then will read the entire contents of + the file as it is zipped. Either the open or the Read may fail, because + of lock conflicts or other reasons. Using this property, you can + specify the action to take when such errors occur. + + + + Typically you will NOT set this property on individual ZipEntry + instances. Instead, you will set the ZipFile.ZipErrorAction property on + the ZipFile instance, before adding any entries to the + ZipFile. If you do this, errors encountered on behalf of any of + the entries in the ZipFile will be handled the same way. + + + + But, if you use a handler, you will want + to set this property on the ZipEntry within the handler, to + communicate back to DotNetZip what you would like to do with the + particular error. + + + + + + + + + Indicates whether the entry was included in the most recent save. + + + An entry can be excluded or skipped from a save if there is an error + opening or reading the entry. + + + + + + A callback that allows the application to specify the compression to use + for a given entry that is about to be added to the zip archive. + + + + + See + + + + + + Set to indicate whether to use UTF-8 encoding for filenames and comments. + + + + + + If this flag is set, the comment and filename for the entry will be + encoded with UTF-8, as described in the Zip + specification, if necessary. "Necessary" means, the filename or + entry comment (if any) cannot be reflexively encoded and decoded using the + default code page, IBM437. + + + + Setting this flag to true is equivalent to setting to System.Text.Encoding.UTF8. + + + + This flag has no effect or relation to the text encoding used within the + file itself. + + + + + + + The text encoding to use for the FileName and Comment on this ZipEntry, + when the default encoding is insufficient. + + + + + + Don't use this property. See . + + + + + + + Specifies the alternate text encoding used by this ZipEntry + + + + The default text encoding used in Zip files for encoding filenames and + comments is IBM437, which is something like a superset of ASCII. In + cases where this is insufficient, applications can specify an + alternate encoding. + + + When creating a zip file, the usage of the alternate encoding is + governed by the property. + Typically you would set both properties to tell DotNetZip to employ an + encoding that is not IBM437 in the zipfile you are creating. + + + Keep in mind that because the ZIP specification states that the only + valid encodings to use are IBM437 and UTF-8, if you use something + other than that, then zip tools and libraries may not be able to + successfully read the zip archive you generate. + + + The zip specification states that applications should presume that + IBM437 is in use, except when a special bit is set, which indicates + UTF-8. There is no way to specify an arbitrary code page, within the + zip file itself. When you create a zip file encoded with gb2312 or + ibm861 or anything other than IBM437 or UTF-8, then the application + that reads the zip file needs to "know" which code page to use. In + some cases, the code page used when reading is chosen implicitly. For + example, WinRar uses the ambient code page for the host desktop + operating system. The pitfall here is that if you create a zip in + Copenhagen and send it to Tokyo, the reader of the zipfile may not be + able to decode successfully. + + + + This example shows how to create a zipfile encoded with a + language-specific encoding: + + using (var zip = new ZipFile()) + { + zip.AlternateEnoding = System.Text.Encoding.GetEncoding("ibm861"); + zip.AlternateEnodingUsage = ZipOption.Always; + zip.AddFileS(arrayOfFiles); + zip.Save("Myarchive-Encoded-in-IBM861.zip"); + } + + + + + + + Describes if and when this instance should apply + AlternateEncoding to encode the FileName and Comment, when + saving. + + + + + + Indicates whether an entry is marked as a text file. Be careful when + using on this property. Unless you have a good reason, you should + probably ignore this property. + + + + + The ZIP format includes a provision for specifying whether an entry in + the zip archive is a text or binary file. This property exposes that + metadata item. Be careful when using this property: It's not clear + that this property as a firm meaning, across tools and libraries. + + + + To be clear, when reading a zip file, the property value may or may + not be set, and its value may or may not be valid. Not all entries + that you may think of as "text" entries will be so marked, and entries + marked as "text" are not guaranteed in any way to be text entries. + Whether the value is set and set correctly depends entirely on the + application that produced the zip file. + + + + There are many zip tools available, and when creating zip files, some + of them "respect" the IsText metadata field, and some of them do not. + Unfortunately, even when an application tries to do "the right thing", + it's not always clear what "the right thing" is. + + + + There's no firm definition of just what it means to be "a text file", + and the zip specification does not help in this regard. Twenty years + ago, text was ASCII, each byte was less than 127. IsText meant, all + bytes in the file were less than 127. These days, it is not the case + that all text files have all bytes less than 127. Any unicode file + may have bytes that are above 0x7f. The zip specification has nothing + to say on this topic. Therefore, it's not clear what IsText really + means. + + + + This property merely tells a reading application what is stored in the + metadata for an entry, without guaranteeing its validity or its + meaning. + + + + When DotNetZip is used to create a zipfile, it attempts to set this + field "correctly." For example, if a file ends in ".txt", this field + will be set. Your application may override that default setting. When + writing a zip file, you must set the property before calling + Save() on the ZipFile. + + + + When reading a zip file, a more general way to decide just what kind + of file is contained in a particular entry is to use the file type + database stored in the operating system. The operating system stores + a table that says, a file with .jpg extension is a JPG image file, a + file with a .xml extension is an XML document, a file with a .txt is a + pure ASCII text document, and so on. To get this information on + Windows, you + need to read and parse the registry. + + + + + using (var zip = new ZipFile()) + { + var e = zip.UpdateFile("Descriptions.mme", ""); + e.IsText = true; + zip.Save(zipPath); + } + + + + Using zip As New ZipFile + Dim e2 as ZipEntry = zip.AddFile("Descriptions.mme", "") + e.IsText= True + zip.Save(zipPath) + End Using + + + + + Provides a string representation of the instance. + a string representation of the instance. + + + + Extract the entry to the filesystem, starting at the current + working directory. + + + + This method has a bunch of overloads! One of them is sure to + be the right one for you... If you don't like these, check + out the ExtractWithPassword() methods. + + + + + + + + + This method extracts an entry from a zip file into the current + working directory. The path of the entry as extracted is the full + path as specified in the zip archive, relative to the current + working directory. After the file is extracted successfully, the + file attributes and timestamps are set. + + + + The action taken when extraction an entry would overwrite an + existing file is determined by the property. + + + + Within the call to Extract(), the content for the entry is + written into a filesystem file, and then the last modified time of the + file is set according to the property on + the entry. See the remarks the property for + some details about the last modified time. + + + + + + + Extract the entry to a file in the filesystem, using the specified + behavior when extraction would overwrite an existing file. + + + + + See the remarks on the property, for some + details about how the last modified time of the file is set after + extraction. + + + + + The action to take if extraction would overwrite an existing file. + + + + + Extracts the entry to the specified stream. + + + + + The caller can specify any write-able stream, for example a , a , or ASP.NET's + Response.OutputStream. The content will be decrypted and + decompressed as necessary. If the entry is encrypted and no password + is provided, this method will throw. + + + The position on the stream is not reset by this method before it extracts. + You may want to call stream.Seek() before calling ZipEntry.Extract(). + + + + + the stream to which the entry should be extracted. + + + + + + Extract the entry to the filesystem, starting at the specified base + directory. + + + the pathname of the base directory + + + + + + This example extracts only the entries in a zip file that are .txt files, + into a directory called "textfiles". + + using (ZipFile zip = ZipFile.Read("PackedDocuments.zip")) + { + foreach (string s1 in zip.EntryFilenames) + { + if (s1.EndsWith(".txt")) + { + zip[s1].Extract("textfiles"); + } + } + } + + + Using zip As ZipFile = ZipFile.Read("PackedDocuments.zip") + Dim s1 As String + For Each s1 In zip.EntryFilenames + If s1.EndsWith(".txt") Then + zip(s1).Extract("textfiles") + End If + Next + End Using + + + + + + + Using this method, existing entries in the filesystem will not be + overwritten. If you would like to force the overwrite of existing + files, see the property, or call + . + + + + See the remarks on the property, for some + details about how the last modified time of the created file is set. + + + + + + Extract the entry to the filesystem, starting at the specified base + directory, and using the specified behavior when extraction would + overwrite an existing file. + + + + + See the remarks on the property, for some + details about how the last modified time of the created file is set. + + + + + + String sZipPath = "Airborne.zip"; + String sFilePath = "Readme.txt"; + String sRootFolder = "Digado"; + using (ZipFile zip = ZipFile.Read(sZipPath)) + { + if (zip.EntryFileNames.Contains(sFilePath)) + { + // use the string indexer on the zip file + zip[sFileName].Extract(sRootFolder, + ExtractExistingFileAction.OverwriteSilently); + } + } + + + + Dim sZipPath as String = "Airborne.zip" + Dim sFilePath As String = "Readme.txt" + Dim sRootFolder As String = "Digado" + Using zip As ZipFile = ZipFile.Read(sZipPath) + If zip.EntryFileNames.Contains(sFilePath) + ' use the string indexer on the zip file + zip(sFilePath).Extract(sRootFolder, _ + ExtractExistingFileAction.OverwriteSilently) + End If + End Using + + + + the pathname of the base directory + + The action to take if extraction would overwrite an existing file. + + + + + Extract the entry to the filesystem, using the current working directory + and the specified password. + + + + This method has a bunch of overloads! One of them is sure to be + the right one for you... + + + + + + + + + Existing entries in the filesystem will not be overwritten. If you + would like to force the overwrite of existing files, see the property, or call + . + + + + See the remarks on the property for some + details about how the "last modified" time of the created file is + set. + + + + + In this example, entries that use encryption are extracted using a + particular password. + + using (var zip = ZipFile.Read(FilePath)) + { + foreach (ZipEntry e in zip) + { + if (e.UsesEncryption) + e.ExtractWithPassword("Secret!"); + else + e.Extract(); + } + } + + + Using zip As ZipFile = ZipFile.Read(FilePath) + Dim e As ZipEntry + For Each e In zip + If (e.UsesEncryption) + e.ExtractWithPassword("Secret!") + Else + e.Extract + End If + Next + End Using + + + The Password to use for decrypting the entry. + + + + Extract the entry to the filesystem, starting at the specified base + directory, and using the specified password. + + + + + + + + Existing entries in the filesystem will not be overwritten. If you + would like to force the overwrite of existing files, see the property, or call + . + + + + See the remarks on the property, for some + details about how the last modified time of the created file is set. + + + + The pathname of the base directory. + The Password to use for decrypting the entry. + + + + Extract the entry to a file in the filesystem, relative to the + current directory, using the specified behavior when extraction + would overwrite an existing file. + + + + + See the remarks on the property, for some + details about how the last modified time of the created file is set. + + + + The Password to use for decrypting the entry. + + + The action to take if extraction would overwrite an existing file. + + + + + Extract the entry to the filesystem, starting at the specified base + directory, and using the specified behavior when extraction would + overwrite an existing file. + + + + See the remarks on the property, for some + details about how the last modified time of the created file is set. + + + the pathname of the base directory + + The action to take if extraction would + overwrite an existing file. + + The Password to use for decrypting the entry. + + + + Extracts the entry to the specified stream, using the specified + Password. For example, the caller could extract to Console.Out, or + to a MemoryStream. + + + + + The caller can specify any write-able stream, for example a , a , or ASP.NET's + Response.OutputStream. The content will be decrypted and + decompressed as necessary. If the entry is encrypted and no password + is provided, this method will throw. + + + The position on the stream is not reset by this method before it extracts. + You may want to call stream.Seek() before calling ZipEntry.Extract(). + + + + + + the stream to which the entry should be extracted. + + + The password to use for decrypting the entry. + + + + + Opens a readable stream corresponding to the zip entry in the + archive. The stream decompresses and decrypts as necessary, as it + is read. + + + + + + DotNetZip offers a variety of ways to extract entries from a zip + file. This method allows an application to extract an entry by + reading a . + + + + The return value is of type . Use it as you would any + stream for reading. When an application calls on that stream, it will + receive data from the zip entry that is decrypted and decompressed + as necessary. + + + + CrcCalculatorStream adds one additional feature: it keeps a + CRC32 checksum on the bytes of the stream as it is read. The CRC + value is available in the property on the + CrcCalculatorStream. When the read is complete, your + application + should check this CRC against the + property on the ZipEntry to validate the content of the + ZipEntry. You don't have to validate the entry using the CRC, but + you should, to verify integrity. Check the example for how to do + this. + + + + If the entry is protected with a password, then you need to provide + a password prior to calling , either by + setting the property on the entry, or the + property on the ZipFile + itself. Or, you can use , the + overload of OpenReader that accepts a password parameter. + + + + If you want to extract entry data into a write-able stream that is + already opened, like a , do not + use this method. Instead, use . + + + + Your application may use only one stream created by OpenReader() at + a time, and you should not call other Extract methods before + completing your reads on a stream obtained from OpenReader(). This + is because there is really only one source stream for the compressed + content. A call to OpenReader() seeks in the source stream, to the + beginning of the compressed content. A subsequent call to + OpenReader() on a different entry will seek to a different position + in the source stream, as will a call to Extract() or one of its + overloads. This will corrupt the state for the decompressing stream + from the original call to OpenReader(). + + + + The OpenReader() method works only when the ZipEntry is + obtained from an instance of ZipFile. This method will throw + an exception if the ZipEntry is obtained from a . + + + + + This example shows how to open a zip archive, then read in a named + entry via a stream. After the read loop is complete, the code + compares the calculated during the read loop with the expected CRC + on the ZipEntry, to verify the extraction. + + using (ZipFile zip = new ZipFile(ZipFileToRead)) + { + ZipEntry e1= zip["Elevation.mp3"]; + using (Ionic.Zlib.CrcCalculatorStream s = e1.OpenReader()) + { + byte[] buffer = new byte[4096]; + int n, totalBytesRead= 0; + do { + n = s.Read(buffer,0, buffer.Length); + totalBytesRead+=n; + } while (n>0); + if (s.Crc32 != e1.Crc32) + throw new Exception(string.Format("The Zip Entry failed the CRC Check. (0x{0:X8}!=0x{1:X8})", s.Crc32, e1.Crc32)); + if (totalBytesRead != e1.UncompressedSize) + throw new Exception(string.Format("We read an unexpected number of bytes. ({0}!={1})", totalBytesRead, e1.UncompressedSize)); + } + } + + + Using zip As New ZipFile(ZipFileToRead) + Dim e1 As ZipEntry = zip.Item("Elevation.mp3") + Using s As Ionic.Zlib.CrcCalculatorStream = e1.OpenReader + Dim n As Integer + Dim buffer As Byte() = New Byte(4096) {} + Dim totalBytesRead As Integer = 0 + Do + n = s.Read(buffer, 0, buffer.Length) + totalBytesRead = (totalBytesRead + n) + Loop While (n > 0) + If (s.Crc32 <> e1.Crc32) Then + Throw New Exception(String.Format("The Zip Entry failed the CRC Check. (0x{0:X8}!=0x{1:X8})", s.Crc32, e1.Crc32)) + End If + If (totalBytesRead <> e1.UncompressedSize) Then + Throw New Exception(String.Format("We read an unexpected number of bytes. ({0}!={1})", totalBytesRead, e1.UncompressedSize)) + End If + End Using + End Using + + + + The Stream for reading. + + + + Opens a readable stream for an encrypted zip entry in the archive. + The stream decompresses and decrypts as necessary, as it is read. + + + + + See the documentation on the method for + full details. This overload allows the application to specify a + password for the ZipEntry to be read. + + + + The password to use for decrypting the entry. + The Stream for reading. + + + + Pass in either basedir or s, but not both. + In other words, you can extract to a stream or to a directory (filesystem), but not both! + The Password param is required for encrypted entries. + + + + + Extract to a stream + In other words, you can extract to a stream or to a directory (filesystem), but not both! + The Password param is required for encrypted entries. + + + + + Validates that the args are consistent; returning whether the caller can return + because it's done, or not (caller should continue) + + + + + Validates that the args are consistent; returning whether the caller can return + because it's done, or not (caller should continue) + + + + + Reads one ZipEntry from the given stream. The content for + the entry does not get decompressed or decrypted. This method + basically reads metadata, and seeks. + + the ZipContainer this entry belongs to. + + true of this is the first entry being read from the stream. + + the ZipEntry read from the stream. + + + + Finds a particular segment in the given extra field. + This is used when modifying a previously-generated + extra field, in particular when removing the AES crypto + segment in the extra field. + + + + + At current cursor position in the stream, read the extra + field, and set the properties on the ZipEntry instance + appropriately. This can be called when processing the + Extra field in the Central Directory, or in the local + header. + + + + + generate and return a byte array that encodes the filename + for the entry. + + + + side effects: generate and store into _CommentBytes the + byte array for any comment attached to the entry. Also + sets _actualEncoding to indicate the actual encoding + used. The same encoding is used for both filename and + comment. + + + + + + Stores the position of the entry source stream, or, if the position is + already stored, seeks to that position. + + + + + This method is called in prep for reading the source stream. If PKZIP + encryption is used, then we need to calc the CRC32 before doing the + encryption, because the CRC is used in the 12th byte of the PKZIP + encryption header. So, we need to be able to seek backward in the source + when saving the ZipEntry. This method is called from the place that + calculates the CRC, and also from the method that does the encryption of + the file data. + + + + The first time through, this method sets the _sourceStreamOriginalPosition + field. Subsequent calls to this method seek to that position. + + + + + + Copy metadata that may have been changed by the app. We do this when + resetting the zipFile instance. If the app calls Save() on a ZipFile, then + tries to party on that file some more, we may need to Reset() it , which + means re-reading the entries and then copying the metadata. I think. + + + + + Set the input stream and get its length, if possible. The length is + used for progress updates, AND, to allow an optimization in case of + a stream/file of zero length. In that case we skip the Encrypt and + compression Stream. (like DeflateStream or BZip2OutputStream) + + + + + Prepare the given stream for output - wrap it in a CountingStream, and + then in a CRC stream, and an encryptor and deflator as appropriate. + + + + Previously this was used in ZipEntry.Write(), but in an effort to + introduce some efficiencies in that method I've refactored to put the + code inline. This method still gets called by ZipOutputStream. + + + + + + An enum that specifies the type of timestamp available on the ZipEntry. + + + + + + The last modified time of a file can be stored in multiple ways in + a zip file, and they are not mutually exclusive: + + + + + In the so-called "DOS" format, which has a 2-second precision. Values + are rounded to the nearest even second. For example, if the time on the + file is 12:34:43, then it will be stored as 12:34:44. This first value + is accessible via the LastModified property. This value is always + present in the metadata for each zip entry. In some cases the value is + invalid, or zero. + + + + In the so-called "Windows" or "NTFS" format, as an 8-byte integer + quantity expressed as the number of 1/10 milliseconds (in other words + the number of 100 nanosecond units) since January 1, 1601 (UTC). This + format is how Windows represents file times. This time is accessible + via the ModifiedTime property. + + + + In the "Unix" format, a 4-byte quantity specifying the number of seconds since + January 1, 1970 UTC. + + + + In an older format, now deprecated but still used by some current + tools. This format is also a 4-byte quantity specifying the number of + seconds since January 1, 1970 UTC. + + + + + + This bit field describes which of the formats were found in a ZipEntry that was read. + + + + + + + Default value. + + + + + A DOS timestamp with 2-second precision. + + + + + A Windows timestamp with 100-ns precision. + + + + + A Unix timestamp with 1-second precision. + + + + + A Unix timestamp with 1-second precision, stored in InfoZip v1 format. This + format is outdated and is supported for reading archives only. + + + + + The method of compression to use for a particular ZipEntry. + + + + PKWare's + ZIP Specification describes a number of distinct + cmopression methods that can be used within a zip + file. DotNetZip supports a subset of them. + + + + + No compression at all. For COM environments, the value is 0 (zero). + + + + + DEFLATE compression, as described in IETF RFC + 1951. This is the "normal" compression used in zip + files. For COM environments, the value is 8. + + + + + BZip2 compression, a compression algorithm developed by Julian Seward. + For COM environments, the value is 12. + + + + + An enum that specifies the source of the ZipEntry. + + + + + Default value. Invalid on a bonafide ZipEntry. + + + + + The entry was instantiated by calling AddFile() or another method that + added an entry from the filesystem. + + + + + The entry was instantiated via or + . + + + + + The ZipEntry was instantiated by reading a zipfile. + + + + + The content for the ZipEntry will be or was provided by the WriteDelegate. + + + + + The content for the ZipEntry will be obtained from the stream dispensed by the OpenDelegate. + The entry was instantiated via . + + + + + The content for the ZipEntry will be or was obtained from a ZipOutputStream. + + + + + An enum providing the options when an error occurs during opening or reading + of a file or directory that is being saved to a zip file. + + + + + This enum describes the actions that the library can take when an error occurs + opening or reading a file, as it is being saved into a Zip archive. + + + + In some cases an error will occur when DotNetZip tries to open a file to be + added to the zip archive. In other cases, an error might occur after the + file has been successfully opened, while DotNetZip is reading the file. + + + + The first problem might occur when calling AddDirectory() on a directory + that contains a Clipper .dbf file; the file is locked by Clipper and + cannot be opened by another process. An example of the second problem is + the ERROR_LOCK_VIOLATION that results when a file is opened by another + process, but not locked, and a range lock has been taken on the file. + Microsoft Outlook takes range locks on .PST files. + + + + + + Throw an exception when an error occurs while zipping. This is the default + behavior. (For COM clients, this is a 0 (zero).) + + + + + When an error occurs during zipping, for example a file cannot be opened, + skip the file causing the error, and continue zipping. (For COM clients, + this is a 1.) + + + + + When an error occurs during zipping, for example a file cannot be opened, + retry the operation that caused the error. Be careful with this option. If + the error is not temporary, the library will retry forever. (For COM + clients, this is a 2.) + + + + + When an error occurs, invoke the zipError event. The event type used is + . A typical use of this option: + a GUI application may wish to pop up a dialog to allow the user to view the + error that occurred, and choose an appropriate action. After your + processing in the error event, if you want to skip the file, set on the + ZipProgressEventArgs.CurrentEntry to Skip. If you want the + exception to be thrown, set ZipErrorAction on the CurrentEntry + to Throw. If you want to cancel the zip, set + ZipProgressEventArgs.Cancel to true. Cancelling differs from using + Skip in that a cancel will not save any further entries, if there are any. + (For COM clients, the value of this enum is a 3.) + + + + + The ZipFile type represents a zip archive file. + + + + + This is the main type in the DotNetZip class library. This class reads and + writes zip files, as defined in the specification + for zip files described by PKWare. The compression for this + implementation is provided by a managed-code version of Zlib, included with + DotNetZip in the classes in the Ionic.Zlib namespace. + + + + This class provides a general purpose zip file capability. Use it to read, + create, or update zip files. When you want to create zip files using a + Stream type to write the zip file, you may want to consider the class. + + + + Both the ZipOutputStream class and the ZipFile class can + be used to create zip files. Both of them support many of the common zip + features, including Unicode, different compression methods and levels, + and ZIP64. They provide very similar performance when creating zip + files. + + + + The ZipFile class is generally easier to use than + ZipOutputStream and should be considered a higher-level interface. For + example, when creating a zip file via calls to the PutNextEntry() and + Write() methods on the ZipOutputStream class, the caller is + responsible for opening the file, reading the bytes from the file, writing + those bytes into the ZipOutputStream, setting the attributes on the + ZipEntry, and setting the created, last modified, and last accessed + timestamps on the zip entry. All of these things are done automatically by a + call to ZipFile.AddFile(). + For this reason, the ZipOutputStream is generally recommended for use + only when your application emits arbitrary data, not necessarily data from a + filesystem file, directly into a zip file, and does so using a Stream + metaphor. + + + + Aside from the differences in programming model, there are other + differences in capability between the two classes. + + + + + ZipFile can be used to read and extract zip files, in addition to + creating zip files. ZipOutputStream cannot read zip files. If you want + to use a stream to read zip files, check out the class. + + + + ZipOutputStream does not support the creation of segmented or spanned + zip files. + + + + ZipOutputStream cannot produce a self-extracting archive. + + + + + Be aware that the ZipFile class implements the interface. In order for ZipFile to + produce a valid zip file, you use use it within a using clause (Using + in VB), or call the Dispose() method explicitly. See the examples + for how to employ a using clause. + + + + + + + Adds an item, either a file or a directory, to a zip file archive. + + + + + This method is handy if you are adding things to zip archive and don't + want to bother distinguishing between directories or files. Any files are + added as single entries. A directory added through this method is added + recursively: all files and subdirectories contained within the directory + are added to the ZipFile. + + + + The name of the item may be a relative path or a fully-qualified + path. Remember, the items contained in ZipFile instance get written + to the disk only when you call or a similar + save method. + + + + The directory name used for the file within the archive is the same + as the directory name (potentially a relative path) specified in the + . + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + + + This method has two overloads. + + the name of the file or directory to add. + + The ZipEntry added. + + + + Adds an item, either a file or a directory, to a zip file archive, + explicitly specifying the directory path to be used in the archive. + + + + + If adding a directory, the add is recursive on all files and + subdirectories contained within it. + + + The name of the item may be a relative path or a fully-qualified path. + The item added by this call to the ZipFile is not read from the + disk nor written to the zip file archive until the application calls + Save() on the ZipFile. + + + + This version of the method allows the caller to explicitly specify the + directory path to be used in the archive, which would override the + "natural" path of the filesystem file. + + + + Encryption will be used on the file data if the Password has + been set on the ZipFile object, prior to calling this method. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + Thrown if the file or directory passed in does not exist. + + + the name of the file or directory to add. + + + + The name of the directory path to use within the zip archive. This path + need not refer to an extant directory in the current filesystem. If the + files within the zip are later extracted, this is the path used for the + extracted file. Passing null (Nothing in VB) will use the + path on the fileOrDirectoryName. Passing the empty string ("") will + insert the item at the root path within the archive. + + + + + + + + This example shows how to zip up a set of files into a flat hierarchy, + regardless of where in the filesystem the files originated. The resulting + zip archive will contain a toplevel directory named "flat", which itself + will contain files Readme.txt, MyProposal.docx, and Image1.jpg. A + subdirectory under "flat" called SupportFiles will contain all the files + in the "c:\SupportFiles" directory on disk. + + + String[] itemnames= { + "c:\\fixedContent\\Readme.txt", + "MyProposal.docx", + "c:\\SupportFiles", // a directory + "images\\Image1.jpg" + }; + + try + { + using (ZipFile zip = new ZipFile()) + { + for (int i = 1; i < itemnames.Length; i++) + { + // will add Files or Dirs, recurses and flattens subdirectories + zip.AddItem(itemnames[i],"flat"); + } + zip.Save(ZipToCreate); + } + } + catch (System.Exception ex1) + { + System.Console.Error.WriteLine("exception: {0}", ex1); + } + + + + Dim itemnames As String() = _ + New String() { "c:\fixedContent\Readme.txt", _ + "MyProposal.docx", _ + "SupportFiles", _ + "images\Image1.jpg" } + Try + Using zip As New ZipFile + Dim i As Integer + For i = 1 To itemnames.Length - 1 + ' will add Files or Dirs, recursing and flattening subdirectories. + zip.AddItem(itemnames(i), "flat") + Next i + zip.Save(ZipToCreate) + End Using + Catch ex1 As Exception + Console.Error.WriteLine("exception: {0}", ex1.ToString()) + End Try + + + The ZipEntry added. + + + + Adds a File to a Zip file archive. + + + + + This call collects metadata for the named file in the filesystem, + including the file attributes and the timestamp, and inserts that metadata + into the resulting ZipEntry. Only when the application calls Save() on + the ZipFile, does DotNetZip read the file from the filesystem and + then write the content to the zip file archive. + + + + This method will throw an exception if an entry with the same name already + exists in the ZipFile. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + In this example, three files are added to a Zip archive. The ReadMe.txt + file will be placed in the root of the archive. The .png file will be + placed in a folder within the zip called photos\personal. The pdf file + will be included into a folder within the zip called Desktop. + + + try + { + using (ZipFile zip = new ZipFile()) + { + zip.AddFile("c:\\photos\\personal\\7440-N49th.png"); + zip.AddFile("c:\\Desktop\\2008-Regional-Sales-Report.pdf"); + zip.AddFile("ReadMe.txt"); + + zip.Save("Package.zip"); + } + } + catch (System.Exception ex1) + { + System.Console.Error.WriteLine("exception: " + ex1); + } + + + + Try + Using zip As ZipFile = New ZipFile + zip.AddFile("c:\photos\personal\7440-N49th.png") + zip.AddFile("c:\Desktop\2008-Regional-Sales-Report.pdf") + zip.AddFile("ReadMe.txt") + zip.Save("Package.zip") + End Using + Catch ex1 As Exception + Console.Error.WriteLine("exception: {0}", ex1.ToString) + End Try + + + + This method has two overloads. + + + + + + + The name of the file to add. It should refer to a file in the filesystem. + The name of the file may be a relative path or a fully-qualified path. + + The ZipEntry corresponding to the File added. + + + + Adds a File to a Zip file archive, potentially overriding the path to be + used within the zip archive. + + + + + The file added by this call to the ZipFile is not written to the + zip file archive until the application calls Save() on the ZipFile. + + + + This method will throw an exception if an entry with the same name already + exists in the ZipFile. + + + + This version of the method allows the caller to explicitly specify the + directory path to be used in the archive. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + In this example, three files are added to a Zip archive. The ReadMe.txt + file will be placed in the root of the archive. The .png file will be + placed in a folder within the zip called images. The pdf file will be + included into a folder within the zip called files\docs, and will be + encrypted with the given password. + + + try + { + using (ZipFile zip = new ZipFile()) + { + // the following entry will be inserted at the root in the archive. + zip.AddFile("c:\\datafiles\\ReadMe.txt", ""); + // this image file will be inserted into the "images" directory in the archive. + zip.AddFile("c:\\photos\\personal\\7440-N49th.png", "images"); + // the following will result in a password-protected file called + // files\\docs\\2008-Regional-Sales-Report.pdf in the archive. + zip.Password = "EncryptMe!"; + zip.AddFile("c:\\Desktop\\2008-Regional-Sales-Report.pdf", "files\\docs"); + zip.Save("Archive.zip"); + } + } + catch (System.Exception ex1) + { + System.Console.Error.WriteLine("exception: {0}", ex1); + } + + + + Try + Using zip As ZipFile = New ZipFile + ' the following entry will be inserted at the root in the archive. + zip.AddFile("c:\datafiles\ReadMe.txt", "") + ' this image file will be inserted into the "images" directory in the archive. + zip.AddFile("c:\photos\personal\7440-N49th.png", "images") + ' the following will result in a password-protected file called + ' files\\docs\\2008-Regional-Sales-Report.pdf in the archive. + zip.Password = "EncryptMe!" + zip.AddFile("c:\Desktop\2008-Regional-Sales-Report.pdf", "files\documents") + zip.Save("Archive.zip") + End Using + Catch ex1 As Exception + Console.Error.WriteLine("exception: {0}", ex1) + End Try + + + + + + + + + The name of the file to add. The name of the file may be a relative path + or a fully-qualified path. + + + + Specifies a directory path to use to override any path in the fileName. + This path may, or may not, correspond to a real directory in the current + filesystem. If the files within the zip are later extracted, this is the + path used for the extracted file. Passing null (Nothing in + VB) will use the path on the fileName, if any. Passing the empty string + ("") will insert the item at the root path within the archive. + + + The ZipEntry corresponding to the file added. + + + + This method removes a collection of entries from the ZipFile. + + + + A collection of ZipEntry instances from this zip file to be removed. For + example, you can pass in an array of ZipEntry instances; or you can call + SelectEntries(), and then add or remove entries from that + ICollection<ZipEntry> (ICollection(Of ZipEntry) in VB), and pass + that ICollection to this method. + + + + + + + + This method removes a collection of entries from the ZipFile, by name. + + + + A collection of strings that refer to names of entries to be removed + from the ZipFile. For example, you can pass in an array or a + List of Strings that provide the names of entries to be removed. + + + + + + + + This method adds a set of files to the ZipFile. + + + + + Use this method to add a set of files to the zip archive, in one call. + For example, a list of files received from + System.IO.Directory.GetFiles() can be added to a zip archive in one + call. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to each + ZipEntry added. + + + + + The collection of names of the files to add. Each string should refer to a + file in the filesystem. The name of the file may be a relative path or a + fully-qualified path. + + + + This example shows how to create a zip file, and add a few files into it. + + String ZipFileToCreate = "archive1.zip"; + String DirectoryToZip = "c:\\reports"; + using (ZipFile zip = new ZipFile()) + { + // Store all files found in the top level directory, into the zip archive. + String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); + zip.AddFiles(filenames); + zip.Save(ZipFileToCreate); + } + + + + Dim ZipFileToCreate As String = "archive1.zip" + Dim DirectoryToZip As String = "c:\reports" + Using zip As ZipFile = New ZipFile + ' Store all files found in the top level directory, into the zip archive. + Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) + zip.AddFiles(filenames) + zip.Save(ZipFileToCreate) + End Using + + + + + + + + Adds or updates a set of files in the ZipFile. + + + + + Any files that already exist in the archive are updated. Any files that + don't yet exist in the archive are added. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to each + ZipEntry added. + + + + + The collection of names of the files to update. Each string should refer to a file in + the filesystem. The name of the file may be a relative path or a fully-qualified path. + + + + + + Adds a set of files to the ZipFile, using the + specified directory path in the archive. + + + + + Any directory structure that may be present in the + filenames contained in the list is "flattened" in the + archive. Each file in the list is added to the archive in + the specified top-level directory. + + + + For ZipFile properties including , , , , , , and , their respective values at the + time of this call will be applied to each ZipEntry added. + + + + + The names of the files to add. Each string should refer to + a file in the filesystem. The name of the file may be a + relative path or a fully-qualified path. + + + + Specifies a directory path to use to override any path in the file name. + Th is path may, or may not, correspond to a real directory in the current + filesystem. If the files within the zip are later extracted, this is the + path used for the extracted file. Passing null (Nothing in + VB) will use the path on each of the fileNames, if any. Passing + the empty string ("") will insert the item at the root path within the + archive. + + + + + + + Adds a set of files to the ZipFile, using the specified directory + path in the archive, and preserving the full directory structure in the + filenames. + + + + + + Think of the as a "root" or + base directory used in the archive for the files that get added. when + is true, the hierarchy of files + found in the filesystem will be placed, with the hierarchy intact, + starting at that root in the archive. When preserveDirHierarchy + is false, the path hierarchy of files is flattned, and the flattened + set of files gets placed in the root within the archive as specified in + directoryPathInArchive. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to each + ZipEntry added. + + + + + + The names of the files to add. Each string should refer to a file in the + filesystem. The name of the file may be a relative path or a + fully-qualified path. + + + + Specifies a directory path to use as a prefix for each entry name. + This path may, or may not, correspond to a real directory in the current + filesystem. If the files within the zip are later extracted, this is the + path used for the extracted file. Passing null (Nothing in + VB) will use the path on each of the fileNames, if any. Passing + the empty string ("") will insert the item at the root path within the + archive. + + + + whether the entries in the zip archive will reflect the directory + hierarchy that is present in the various filenames. For example, if + includes two paths, + \Animalia\Chordata\Mammalia\Info.txt and + \Plantae\Magnoliophyta\Dicotyledon\Info.txt, then calling this method + with = false will + result in an exception because of a duplicate entry name, while + calling this method with = + true will result in the full direcory paths being included in + the entries added to the ZipFile. + + + + + + Adds or updates a set of files to the ZipFile, using the specified + directory path in the archive. + + + + + + Any files that already exist in the archive are updated. Any files that + don't yet exist in the archive are added. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to each + ZipEntry added. + + + + + The names of the files to add or update. Each string should refer to a + file in the filesystem. The name of the file may be a relative path or a + fully-qualified path. + + + + Specifies a directory path to use to override any path in the file name. + This path may, or may not, correspond to a real directory in the current + filesystem. If the files within the zip are later extracted, this is the + path used for the extracted file. Passing null (Nothing in + VB) will use the path on each of the fileNames, if any. Passing + the empty string ("") will insert the item at the root path within the + archive. + + + + + + + Adds or Updates a File in a Zip file archive. + + + + + This method adds a file to a zip archive, or, if the file already exists + in the zip archive, this method Updates the content of that given filename + in the zip archive. The UpdateFile method might more accurately be + called "AddOrUpdateFile". + + + + Upon success, there is no way for the application to learn whether the file + was added versus updated. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + This example shows how to Update an existing entry in a zipfile. The first + call to UpdateFile adds the file to the newly-created zip archive. The + second call to UpdateFile updates the content for that file in the zip + archive. + + + using (ZipFile zip1 = new ZipFile()) + { + // UpdateFile might more accurately be called "AddOrUpdateFile" + zip1.UpdateFile("MyDocuments\\Readme.txt"); + zip1.UpdateFile("CustomerList.csv"); + zip1.Comment = "This zip archive has been created."; + zip1.Save("Content.zip"); + } + + using (ZipFile zip2 = ZipFile.Read("Content.zip")) + { + zip2.UpdateFile("Updates\\Readme.txt"); + zip2.Comment = "This zip archive has been updated: The Readme.txt file has been changed."; + zip2.Save(); + } + + + + Using zip1 As New ZipFile + ' UpdateFile might more accurately be called "AddOrUpdateFile" + zip1.UpdateFile("MyDocuments\Readme.txt") + zip1.UpdateFile("CustomerList.csv") + zip1.Comment = "This zip archive has been created." + zip1.Save("Content.zip") + End Using + + Using zip2 As ZipFile = ZipFile.Read("Content.zip") + zip2.UpdateFile("Updates\Readme.txt") + zip2.Comment = "This zip archive has been updated: The Readme.txt file has been changed." + zip2.Save + End Using + + + + + + + + + The name of the file to add or update. It should refer to a file in the + filesystem. The name of the file may be a relative path or a + fully-qualified path. + + + + The ZipEntry corresponding to the File that was added or updated. + + + + + Adds or Updates a File in a Zip file archive. + + + + + This method adds a file to a zip archive, or, if the file already exists + in the zip archive, this method Updates the content of that given filename + in the zip archive. + + + + This version of the method allows the caller to explicitly specify the + directory path to be used in the archive. The entry to be added or + updated is found by using the specified directory path, combined with the + basename of the specified filename. + + + + Upon success, there is no way for the application to learn if the file was + added versus updated. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + + + The name of the file to add or update. It should refer to a file in the + filesystem. The name of the file may be a relative path or a + fully-qualified path. + + + + Specifies a directory path to use to override any path in the + fileName. This path may, or may not, correspond to a real + directory in the current filesystem. If the files within the zip are + later extracted, this is the path used for the extracted file. Passing + null (Nothing in VB) will use the path on the + fileName, if any. Passing the empty string ("") will insert the + item at the root path within the archive. + + + + The ZipEntry corresponding to the File that was added or updated. + + + + + Add or update a directory in a zip archive. + + + + If the specified directory does not exist in the archive, then this method + is equivalent to calling AddDirectory(). If the specified + directory already exists in the archive, then this method updates any + existing entries, and adds any new entries. Any entries that are in the + zip archive but not in the specified directory, are left alone. In other + words, the contents of the zip file will be a union of the previous + contents and the new files. + + + + + + + + The path to the directory to be added to the zip archive, or updated in + the zip archive. + + + + The ZipEntry corresponding to the Directory that was added or updated. + + + + + Add or update a directory in the zip archive at the specified root + directory in the archive. + + + + If the specified directory does not exist in the archive, then this method + is equivalent to calling AddDirectory(). If the specified + directory already exists in the archive, then this method updates any + existing entries, and adds any new entries. Any entries that are in the + zip archive but not in the specified directory, are left alone. In other + words, the contents of the zip file will be a union of the previous + contents and the new files. + + + + + + + + The path to the directory to be added to the zip archive, or updated + in the zip archive. + + + + Specifies a directory path to use to override any path in the + directoryName. This path may, or may not, correspond to a real + directory in the current filesystem. If the files within the zip are + later extracted, this is the path used for the extracted file. Passing + null (Nothing in VB) will use the path on the + directoryName, if any. Passing the empty string ("") will insert + the item at the root path within the archive. + + + + The ZipEntry corresponding to the Directory that was added or updated. + + + + + Add or update a file or directory in the zip archive. + + + + + This is useful when the application is not sure or does not care if the + item to be added is a file or directory, and does not know or does not + care if the item already exists in the ZipFile. Calling this method + is equivalent to calling RemoveEntry() if an entry by the same name + already exists, followed calling by AddItem(). + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + + + the path to the file or directory to be added or updated. + + + + + Add or update a file or directory. + + + + + This method is useful when the application is not sure or does not care if + the item to be added is a file or directory, and does not know or does not + care if the item already exists in the ZipFile. Calling this method + is equivalent to calling RemoveEntry(), if an entry by that name + exists, and then calling AddItem(). + + + + This version of the method allows the caller to explicitly specify the + directory path to be used for the item being added to the archive. The + entry or entries that are added or updated will use the specified + DirectoryPathInArchive. Extracting the entry from the archive will + result in a file stored in that directory path. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + + + The path for the File or Directory to be added or updated. + + + Specifies a directory path to use to override any path in the + itemName. This path may, or may not, correspond to a real + directory in the current filesystem. If the files within the zip are + later extracted, this is the path used for the extracted file. Passing + null (Nothing in VB) will use the path on the + itemName, if any. Passing the empty string ("") will insert the + item at the root path within the archive. + + + + + Adds a named entry into the zip archive, taking content for the entry + from a string. + + + + Calling this method creates an entry using the given fileName and + directory path within the archive. There is no need for a file by the + given name to exist in the filesystem; the name is used within the zip + archive only. The content for the entry is encoded using the default text + encoding for the machine. + + + + The content of the file, should it be extracted from the zip. + + + + The name, including any path, to use for the entry within the archive. + + + The ZipEntry added. + + + + This example shows how to add an entry to the zipfile, using a string as + content for that entry. + + + string Content = "This string will be the content of the Readme.txt file in the zip archive."; + using (ZipFile zip1 = new ZipFile()) + { + zip1.AddFile("MyDocuments\\Resume.doc", "files"); + zip1.AddEntry("Readme.txt", Content); + zip1.Comment = "This zip file was created at " + System.DateTime.Now.ToString("G"); + zip1.Save("Content.zip"); + } + + + + Public Sub Run() + Dim Content As String = "This string will be the content of the Readme.txt file in the zip archive." + Using zip1 As ZipFile = New ZipFile + zip1.AddEntry("Readme.txt", Content) + zip1.AddFile("MyDocuments\Resume.doc", "files") + zip1.Comment = ("This zip file was created at " & DateTime.Now.ToString("G")) + zip1.Save("Content.zip") + End Using + End Sub + + + + + + Adds a named entry into the zip archive, taking content for the entry + from a string, and using the specified text encoding. + + + + + + Calling this method creates an entry using the given fileName and + directory path within the archive. There is no need for a file by the + given name to exist in the filesystem; the name is used within the zip + archive only. + + + + The content for the entry, a string value, is encoded using the given + text encoding. A BOM (byte-order-mark) is emitted into the file, if the + Encoding parameter is set for that. + + + + Most Encoding classes support a constructor that accepts a boolean, + indicating whether to emit a BOM or not. For example see . + + + + + + The name, including any path, to use within the archive for the entry. + + + + The content of the file, should it be extracted from the zip. + + + + The text encoding to use when encoding the string. Be aware: This is + distinct from the text encoding used to encode the fileName, as specified + in . + + + The ZipEntry added. + + + + + Create an entry in the ZipFile using the given Stream + as input. The entry will have the given filename. + + + + + + The application should provide an open, readable stream; in this case it + will be read during the call to or one of + its overloads. + + + + The passed stream will be read from its current position. If + necessary, callers should set the position in the stream before + calling AddEntry(). This might be appropriate when using this method + with a MemoryStream, for example. + + + + In cases where a large number of streams will be added to the + ZipFile, the application may wish to avoid maintaining all of the + streams open simultaneously. To handle this situation, the application + should use the + overload. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + This example adds a single entry to a ZipFile via a Stream. + + + + String zipToCreate = "Content.zip"; + String fileNameInArchive = "Content-From-Stream.bin"; + using (System.IO.Stream streamToRead = MyStreamOpener()) + { + using (ZipFile zip = new ZipFile()) + { + ZipEntry entry= zip.AddEntry(fileNameInArchive, streamToRead); + zip.AddFile("Readme.txt"); + zip.Save(zipToCreate); // the stream is read implicitly here + } + } + + + + Dim zipToCreate As String = "Content.zip" + Dim fileNameInArchive As String = "Content-From-Stream.bin" + Using streamToRead as System.IO.Stream = MyStreamOpener() + Using zip As ZipFile = New ZipFile() + Dim entry as ZipEntry = zip.AddEntry(fileNameInArchive, streamToRead) + zip.AddFile("Readme.txt") + zip.Save(zipToCreate) '' the stream is read implicitly, here + End Using + End Using + + + + + + + The name, including any path, which is shown in the zip file for the added + entry. + + + The input stream from which to grab content for the file + + The ZipEntry added. + + + + Add a ZipEntry for which content is written directly by the application. + + + + + When the application needs to write the zip entry data, use this + method to add the ZipEntry. For example, in the case that the + application wishes to write the XML representation of a DataSet into + a ZipEntry, the application can use this method to do so. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + About progress events: When using the WriteDelegate, DotNetZip does + not issue any SaveProgress events with EventType = + Saving_EntryBytesRead. (This is because it is the + application's code that runs in WriteDelegate - there's no way for + DotNetZip to know when to issue a EntryBytesRead event.) + Applications that want to update a progress bar or similar status + indicator should do so from within the WriteDelegate + itself. DotNetZip will issue the other SaveProgress events, + including + Saving_Started, + + Saving_BeforeWriteEntry, and + Saving_AfterWriteEntry. + + + + Note: When you use PKZip encryption, it's normally necessary to + compute the CRC of the content to be encrypted, before compressing or + encrypting it. Therefore, when using PKZip encryption with a + WriteDelegate, the WriteDelegate CAN BE called twice: once to compute + the CRC, and the second time to potentially compress and + encrypt. Surprising, but true. This is because PKWARE specified that + the encryption initialization data depends on the CRC. + If this happens, for each call of the delegate, your + application must stream the same entry data in its entirety. If your + application writes different data during the second call, it will + result in a corrupt zip file. + + + + The double-read behavior happens with all types of entries, not only + those that use WriteDelegate. It happens if you add an entry from a + filesystem file, or using a string, or a stream, or an opener/closer + pair. But in those cases, DotNetZip takes care of reading twice; in + the case of the WriteDelegate, the application code gets invoked + twice. Be aware. + + + + As you can imagine, this can cause performance problems for large + streams, and it can lead to correctness problems when you use a + WriteDelegate. This is a pretty big pitfall. There are two + ways to avoid it. First, and most preferred: don't use PKZIP + encryption. If you use the WinZip AES encryption, this problem + doesn't occur, because the encryption protocol doesn't require the CRC + up front. Second: if you do choose to use PKZIP encryption, write out + to a non-seekable stream (like standard output, or the + Response.OutputStream in an ASP.NET application). In this case, + DotNetZip will use an alternative encryption protocol that does not + rely on the CRC of the content. This also implies setting bit 3 in + the zip entry, which still presents problems for some zip tools. + + + + In the future I may modify DotNetZip to *always* use bit 3 when PKZIP + encryption is in use. This seems like a win overall, but there will + be some work involved. If you feel strongly about it, visit the + DotNetZip forums and vote up the Workitem + tracking this issue. + + + + + the name of the entry to add + the delegate which will write the entry content + the ZipEntry added + + + + This example shows an application filling a DataSet, then saving the + contents of that DataSet as XML, into a ZipEntry in a ZipFile, using an + anonymous delegate in C#. The DataSet XML is never saved to a disk file. + + + var c1= new System.Data.SqlClient.SqlConnection(connstring1); + var da = new System.Data.SqlClient.SqlDataAdapter() + { + SelectCommand= new System.Data.SqlClient.SqlCommand(strSelect, c1) + }; + + DataSet ds1 = new DataSet(); + da.Fill(ds1, "Invoices"); + + using(Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile()) + { + zip.AddEntry(zipEntryName, (name,stream) => ds1.WriteXml(stream) ); + zip.Save(zipFileName); + } + + + + + + This example uses an anonymous method in C# as the WriteDelegate to provide + the data for the ZipEntry. The example is a bit contrived - the + AddFile() method is a simpler way to insert the contents of a file + into an entry in a zip file. On the other hand, if there is some sort of + processing or transformation of the file contents required before writing, + the application could use the WriteDelegate to do it, in this way. + + + using (var input = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite )) + { + using(Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile()) + { + zip.AddEntry(zipEntryName, (name,output) => + { + byte[] buffer = new byte[BufferSize]; + int n; + while ((n = input.Read(buffer, 0, buffer.Length)) != 0) + { + // could transform the data here... + output.Write(buffer, 0, n); + // could update a progress bar here + } + }); + + zip.Save(zipFileName); + } + } + + + + + + This example uses a named delegate in VB to write data for the given + ZipEntry (VB9 does not have anonymous delegates). The example here is a bit + contrived - a simpler way to add the contents of a file to a ZipEntry is to + simply use the appropriate AddFile() method. The key scenario for + which the WriteDelegate makes sense is saving a DataSet, in XML + format, to the zip file. The DataSet can write XML to a stream, and the + WriteDelegate is the perfect place to write into the zip file. There may be + other data structures that can write to a stream, but cannot be read as a + stream. The WriteDelegate would be appropriate for those cases as + well. + + + Private Sub WriteEntry (ByVal name As String, ByVal output As Stream) + Using input As FileStream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) + Dim n As Integer = -1 + Dim buffer As Byte() = New Byte(BufferSize){} + Do While n <> 0 + n = input.Read(buffer, 0, buffer.Length) + output.Write(buffer, 0, n) + Loop + End Using + End Sub + + Public Sub Run() + Using zip = New ZipFile + zip.AddEntry(zipEntryName, New WriteDelegate(AddressOf WriteEntry)) + zip.Save(zipFileName) + End Using + End Sub + + + + + + Add an entry, for which the application will provide a stream + containing the entry data, on a just-in-time basis. + + + + + In cases where the application wishes to open the stream that + holds the content for the ZipEntry, on a just-in-time basis, the + application can use this method. The application provides an + opener delegate that will be called by the DotNetZip library to + obtain a readable stream that can be read to get the bytes for + the given entry. Typically, this delegate opens a stream. + Optionally, the application can provide a closer delegate as + well, which will be called by DotNetZip when all bytes have been + read from the entry. + + + + These delegates are called from within the scope of the call to + ZipFile.Save(). + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + This example uses anonymous methods in C# to open and close the + source stream for the content for a zip entry. + + + using(Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile()) + { + zip.AddEntry(zipEntryName, + (name) => File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite ), + (name, stream) => stream.Close() + ); + + zip.Save(zipFileName); + } + + + + + + + This example uses delegates in VB.NET to open and close the + the source stream for the content for a zip entry. VB 9.0 lacks + support for "Sub" lambda expressions, and so the CloseDelegate must + be an actual, named Sub. + + + + Function MyStreamOpener(ByVal entryName As String) As Stream + '' This simply opens a file. You probably want to do somethinig + '' more involved here: open a stream to read from a database, + '' open a stream on an HTTP connection, and so on. + Return File.OpenRead(entryName) + End Function + + Sub MyStreamCloser(entryName As String, stream As Stream) + stream.Close() + End Sub + + Public Sub Run() + Dim dirToZip As String = "fodder" + Dim zipFileToCreate As String = "Archive.zip" + Dim opener As OpenDelegate = AddressOf MyStreamOpener + Dim closer As CloseDelegate = AddressOf MyStreamCloser + Dim numFilestoAdd As Int32 = 4 + Using zip As ZipFile = New ZipFile + Dim i As Integer + For i = 0 To numFilesToAdd - 1 + zip.AddEntry(String.Format("content-{0:000}.txt"), opener, closer) + Next i + zip.Save(zipFileToCreate) + End Using + End Sub + + + + + the name of the entry to add + + the delegate that will be invoked by ZipFile.Save() to get the + readable stream for the given entry. ZipFile.Save() will call + read on this stream to obtain the data for the entry. This data + will then be compressed and written to the newly created zip + file. + + + the delegate that will be invoked to close the stream. This may + be null (Nothing in VB), in which case no call is makde to close + the stream. + + the ZipEntry added + + + + + Updates the given entry in the ZipFile, using the given + string as content for the ZipEntry. + + + + + + Calling this method is equivalent to removing the ZipEntry for + the given file name and directory path, if it exists, and then calling + . See the documentation for + that method for further explanation. The string content is encoded + using the default encoding for the machine. This encoding is distinct + from the encoding used for the filename itself. See + . + + + + + + The name, including any path, to use within the archive for the entry. + + + + The content of the file, should it be extracted from the zip. + + + The ZipEntry added. + + + + + Updates the given entry in the ZipFile, using the given string as + content for the ZipEntry. + + + + Calling this method is equivalent to removing the ZipEntry for the + given file name and directory path, if it exists, and then calling . See the + documentation for that method for further explanation. + + + + The name, including any path, to use within the archive for the entry. + + + + The content of the file, should it be extracted from the zip. + + + + The text encoding to use when encoding the string. Be aware: This is + distinct from the text encoding used to encode the filename. See . + + + The ZipEntry added. + + + + + Updates the given entry in the ZipFile, using the given delegate + as the source for content for the ZipEntry. + + + + Calling this method is equivalent to removing the ZipEntry for the + given file name and directory path, if it exists, and then calling . See the + documentation for that method for further explanation. + + + + The name, including any path, to use within the archive for the entry. + + + the delegate which will write the entry content. + + The ZipEntry added. + + + + + Updates the given entry in the ZipFile, using the given delegates + to open and close the stream that provides the content for the ZipEntry. + + + + Calling this method is equivalent to removing the ZipEntry for the + given file name and directory path, if it exists, and then calling . See the + documentation for that method for further explanation. + + + + The name, including any path, to use within the archive for the entry. + + + + the delegate that will be invoked to open the stream + + + the delegate that will be invoked to close the stream + + + The ZipEntry added or updated. + + + + + Updates the given entry in the ZipFile, using the given stream as + input, and the given filename and given directory Path. + + + + + Calling the method is equivalent to calling RemoveEntry() if an + entry by the same name already exists, and then calling AddEntry() + with the given fileName and stream. + + + + The stream must be open and readable during the call to + ZipFile.Save. You can dispense the stream on a just-in-time basis + using the property. Check the + documentation of that property for more information. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + + + The name, including any path, to use within the archive for the entry. + + + The input stream from which to read file data. + The ZipEntry added. + + + + Add an entry into the zip archive using the given filename and + directory path within the archive, and the given content for the + file. No file is created in the filesystem. + + + The data to use for the entry. + + + The name, including any path, to use within the archive for the entry. + + + The ZipEntry added. + + + + Updates the given entry in the ZipFile, using the given byte + array as content for the entry. + + + + Calling this method is equivalent to removing the ZipEntry + for the given filename and directory path, if it exists, and then + calling . See the + documentation for that method for further explanation. + + + + The name, including any path, to use within the archive for the entry. + + + The content to use for the ZipEntry. + + The ZipEntry added. + + + + + Adds the contents of a filesystem directory to a Zip file archive. + + + + + + The name of the directory may be a relative path or a fully-qualified + path. Any files within the named directory are added to the archive. Any + subdirectories within the named directory are also added to the archive, + recursively. + + + + Top-level entries in the named directory will appear as top-level entries + in the zip archive. Entries in subdirectories in the named directory will + result in entries in subdirectories in the zip archive. + + + + If you want the entries to appear in a containing directory in the zip + archive itself, then you should call the AddDirectory() overload that + allows you to explicitly specify a directory path for use in the archive. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to each + ZipEntry added. + + + + + + + + + + This method has 2 overloads. + + The name of the directory to add. + The ZipEntry added. + + + + Adds the contents of a filesystem directory to a Zip file archive, + overriding the path to be used for entries in the archive. + + + + + The name of the directory may be a relative path or a fully-qualified + path. The add operation is recursive, so that any files or subdirectories + within the name directory are also added to the archive. + + + + Top-level entries in the named directory will appear as top-level entries + in the zip archive. Entries in subdirectories in the named directory will + result in entries in subdirectories in the zip archive. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to each + ZipEntry added. + + + + + + + In this code, calling the ZipUp() method with a value of "c:\reports" for + the directory parameter will result in a zip file structure in which all + entries are contained in a toplevel "reports" directory. + + + + public void ZipUp(string targetZip, string directory) + { + using (var zip = new ZipFile()) + { + zip.AddDirectory(directory, System.IO.Path.GetFileName(directory)); + zip.Save(targetZip); + } + } + + + + + + + + The name of the directory to add. + + + Specifies a directory path to use to override any path in the + DirectoryName. This path may, or may not, correspond to a real directory + in the current filesystem. If the zip is later extracted, this is the + path used for the extracted file or directory. Passing null + (Nothing in VB) or the empty string ("") will insert the items at + the root path within the archive. + + + The ZipEntry added. + + + + Creates a directory in the zip archive. + + + + + + Use this when you want to create a directory in the archive but there is + no corresponding filesystem representation for that directory. + + + + You will probably not need to do this in your code. One of the only times + you will want to do this is if you want an empty directory in the zip + archive. The reason: if you add a file to a zip archive that is stored + within a multi-level directory, all of the directory tree is implicitly + created in the zip archive. + + + + + + The name of the directory to create in the archive. + + The ZipEntry added. + + + + Checks a zip file to see if its directory is consistent. + + + + + + In cases of data error, the directory within a zip file can get out + of synch with the entries in the zip file. This method checks the + given zip file and returns true if this has occurred. + + + This method may take a long time to run for large zip files. + + + This method is not supported in the Reduced version of DotNetZip. + + + + Developers using COM can use the ComHelper.CheckZip(String) + method. + + + + + The filename to of the zip file to check. + + true if the named zip file checks OK. Otherwise, false. + + + + + + + Checks a zip file to see if its directory is consistent, + and optionally fixes the directory if necessary. + + + + + + In cases of data error, the directory within a zip file can get out of + synch with the entries in the zip file. This method checks the given + zip file, and returns true if this has occurred. It also optionally + fixes the zipfile, saving the fixed copy in Name_Fixed.zip. + + + + This method may take a long time to run for large zip files. It + will take even longer if the file actually needs to be fixed, and if + fixIfNecessary is true. + + + + This method is not supported in the Reduced version of DotNetZip. + + + + + The filename to of the zip file to check. + + If true, the method will fix the zip file if + necessary. + + + a TextWriter in which messages generated while checking will be written. + + + true if the named zip is OK; false if the file needs to be fixed. + + + + + + + Rewrite the directory within a zipfile. + + + + + + In cases of data error, the directory in a zip file can get out of + synch with the entries in the zip file. This method attempts to fix + the zip file if this has occurred. + + + This can take a long time for large zip files. + + This won't work if the zip file uses a non-standard + code page - neither IBM437 nor UTF-8. + + + This method is not supported in the Reduced or Compact Framework + versions of DotNetZip. + + + + Developers using COM can use the ComHelper.FixZipDirectory(String) + method. + + + + + The filename to of the zip file to fix. + + + + + + + Verify the password on a zip file. + + + + + Keep in mind that passwords in zipfiles are applied to + zip entries, not to the entire zip file. So testing a + zipfile for a particular password doesn't work in the + general case. On the other hand, it's often the case + that a single password will be used on all entries in a + zip file. This method works for that case. + + + There is no way to check a password without doing the + decryption. So this code decrypts and extracts the given + zipfile into + + + + The filename to of the zip file to fix. + + The password to check. + + a bool indicating whether the password matches. + + + + Provides a human-readable string with information about the ZipFile. + + + + + The information string contains 10 lines or so, about each ZipEntry, + describing whether encryption is in use, the compressed and uncompressed + length of the entry, the offset of the entry, and so on. As a result the + information string can be very long for zip files that contain many + entries. + + + This information is mostly useful for diagnostic purposes. + + + + + + Indicates whether to perform a full scan of the zip file when reading it. + + + + + + You almost never want to use this property. + + + + When reading a zip file, if this flag is true (True in + VB), the entire zip archive will be scanned and searched for entries. + For large archives, this can take a very, long time. The much more + efficient default behavior is to read the zip directory, which is + stored at the end of the zip file. But, in some cases the directory is + corrupted and you need to perform a full scan of the zip file to + determine the contents of the zip file. This property lets you do + that, when necessary. + + + + This flag is effective only when calling . Normally you would read a ZipFile with the + static ZipFile.Read + method. But you can't set the FullScan property on the + ZipFile instance when you use a static factory method like + ZipFile.Read. + + + + + + + This example shows how to read a zip file using the full scan approach, + and then save it, thereby producing a corrected zip file. + + + using (var zip = new ZipFile()) + { + zip.FullScan = true; + zip.Initialize(zipFileName); + zip.Save(newName); + } + + + + Using zip As New ZipFile + zip.FullScan = True + zip.Initialize(zipFileName) + zip.Save(newName) + End Using + + + + + + + Whether to sort the ZipEntries before saving the file. + + + + The default is false. If you have a large number of zip entries, the sort + alone can consume significant time. + + + + + using (var zip = new ZipFile()) + { + zip.AddFiles(filesToAdd); + zip.SortEntriesBeforeSaving = true; + zip.Save(name); + } + + + + Using zip As New ZipFile + zip.AddFiles(filesToAdd) + zip.SortEntriesBeforeSaving = True + zip.Save(name) + End Using + + + + + + + Indicates whether NTFS Reparse Points, like junctions, should be + traversed during calls to AddDirectory(). + + + + By default, calls to AddDirectory() will traverse NTFS reparse + points, like mounted volumes, and directory junctions. An example + of a junction is the "My Music" directory in Windows Vista. In some + cases you may not want DotNetZip to traverse those directories. In + that case, set this property to false. + + + + + using (var zip = new ZipFile()) + { + zip.AddDirectoryWillTraverseReparsePoints = false; + zip.AddDirectory(dirToZip,"fodder"); + zip.Save(zipFileToCreate); + } + + + + + + Size of the IO buffer used while saving. + + + + + + First, let me say that you really don't need to bother with this. It is + here to allow for optimizations that you probably won't make! It will work + fine if you don't set or get this property at all. Ok? + + + + Now that we have that out of the way, the fine print: This + property affects the size of the buffer that is used for I/O for each + entry contained in the zip file. When a file is read in to be compressed, + it uses a buffer given by the size here. When you update a zip file, the + data for unmodified entries is copied from the first zip file to the + other, through a buffer given by the size here. + + + + Changing the buffer size affects a few things: first, for larger buffer + sizes, the memory used by the ZipFile, obviously, will be larger + during I/O operations. This may make operations faster for very much + larger files. Last, for any given entry, when you use a larger buffer + there will be fewer progress events during I/O operations, because there's + one progress event generated for each time the buffer is filled and then + emptied. + + + + The default buffer size is 8k. Increasing the buffer size may speed + things up as you compress larger files. But there are no hard-and-fast + rules here, eh? You won't know til you test it. And there will be a + limit where ever larger buffers actually slow things down. So as I said + in the beginning, it's probably best if you don't set or get this property + at all. + + + + + + This example shows how you might set a large buffer size for efficiency when + dealing with zip entries that are larger than 1gb. + + using (ZipFile zip = new ZipFile()) + { + zip.SaveProgress += this.zip1_SaveProgress; + zip.AddDirectory(directoryToZip, ""); + zip.UseZip64WhenSaving = Zip64Option.Always; + zip.BufferSize = 65536*8; // 65536 * 8 = 512k + zip.Save(ZipFileToCreate); + } + + + + + + Size of the work buffer to use for the ZLIB codec during compression. + + + + + When doing ZLIB or Deflate compression, the library fills a buffer, + then passes it to the compressor for compression. Then the library + reads out the compressed bytes. This happens repeatedly until there + is no more uncompressed data to compress. This property sets the + size of the buffer that will be used for chunk-wise compression. In + order for the setting to take effect, your application needs to set + this property before calling one of the ZipFile.Save() + overloads. + + + Setting this affects the performance and memory efficiency of + compression and decompression. For larger files, setting this to a + larger size may improve compression performance, but the exact + numbers vary depending on available memory, the size of the streams + you are compressing, and a bunch of other variables. I don't have + good firm recommendations on how to set it. You'll have to test it + yourself. Or just leave it alone and accept the default. + + + + + + Indicates whether extracted files should keep their paths as + stored in the zip archive. + + + + + This property affects Extraction. It is not used when creating zip + archives. + + + + With this property set to false, the default, extracting entries + from a zip file will create files in the filesystem that have the full + path associated to the entry within the zip file. With this property set + to true, extracting entries from the zip file results in files + with no path: the folders are "flattened." + + + + An example: suppose the zip file contains entries /directory1/file1.txt and + /directory2/file2.txt. With FlattenFoldersOnExtract set to false, + the files created will be \directory1\file1.txt and \directory2\file2.txt. + With the property set to true, the files created are file1.txt and file2.txt. + + + + + + + The compression strategy to use for all entries. + + + + Set the Strategy used by the ZLIB-compatible compressor, when + compressing entries using the DEFLATE method. Different compression + strategies work better on different sorts of data. The strategy + parameter can affect the compression ratio and the speed of + compression but not the correctness of the compresssion. For more + information see Ionic.Zlib.CompressionStrategy. + + + + + The name of the ZipFile, on disk. + + + + + + When the ZipFile instance was created by reading an archive using + one of the ZipFile.Read methods, this property represents the name + of the zip file that was read. When the ZipFile instance was + created by using the no-argument constructor, this value is null + (Nothing in VB). + + + + If you use the no-argument constructor, and you then explicitly set this + property, when you call , this name will + specify the name of the zip file created. Doing so is equivalent to + calling . When instantiating a + ZipFile by reading from a stream or byte array, the Name + property remains null. When saving to a stream, the Name + property is implicitly set to null. + + + + + + Sets the compression level to be used for entries subsequently added to + the zip archive. + + + + + Varying the compression level used on entries can affect the + size-vs-speed tradeoff when compression and decompressing data streams + or files. + + + + As with some other properties on the ZipFile class, like , , and , setting this property on a ZipFile + instance will cause the specified CompressionLevel to be used on all + items that are subsequently added to the + ZipFile instance. If you set this property after you have added + items to the ZipFile, but before you have called Save(), + those items will not use the specified compression level. + + + + If you do not set this property, the default compression level is used, + which normally gives a good balance of compression efficiency and + compression speed. In some tests, using BestCompression can + double the time it takes to compress, while delivering just a small + increase in compression efficiency. This behavior will vary with the + type of data you compress. If you are in doubt, just leave this setting + alone, and accept the default. + + + + + + The compression method for the zipfile. + + + + By default, the compression method is CompressionMethod.Deflate. + + + + + + + A comment attached to the zip archive. + + + + + + This property is read/write. It allows the application to specify a + comment for the ZipFile, or read the comment for the + ZipFile. After setting this property, changes are only made + permanent when you call a Save() method. + + + + According to PKWARE's + zip specification, the comment is not encrypted, even if there is a + password set on the zip file. + + + + The specification does not describe how to indicate the encoding used + on a comment string. Many "compliant" zip tools and libraries use + IBM437 as the code page for comments; DotNetZip, too, follows that + practice. On the other hand, there are situations where you want a + Comment to be encoded with something else, for example using code page + 950 "Big-5 Chinese". To fill that need, DotNetZip will encode the + comment following the same procedure it follows for encoding + filenames: (a) if is + Never, it uses the default encoding (IBM437). (b) if is Always, it always uses the + alternate encoding (). (c) if is AsNecessary, it uses the + alternate encoding only if the default encoding is not sufficient for + encoding the comment - in other words if decoding the result does not + produce the original string. This decision is taken at the time of + the call to ZipFile.Save(). + + + + When creating a zip archive using this library, it is possible to change + the value of between each + entry you add, and between adding entries and the call to + Save(). Don't do this. It will likely result in a zip file that is + not readable by any tool or application. For best interoperability, leave + alone, or specify it only + once, before adding any entries to the ZipFile instance. + + + + + + + Specifies whether the Creation, Access, and Modified times for entries + added to the zip file will be emitted in “Windows format” + when the zip archive is saved. + + + + + An application creating a zip archive can use this flag to explicitly + specify that the file times for the entries should or should not be stored + in the zip archive in the format used by Windows. By default this flag is + true, meaning the Windows-format times are stored in the zip + archive. + + + + When adding an entry from a file or directory, the Creation (), Access (), and Modified () times for the given entry are + automatically set from the filesystem values. When adding an entry from a + stream or string, all three values are implicitly set to + DateTime.Now. Applications can also explicitly set those times by + calling . + + + + PKWARE's + zip specification describes multiple ways to format these times in a + zip file. One is the format Windows applications normally use: 100ns ticks + since January 1, 1601 UTC. The other is a format Unix applications typically + use: seconds since January 1, 1970 UTC. Each format can be stored in an + "extra field" in the zip entry when saving the zip archive. The former + uses an extra field with a Header Id of 0x000A, while the latter uses a + header ID of 0x5455, although you probably don't need to know that. + + + + Not all tools and libraries can interpret these fields. Windows + compressed folders is one that can read the Windows Format timestamps, + while I believe the Infozip + tools can read the Unix format timestamps. Some tools and libraries + may be able to read only one or the other. DotNetZip can read or write + times in either or both formats. + + + + The times stored are taken from , , and . + + + + The value set here applies to all entries subsequently added to the + ZipFile. + + + + This property is not mutually exclusive of the property. It is possible and + legal and valid to produce a zip file that contains timestamps encoded in + the Unix format as well as in the Windows format, in addition to the LastModified time attached to each + entry in the archive, a time that is always stored in "DOS format". And, + notwithstanding the names PKWare uses for these time formats, any of them + can be read and written by any computer, on any operating system. But, + there are no guarantees that a program running on Mac or Linux will + gracefully handle a zip file with "Windows" formatted times, or that an + application that does not use DotNetZip but runs on Windows will be able to + handle file times in Unix format. + + + + When in doubt, test. Sorry, I haven't got a complete list of tools and + which sort of timestamps they can use and will tolerate. If you get any + good information and would like to pass it on, please do so and I will + include that information in this documentation. + + + + + This example shows how to save a zip file that contains file timestamps + in a format normally used by Unix. + + using (var zip = new ZipFile()) + { + // produce a zip file the Mac will like + zip.EmitTimesInWindowsFormatWhenSaving = false; + zip.EmitTimesInUnixFormatWhenSaving = true; + zip.AddDirectory(directoryToZip, "files"); + zip.Save(outputFile); + } + + + + Using zip As New ZipFile + '' produce a zip file the Mac will like + zip.EmitTimesInWindowsFormatWhenSaving = False + zip.EmitTimesInUnixFormatWhenSaving = True + zip.AddDirectory(directoryToZip, "files") + zip.Save(outputFile) + End Using + + + + + + + + + Specifies whether the Creation, Access, and Modified times + for entries added to the zip file will be emitted in "Unix(tm) + format" when the zip archive is saved. + + + + + An application creating a zip archive can use this flag to explicitly + specify that the file times for the entries should or should not be stored + in the zip archive in the format used by Unix. By default this flag is + false, meaning the Unix-format times are not stored in the zip + archive. + + + + When adding an entry from a file or directory, the Creation (), Access (), and Modified () times for the given entry are + automatically set from the filesystem values. When adding an entry from a + stream or string, all three values are implicitly set to DateTime.Now. + Applications can also explicitly set those times by calling . + + + + PKWARE's + zip specification describes multiple ways to format these times in a + zip file. One is the format Windows applications normally use: 100ns ticks + since January 1, 1601 UTC. The other is a format Unix applications + typically use: seconds since January 1, 1970 UTC. Each format can be + stored in an "extra field" in the zip entry when saving the zip + archive. The former uses an extra field with a Header Id of 0x000A, while + the latter uses a header ID of 0x5455, although you probably don't need to + know that. + + + + Not all tools and libraries can interpret these fields. Windows + compressed folders is one that can read the Windows Format timestamps, + while I believe the Infozip + tools can read the Unix format timestamps. Some tools and libraries may be + able to read only one or the other. DotNetZip can read or write times in + either or both formats. + + + + The times stored are taken from , , and . + + + + This property is not mutually exclusive of the property. It is possible and + legal and valid to produce a zip file that contains timestamps encoded in + the Unix format as well as in the Windows format, in addition to the LastModified time attached to each + entry in the zip archive, a time that is always stored in "DOS + format". And, notwithstanding the names PKWare uses for these time + formats, any of them can be read and written by any computer, on any + operating system. But, there are no guarantees that a program running on + Mac or Linux will gracefully handle a zip file with "Windows" formatted + times, or that an application that does not use DotNetZip but runs on + Windows will be able to handle file times in Unix format. + + + + When in doubt, test. Sorry, I haven't got a complete list of tools and + which sort of timestamps they can use and will tolerate. If you get any + good information and would like to pass it on, please do so and I will + include that information in this documentation. + + + + + + + + + Indicates whether verbose output is sent to the during AddXxx() and + ReadXxx() operations. + + + + This is a synthetic property. It returns true if the is non-null. + + + + + Returns true if an entry by the given name exists in the ZipFile. + + + the name of the entry to find + true if an entry with the given name exists; otherwise false. + + + + + Indicates whether to perform case-sensitive matching on the filename when + retrieving entries in the zipfile via the string-based indexer. + + + + The default value is false, which means don't do case-sensitive + matching. In other words, retrieving zip["ReadMe.Txt"] is the same as + zip["readme.txt"]. It really makes sense to set this to true only + if you are not running on Windows, which has case-insensitive + filenames. But since this library is not built for non-Windows platforms, + in most cases you should just leave this property alone. + + + + + Indicates whether to ignore duplicate files (report only the first entry) + when loading a zipfile. + + + + The default value is false, which will try to make all files + available (duplicates will have a "copy" suffix appended to their name). + Setting this to true prior to using Initialize to read a + zipfile will prevent this and instead just ignore the duplicates. + + + + + Indicates whether to encode entry filenames and entry comments using Unicode + (UTF-8). + + + + + The + PKWare zip specification provides for encoding file names and file + comments in either the IBM437 code page, or in UTF-8. This flag selects + the encoding according to that specification. By default, this flag is + false, and filenames and comments are encoded into the zip file in the + IBM437 codepage. Setting this flag to true will specify that filenames + and comments that cannot be encoded with IBM437 will be encoded with + UTF-8. + + + + Zip files created with strict adherence to the PKWare specification with + respect to UTF-8 encoding can contain entries with filenames containing + any combination of Unicode characters, including the full range of + characters from Chinese, Latin, Hebrew, Greek, Cyrillic, and many other + alphabets. However, because at this time, the UTF-8 portion of the PKWare + specification is not broadly supported by other zip libraries and + utilities, such zip files may not be readable by your favorite zip tool or + archiver. In other words, interoperability will decrease if you set this + flag to true. + + + + In particular, Zip files created with strict adherence to the PKWare + specification with respect to UTF-8 encoding will not work well with + Explorer in Windows XP or Windows Vista, because Windows compressed + folders, as far as I know, do not support UTF-8 in zip files. Vista can + read the zip files, but shows the filenames incorrectly. Unpacking from + Windows Vista Explorer will result in filenames that have rubbish + characters in place of the high-order UTF-8 bytes. + + + + Also, zip files that use UTF-8 encoding will not work well with Java + applications that use the java.util.zip classes, as of v5.0 of the Java + runtime. The Java runtime does not correctly implement the PKWare + specification in this regard. + + + + As a result, we have the unfortunate situation that "correct" behavior by + the DotNetZip library with regard to Unicode encoding of filenames during + zip creation will result in zip files that are readable by strictly + compliant and current tools (for example the most recent release of the + commercial WinZip tool); but these zip files will not be readable by + various other tools or libraries, including Windows Explorer. + + + + The DotNetZip library can read and write zip files with UTF8-encoded + entries, according to the PKware spec. If you use DotNetZip for both + creating and reading the zip file, and you use UTF-8, there will be no + loss of information in the filenames. For example, using a self-extractor + created by this library will allow you to unpack files correctly with no + loss of information in the filenames. + + + + If you do not set this flag, it will remain false. If this flag is false, + your ZipFile will encode all filenames and comments using the + IBM437 codepage. This can cause "loss of information" on some filenames, + but the resulting zipfile will be more interoperable with other + utilities. As an example of the loss of information, diacritics can be + lost. The o-tilde character will be down-coded to plain o. The c with a + cedilla (Unicode 0xE7) used in Portugese will be downcoded to a c. + Likewise, the O-stroke character (Unicode 248), used in Danish and + Norwegian, will be down-coded to plain o. Chinese characters cannot be + represented in codepage IBM437; when using the default encoding, Chinese + characters in filenames will be represented as ?. These are all examples + of "information loss". + + + + The loss of information associated to the use of the IBM437 encoding is + inconvenient, and can also lead to runtime errors. For example, using + IBM437, any sequence of 4 Chinese characters will be encoded as ????. If + your application creates a ZipFile, then adds two files, each with + names of four Chinese characters each, this will result in a duplicate + filename exception. In the case where you add a single file with a name + containing four Chinese characters, calling Extract() on the entry that + has question marks in the filename will result in an exception, because + the question mark is not legal for use within filenames on Windows. These + are just a few examples of the problems associated to loss of information. + + + + This flag is independent of the encoding of the content within the entries + in the zip file. Think of the zip file as a container - it supports an + encoding. Within the container are other "containers" - the file entries + themselves. The encoding within those entries is independent of the + encoding of the zip archive container for those entries. + + + + Rather than specify the encoding in a binary fashion using this flag, an + application can specify an arbitrary encoding via the property. Setting the encoding + explicitly when creating zip archives will result in non-compliant zip + files that, curiously, are fairly interoperable. The challenge is, the + PKWare specification does not provide for a way to specify that an entry + in a zip archive uses a code page that is neither IBM437 nor UTF-8. + Therefore if you set the encoding explicitly when creating a zip archive, + you must take care upon reading the zip archive to use the same code page. + If you get it wrong, the behavior is undefined and may result in incorrect + filenames, exceptions, stomach upset, hair loss, and acne. + + + + + + + Specify whether to use ZIP64 extensions when saving a zip archive. + + + + + + When creating a zip file, the default value for the property is . is + safest, in the sense that you will not get an Exception if a pre-ZIP64 + limit is exceeded. + + + + You may set the property at any time before calling Save(). + + + + When reading a zip file via the Zipfile.Read() method, DotNetZip + will properly read ZIP64-endowed zip archives, regardless of the value of + this property. DotNetZip will always read ZIP64 archives. This property + governs only whether DotNetZip will write them. Therefore, when updating + archives, be careful about setting this property after reading an archive + that may use ZIP64 extensions. + + + + An interesting question is, if you have set this property to + AsNecessary, and then successfully saved, does the resulting + archive use ZIP64 extensions or not? To learn this, check the property, after calling Save(). + + + + Have you thought about + donating? + + + + + + + + Indicates whether the archive requires ZIP64 extensions. + + + + + + This property is null (or Nothing in VB) if the archive has + not been saved, and there are fewer than 65334 ZipEntry items + contained in the archive. + + + + The Value is true if any of the following four conditions holds: + the uncompressed size of any entry is larger than 0xFFFFFFFF; the + compressed size of any entry is larger than 0xFFFFFFFF; the relative + offset of any entry within the zip archive is larger than 0xFFFFFFFF; or + there are more than 65534 entries in the archive. (0xFFFFFFFF = + 4,294,967,295). The result may not be known until a Save() is attempted + on the zip archive. The Value of this + property may be set only AFTER one of the Save() methods has been called. + + + + If none of the four conditions holds, and the archive has been saved, then + the Value is false. + + + + A Value of false does not indicate that the zip archive, as saved, + does not use ZIP64. It merely indicates that ZIP64 is not required. An + archive may use ZIP64 even when not required if the property is set to , or if the property is set to and the output stream was not + seekable. Use the property to determine if + the most recent Save() method resulted in an archive that utilized + the ZIP64 extensions. + + + + + + + + + Indicates whether the most recent Save() operation used ZIP64 extensions. + + + + + The use of ZIP64 extensions within an archive is not always necessary, and + for interoperability concerns, it may be desired to NOT use ZIP64 if + possible. The property can be + set to use ZIP64 extensions only when necessary. In those cases, + Sometimes applications want to know whether a Save() actually used ZIP64 + extensions. Applications can query this read-only property to learn + whether ZIP64 has been used in a just-saved ZipFile. + + + + The value is null (or Nothing in VB) if the archive has not + been saved. + + + + Non-null values (HasValue is true) indicate whether ZIP64 + extensions were used during the most recent Save() operation. The + ZIP64 extensions may have been used as required by any particular entry + because of its uncompressed or compressed size, or because the archive is + larger than 4294967295 bytes, or because there are more than 65534 entries + in the archive, or because the UseZip64WhenSaving property was set + to , or because the + UseZip64WhenSaving property was set to and the output stream was not seekable. + The value of this property does not indicate the reason the ZIP64 + extensions were used. + + + + + + + + + Indicates whether the most recent Read() operation read a zip file that uses + ZIP64 extensions. + + + + This property will return null (Nothing in VB) if you've added an entry after reading + the zip file. + + + + + The text encoding to use when writing new entries to the ZipFile, + for those entries that cannot be encoded with the default (IBM437) + encoding; or, the text encoding that was used when reading the entries + from the ZipFile. + + + + + In its + zip specification, PKWare describes two options for encoding + filenames and comments: using IBM437 or UTF-8. But, some archiving tools + or libraries do not follow the specification, and instead encode + characters using the system default code page. For example, WinRAR when + run on a machine in Shanghai may encode filenames with the Big-5 Chinese + (950) code page. This behavior is contrary to the Zip specification, but + it occurs anyway. + + + + When using DotNetZip to write zip archives that will be read by one of + these other archivers, set this property to specify the code page to use + when encoding the and for each ZipEntry in the zip file, for + values that cannot be encoded with the default codepage for zip files, + IBM437. This is why this property is "provisional". In all cases, IBM437 + is used where possible, in other words, where no loss of data would + result. It is possible, therefore, to have a given entry with a + Comment encoded in IBM437 and a FileName encoded with the + specified "provisional" codepage. + + + + Be aware that a zip file created after you've explicitly set the property to a value other than + IBM437 may not be compliant to the PKWare specification, and may not be + readable by compliant archivers. On the other hand, many (most?) + archivers are non-compliant and can read zip files created in arbitrary + code pages. The trick is to use or specify the proper codepage when + reading the zip. + + + + When creating a zip archive using this library, it is possible to change + the value of between each + entry you add, and between adding entries and the call to + Save(). Don't do this. It will likely result in a zipfile that is + not readable. For best interoperability, either leave alone, or specify it only once, + before adding any entries to the ZipFile instance. There is one + exception to this recommendation, described later. + + + + When using an arbitrary, non-UTF8 code page for encoding, there is no + standard way for the creator application - whether DotNetZip, WinZip, + WinRar, or something else - to formally specify in the zip file which + codepage has been used for the entries. As a result, readers of zip files + are not able to inspect the zip file and determine the codepage that was + used for the entries contained within it. It is left to the application + or user to determine the necessary codepage when reading zip files encoded + this way. In other words, if you explicitly specify the codepage when you + create the zipfile, you must explicitly specify the same codepage when + reading the zipfile. + + + + The way you specify the code page to use when reading a zip file varies + depending on the tool or library you use to read the zip. In DotNetZip, + you use a ZipFile.Read() method that accepts an encoding parameter. It + isn't possible with Windows Explorer, as far as I know, to specify an + explicit codepage to use when reading a zip. If you use an incorrect + codepage when reading a zipfile, you will get entries with filenames that + are incorrect, and the incorrect filenames may even contain characters + that are not legal for use within filenames in Windows. Extracting entries + with illegal characters in the filenames will lead to exceptions. It's too + bad, but this is just the way things are with code pages in zip + files. Caveat Emptor. + + + + Example: Suppose you create a zipfile that contains entries with + filenames that have Danish characters. If you use equal to "iso-8859-1" (cp 28591), + the filenames will be correctly encoded in the zip. But, to read that + zipfile correctly, you have to specify the same codepage at the time you + read it. If try to read that zip file with Windows Explorer or another + application that is not flexible with respect to the codepage used to + decode filenames in zipfiles, you will get a filename like "Inf�.txt". + + + + When using DotNetZip to read a zip archive, and the zip archive uses an + arbitrary code page, you must specify the encoding to use before or when + the Zipfile is READ. This means you must use a ZipFile.Read() + method that allows you to specify a System.Text.Encoding parameter. Setting + the ProvisionalAlternateEncoding property after your application has read in + the zip archive will not affect the entry names of entries that have already + been read in. + + + + And now, the exception to the rule described above. One strategy for + specifying the code page for a given zip file is to describe the code page + in a human-readable form in the Zip comment. For example, the comment may + read "Entries in this archive are encoded in the Big5 code page". For + maximum interoperability, the zip comment in this case should be encoded + in the default, IBM437 code page. In this case, the zip comment is + encoded using a different page than the filenames. To do this, Specify + ProvisionalAlternateEncoding to your desired region-specific code + page, once before adding any entries, and then reset + ProvisionalAlternateEncoding to IBM437 before setting the property and calling Save(). + + + + + This example shows how to read a zip file using the Big-5 Chinese code page + (950), and extract each entry in the zip file. For this code to work as + desired, the Zipfile must have been created using the big5 code page + (CP950). This is typical, for example, when using WinRar on a machine with + CP950 set as the default code page. In that case, the names of entries + within the Zip archive will be stored in that code page, and reading the zip + archive must be done using that code page. If the application did not use + the correct code page in ZipFile.Read(), then names of entries within the + zip archive would not be correctly retrieved. + + using (var zip = ZipFile.Read(zipFileName, System.Text.Encoding.GetEncoding("big5"))) + { + // retrieve and extract an entry using a name encoded with CP950 + zip[MyDesiredEntry].Extract("unpack"); + } + + + + Using zip As ZipFile = ZipFile.Read(ZipToExtract, System.Text.Encoding.GetEncoding("big5")) + ' retrieve and extract an entry using a name encoded with CP950 + zip(MyDesiredEntry).Extract("unpack") + End Using + + + + DefaultEncoding + + + + A Text Encoding to use when encoding the filenames and comments for + all the ZipEntry items, during a ZipFile.Save() operation. + + + + Whether the encoding specified here is used during the save depends + on . + + + + + + A flag that tells if and when this instance should apply + AlternateEncoding to encode the filenames and comments associated to + of ZipEntry objects contained within this instance. + + + + + Gets or sets the TextWriter to which status messages are delivered + for the instance. + + + + If the TextWriter is set to a non-null value, then verbose output is sent + to the TextWriter during Add, Read, Save and + Extract operations. Typically, console applications might use + Console.Out and graphical or headless applications might use a + System.IO.StringWriter. The output of this is suitable for viewing + by humans. + + + + + In this example, a console application instantiates a ZipFile, then + sets the StatusMessageTextWriter to Console.Out. At that + point, all verbose status messages for that ZipFile are sent to the + console. + + + + using (ZipFile zip= ZipFile.Read(FilePath)) + { + zip.StatusMessageTextWriter= System.Console.Out; + // messages are sent to the console during extraction + zip.ExtractAll(); + } + + + + Using zip As ZipFile = ZipFile.Read(FilePath) + zip.StatusMessageTextWriter= System.Console.Out + 'Status Messages will be sent to the console during extraction + zip.ExtractAll() + End Using + + + + In this example, a Windows Forms application instantiates a + ZipFile, then sets the StatusMessageTextWriter to a + StringWriter. At that point, all verbose status messages for that + ZipFile are sent to the StringWriter. + + + + var sw = new System.IO.StringWriter(); + using (ZipFile zip= ZipFile.Read(FilePath)) + { + zip.StatusMessageTextWriter= sw; + zip.ExtractAll(); + } + Console.WriteLine("{0}", sw.ToString()); + + + + Dim sw as New System.IO.StringWriter + Using zip As ZipFile = ZipFile.Read(FilePath) + zip.StatusMessageTextWriter= sw + zip.ExtractAll() + End Using + 'Status Messages are now available in sw + + + + + + + Gets or sets the name for the folder to store the temporary file + this library writes when saving a zip archive. + + + + + This library will create a temporary file when saving a Zip archive to a + file. This file is written when calling one of the Save() methods + that does not save to a stream, or one of the SaveSelfExtractor() + methods. + + + + By default, the library will create the temporary file in the directory + specified for the file itself, via the property or via + the method. + + + + Setting this property allows applications to override this default + behavior, so that the library will create the temporary file in the + specified folder. For example, to have the library create the temporary + file in the current working directory, regardless where the ZipFile + is saved, specfy ".". To revert to the default behavior, set this + property to null (Nothing in VB). + + + + When setting the property to a non-null value, the folder specified must + exist; if it does not an exception is thrown. The application should have + write and delete permissions on the folder. The permissions are not + explicitly checked ahead of time; if the application does not have the + appropriate rights, an exception will be thrown at the time Save() + is called. + + + + There is no temporary file created when reading a zip archive. When + saving to a Stream, there is no temporary file created. For example, if + the application is an ASP.NET application and calls Save() + specifying the Response.OutputStream as the output stream, there is + no temporary file created. + + + + + Thrown when setting the property if the directory does not exist. + + + + + + Sets the password to be used on the ZipFile instance. + + + + + + When writing a zip archive, this password is applied to the entries, not + to the zip archive itself. It applies to any ZipEntry subsequently + added to the ZipFile, using one of the AddFile, + AddDirectory, AddEntry, or AddItem methods, etc. + When reading a zip archive, this property applies to any entry + subsequently extracted from the ZipFile using one of the Extract + methods on the ZipFile class. + + + + When writing a zip archive, keep this in mind: though the password is set + on the ZipFile object, according to the Zip spec, the "directory" of the + archive - in other words the list of entries or files contained in the archive - is + not encrypted with the password, or protected in any way. If you set the + Password property, the password actually applies to individual entries + that are added to the archive, subsequent to the setting of this property. + The list of filenames in the archive that is eventually created will + appear in clear text, but the contents of the individual files are + encrypted. This is how Zip encryption works. + + + + One simple way around this limitation is to simply double-wrap sensitive + filenames: Store the files in a zip file, and then store that zip file + within a second, "outer" zip file. If you apply a password to the outer + zip file, then readers will be able to see that the outer zip file + contains an inner zip file. But readers will not be able to read the + directory or file list of the inner zip file. + + + + If you set the password on the ZipFile, and then add a set of files + to the archive, then each entry is encrypted with that password. You may + also want to change the password between adding different entries. If you + set the password, add an entry, then set the password to null + (Nothing in VB), and add another entry, the first entry is + encrypted and the second is not. If you call AddFile(), then set + the Password property, then call ZipFile.Save, the file + added will not be password-protected, and no warning will be generated. + + + + When setting the Password, you may also want to explicitly set the property, to specify how to encrypt the entries added + to the ZipFile. If you set the Password to a non-null value and do not + set , then PKZip 2.0 ("Weak") encryption is used. + This encryption is relatively weak but is very interoperable. If you set + the password to a null value (Nothing in VB), Encryption is + reset to None. + + + + All of the preceding applies to writing zip archives, in other words when + you use one of the Save methods. To use this property when reading or an + existing ZipFile, do the following: set the Password property on the + ZipFile, then call one of the Extract() overloads on the . In this case, the entry is extracted using the + Password that is specified on the ZipFile instance. If you + have not set the Password property, then the password is + null, and the entry is extracted with no password. + + + + If you set the Password property on the ZipFile, then call + Extract() an entry that has not been encrypted with a password, the + password is not used for that entry, and the ZipEntry is extracted + as normal. In other words, the password is used only if necessary. + + + + The class also has a Password property. It takes precedence + over this property on the ZipFile. Typically, you would use the + per-entry Password when most entries in the zip archive use one password, + and a few entries use a different password. If all entries in the zip + file use the same password, then it is simpler to just set this property + on the ZipFile itself, whether creating a zip archive or extracting + a zip archive. + + + + + + + This example creates a zip file, using password protection for the + entries, and then extracts the entries from the zip file. When creating + the zip file, the Readme.txt file is not protected with a password, but + the other two are password-protected as they are saved. During extraction, + each file is extracted with the appropriate password. + + + // create a file with encryption + using (ZipFile zip = new ZipFile()) + { + zip.AddFile("ReadMe.txt"); + zip.Password= "!Secret1"; + zip.AddFile("MapToTheSite-7440-N49th.png"); + zip.AddFile("2008-Regional-Sales-Report.pdf"); + zip.Save("EncryptedArchive.zip"); + } + + // extract entries that use encryption + using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) + { + zip.Password= "!Secret1"; + zip.ExtractAll("extractDir"); + } + + + + + Using zip As New ZipFile + zip.AddFile("ReadMe.txt") + zip.Password = "123456!" + zip.AddFile("MapToTheSite-7440-N49th.png") + zip.Password= "!Secret1"; + zip.AddFile("2008-Regional-Sales-Report.pdf") + zip.Save("EncryptedArchive.zip") + End Using + + + ' extract entries that use encryption + Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) + zip.Password= "!Secret1" + zip.ExtractAll("extractDir") + End Using + + + + + + ZipFile.Encryption + ZipEntry.Password + + + + The action the library should take when extracting a file that already + exists. + + + + + This property affects the behavior of the Extract methods (one of the + Extract() or ExtractWithPassword() overloads), when + extraction would would overwrite an existing filesystem file. If you do + not set this property, the library throws an exception when extracting an + entry would overwrite an existing file. + + + + This property has no effect when extracting to a stream, or when the file + to be extracted does not already exist. + + + + + + + The action the library should take when an error is encountered while + opening or reading files as they are saved into a zip archive. + + + + + Errors can occur as a file is being saved to the zip archive. For + example, the File.Open may fail, or a File.Read may fail, because of + lock conflicts or other reasons. + + + + The first problem might occur after having called AddDirectory() on a + directory that contains a Clipper .dbf file; the file is locked by + Clipper and cannot be opened for read by another process. An example of + the second problem might occur when trying to zip a .pst file that is in + use by Microsoft Outlook. Outlook locks a range on the file, which allows + other processes to open the file, but not read it in its entirety. + + + + This property tells DotNetZip what you would like to do in the case of + these errors. The primary options are: ZipErrorAction.Throw to + throw an exception (this is the default behavior if you don't set this + property); ZipErrorAction.Skip to Skip the file for which there + was an error and continue saving; ZipErrorAction.Retry to Retry + the entry that caused the problem; or + ZipErrorAction.InvokeErrorEvent to invoke an event handler. + + + + This property is implicitly set to ZipErrorAction.InvokeErrorEvent + if you add a handler to the event. If you set + this property to something other than + ZipErrorAction.InvokeErrorEvent, then the ZipError + event is implicitly cleared. What it means is you can set one or the + other (or neither), depending on what you want, but you never need to set + both. + + + + As with some other properties on the ZipFile class, like , , and , setting this property on a ZipFile + instance will cause the specified ZipErrorAction to be used on all + items that are subsequently added to the + ZipFile instance. If you set this property after you have added + items to the ZipFile, but before you have called Save(), + those items will not use the specified error handling action. + + + + If you want to handle any errors that occur with any entry in the zip + file in the same way, then set this property once, before adding any + entries to the zip archive. + + + + If you set this property to ZipErrorAction.Skip and you'd like to + learn which files may have been skipped after a Save(), you can + set the on the ZipFile before + calling Save(). A message will be emitted into that writer for + each skipped file, if any. + + + + + + This example shows how to tell DotNetZip to skip any files for which an + error is generated during the Save(). + + Public Sub SaveZipFile() + Dim SourceFolder As String = "fodder" + Dim DestFile As String = "eHandler.zip" + Dim sw as New StringWriter + Using zipArchive As ZipFile = New ZipFile + ' Tell DotNetZip to skip any files for which it encounters an error + zipArchive.ZipErrorAction = ZipErrorAction.Skip + zipArchive.StatusMessageTextWriter = sw + zipArchive.AddDirectory(SourceFolder) + zipArchive.Save(DestFile) + End Using + ' examine sw here to see any messages + End Sub + + + + + + + + + + The Encryption to use for entries added to the ZipFile. + + + + + Set this when creating a zip archive, or when updating a zip archive. The + specified Encryption is applied to the entries subsequently added to the + ZipFile instance. Applications do not need to set the + Encryption property when reading or extracting a zip archive. + + + + If you set this to something other than EncryptionAlgorithm.None, you + will also need to set the . + + + + As with some other properties on the ZipFile class, like and , setting this + property on a ZipFile instance will cause the specified + EncryptionAlgorithm to be used on all items + that are subsequently added to the ZipFile instance. In other + words, if you set this property after you have added items to the + ZipFile, but before you have called Save(), those items will + not be encrypted or protected with a password in the resulting zip + archive. To get a zip archive with encrypted entries, set this property, + along with the property, before calling + AddFile, AddItem, or AddDirectory (etc.) on the + ZipFile instance. + + + + If you read a ZipFile, you can modify the Encryption on an + encrypted entry, only by setting the Encryption property on the + ZipEntry itself. Setting the Encryption property on the + ZipFile, once it has been created via a call to + ZipFile.Read(), does not affect entries that were previously read. + + + + For example, suppose you read a ZipFile, and there is an encrypted + entry. Setting the Encryption property on that ZipFile and + then calling Save() on the ZipFile does not update the + Encryption used for the entries in the archive. Neither is an + exception thrown. Instead, what happens during the Save() is that + all previously existing entries are copied through to the new zip archive, + with whatever encryption and password that was used when originally + creating the zip archive. Upon re-reading that archive, to extract + entries, applications should use the original password or passwords, if + any. + + + + Suppose an application reads a ZipFile, and there is an encrypted + entry. Setting the Encryption property on that ZipFile and + then adding new entries (via AddFile(), AddEntry(), etc) + and then calling Save() on the ZipFile does not update the + Encryption on any of the entries that had previously been in the + ZipFile. The Encryption property applies only to the + newly-added entries. + + + + + + + This example creates a zip archive that uses encryption, and then extracts + entries from the archive. When creating the zip archive, the ReadMe.txt + file is zipped without using a password or encryption. The other files + use encryption. + + + + // Create a zip archive with AES Encryption. + using (ZipFile zip = new ZipFile()) + { + zip.AddFile("ReadMe.txt"); + zip.Encryption= EncryptionAlgorithm.WinZipAes256; + zip.Password= "Top.Secret.No.Peeking!"; + zip.AddFile("7440-N49th.png"); + zip.AddFile("2008-Regional-Sales-Report.pdf"); + zip.Save("EncryptedArchive.zip"); + } + + // Extract a zip archive that uses AES Encryption. + // You do not need to specify the algorithm during extraction. + using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) + { + zip.Password= "Top.Secret.No.Peeking!"; + zip.ExtractAll("extractDirectory"); + } + + + + ' Create a zip that uses Encryption. + Using zip As New ZipFile() + zip.Encryption= EncryptionAlgorithm.WinZipAes256 + zip.Password= "Top.Secret.No.Peeking!" + zip.AddFile("ReadMe.txt") + zip.AddFile("7440-N49th.png") + zip.AddFile("2008-Regional-Sales-Report.pdf") + zip.Save("EncryptedArchive.zip") + End Using + + ' Extract a zip archive that uses AES Encryption. + ' You do not need to specify the algorithm during extraction. + Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) + zip.Password= "Top.Secret.No.Peeking!" + zip.ExtractAll("extractDirectory") + End Using + + + + + ZipFile.Password + ZipEntry.Encryption + + + + A callback that allows the application to specify the compression level + to use for entries subsequently added to the zip archive. + + + + + + With this callback, the DotNetZip library allows the application to + determine whether compression will be used, at the time of the + Save. This may be useful if the application wants to favor + speed over size, and wants to defer the decision until the time of + Save. + + + + Typically applications set the property on + the ZipFile or on each ZipEntry to determine the level of + compression used. This is done at the time the entry is added to the + ZipFile. Setting the property to + Ionic.Zlib.CompressionLevel.None means no compression will be used. + + + + This callback allows the application to defer the decision on the + CompressionLevel to use, until the time of the call to + ZipFile.Save(). The callback is invoked once per ZipEntry, + at the time the data for the entry is being written out as part of a + Save() operation. The application can use whatever criteria it + likes in determining the level to return. For example, an application may + wish that no .mp3 files should be compressed, because they are already + compressed and the extra compression is not worth the CPU time incurred, + and so can return None for all .mp3 entries. + + + + The library determines whether compression will be attempted for an entry + this way: If the entry is a zero length file, or a directory, no + compression is used. Otherwise, if this callback is set, it is invoked + and the CompressionLevel is set to the return value. If this + callback has not been set, then the previously set value for + CompressionLevel is used. + + + + + + + The maximum size of an output segment, when saving a split Zip file. + + + + Make sure you do not read from this field if you've set the value using + + + + Set this to a non-zero value before calling or to specify that the ZipFile should be saved as a + split archive, also sometimes called a spanned archive. Some also + call them multi-file archives. + + + + A split zip archive is saved in a set of discrete filesystem files, + rather than in a single file. This is handy when transmitting the + archive in email or some other mechanism that has a limit to the size of + each file. The first file in a split archive will be named + basename.z01, the second will be named basename.z02, and + so on. The final file is named basename.zip. According to the zip + specification from PKWare, the minimum value is 65536, for a 64k segment + size. The maximum number of segments allows in a split archive is 99. + + + + The value of this property determines the maximum size of a split + segment when writing a split archive. For example, suppose you have a + ZipFile that would save to a single file of 200k. If you set the + MaxOutputSegmentSize to 65536 before calling Save(), you + will get four distinct output files. On the other hand if you set this + property to 256k, then you will get a single-file archive for that + ZipFile. + + + + The size of each split output file will be as large as possible, up to + the maximum size set here. The zip specification requires that some data + fields in a zip archive may not span a split boundary, and an output + segment may be smaller than the maximum if necessary to avoid that + problem. Also, obviously the final segment of the archive may be smaller + than the maximum segment size. Segments will never be larger than the + value set with this property. + + + + You can save a split Zip file only when saving to a regular filesystem + file. It's not possible to save a split zip file as a self-extracting + archive, nor is it possible to save a split zip file to a stream. When + saving to a SFX or to a Stream, this property is ignored. + + + + About interoperability: Split or spanned zip files produced by DotNetZip + can be read by WinZip or PKZip, and vice-versa. Segmented zip files may + not be readable by other tools, if those other tools don't support zip + spanning or splitting. When in doubt, test. I don't believe Windows + Explorer can extract a split archive. + + + + This property has no effect when reading a split archive. You can read + a split archive in the normal way with DotNetZip. + + + + When saving a zip file, if you want a regular zip file rather than a + split zip file, don't set this property, or set it to Zero. + + + + If you read a split archive, with and + then subsequently call ZipFile.Save(), unless you set this + property before calling Save(), you will get a normal, + single-file archive. + + + + + + + + The maximum size of an output segment, when saving a split Zip file. + + + + If you set this value, make sure you do not accidently use in your code + + + + Set this to a non-zero value before calling or to specify that the ZipFile should be saved as a + split archive, also sometimes called a spanned archive. Some also + call them multi-file archives. + + + + A split zip archive is saved in a set of discrete filesystem files, + rather than in a single file. This is handy when transmitting the + archive in email or some other mechanism that has a limit to the size of + each file. The first file in a split archive will be named + basename.z01, the second will be named basename.z02, and + so on. The final file is named basename.zip. According to the zip + specification from PKWare, the minimum value is 65536, for a 64k segment + size. The maximum number of segments allows in a split archive is 99. + + + + The value of this property determines the maximum size of a split + segment when writing a split archive. For example, suppose you have a + ZipFile that would save to a single file of 200k. If you set the + MaxOutputSegmentSize to 65536 before calling Save(), you + will get four distinct output files. On the other hand if you set this + property to 256k, then you will get a single-file archive for that + ZipFile. + + + + The size of each split output file will be as large as possible, up to + the maximum size set here. The zip specification requires that some data + fields in a zip archive may not span a split boundary, and an output + segment may be smaller than the maximum if necessary to avoid that + problem. Also, obviously the final segment of the archive may be smaller + than the maximum segment size. Segments will never be larger than the + value set with this property. + + + + You can save a split Zip file only when saving to a regular filesystem + file. It's not possible to save a split zip file as a self-extracting + archive, nor is it possible to save a split zip file to a stream. When + saving to a SFX or to a Stream, this property is ignored. + + + + About interoperability: Split or spanned zip files produced by DotNetZip + can be read by WinZip or PKZip, and vice-versa. Segmented zip files may + not be readable by other tools, if those other tools don't support zip + spanning or splitting. When in doubt, test. I don't believe Windows + Explorer can extract a split archive. + + + + This property has no effect when reading a split archive. You can read + a split archive in the normal way with DotNetZip. + + + + When saving a zip file, if you want a regular zip file rather than a + split zip file, don't set this property, or set it to Zero. + + + + If you read a split archive, with and + then subsequently call ZipFile.Save(), unless you set this + property before calling Save(), you will get a normal, + single-file archive. + + + + + + + + Returns the number of segments used in the most recent Save() operation. + + + + This is normally zero, unless you have set the property. If you have set , and then you save a file, after the call to + Save() completes, you can read this value to learn the number of segments that + were created. + + + If you call Save("Archive.zip"), and it creates 5 segments, then you + will have filesystem files named Archive.z01, Archive.z02, Archive.z03, + Archive.z04, and Archive.zip, and the value of this property will be 5. + + + + + + + The size threshold for an entry, above which a parallel deflate is used. + + + + + + DotNetZip will use multiple threads to compress any ZipEntry, + if the entry is larger than the given size. Zero means "always + use parallel deflate", while -1 means "never use parallel + deflate". The default value for this property is 512k. Aside + from the special values of 0 and 1, the minimum value is 65536. + + + + If the entry size cannot be known before compression, as with a + read-forward stream, then Parallel deflate will never be + performed, unless the value of this property is zero. + + + + A parallel deflate operations will speed up the compression of + large files, on computers with multiple CPUs or multiple CPU + cores. For files above 1mb, on a dual core or dual-cpu (2p) + machine, the time required to compress the file can be 70% of the + single-threaded deflate. For very large files on 4p machines the + compression can be done in 30% of the normal time. The downside + is that parallel deflate consumes extra memory during the deflate, + and the deflation is not as effective. + + + + Parallel deflate tends to yield slightly less compression when + compared to as single-threaded deflate; this is because the original + data stream is split into multiple independent buffers, each of which + is compressed in parallel. But because they are treated + independently, there is no opportunity to share compression + dictionaries. For that reason, a deflated stream may be slightly + larger when compressed using parallel deflate, as compared to a + traditional single-threaded deflate. Sometimes the increase over the + normal deflate is as much as 5% of the total compressed size. For + larger files it can be as small as 0.1%. + + + + Multi-threaded compression does not give as much an advantage when + using Encryption. This is primarily because encryption tends to slow + down the entire pipeline. Also, multi-threaded compression gives less + of an advantage when using lower compression levels, for example . You may have to + perform some tests to determine the best approach for your situation. + + + + + + + + + + The maximum number of buffer pairs to use when performing + parallel compression. + + + + + This property sets an upper limit on the number of memory + buffer pairs to create when performing parallel + compression. The implementation of the parallel + compression stream allocates multiple buffers to + facilitate parallel compression. As each buffer fills up, + the stream uses + ThreadPool.QueueUserWorkItem() to compress those + buffers in a background threadpool thread. After a buffer + is compressed, it is re-ordered and written to the output + stream. + + + + A higher number of buffer pairs enables a higher degree of + parallelism, which tends to increase the speed of compression on + multi-cpu computers. On the other hand, a higher number of buffer + pairs also implies a larger memory consumption, more active worker + threads, and a higher cpu utilization for any compression. This + property enables the application to limit its memory consumption and + CPU utilization behavior depending on requirements. + + + + For each compression "task" that occurs in parallel, there are 2 + buffers allocated: one for input and one for output. This property + sets a limit for the number of pairs. The total amount of storage + space allocated for buffering will then be (N*S*2), where N is the + number of buffer pairs, S is the size of each buffer (). By default, DotNetZip allocates 4 buffer + pairs per CPU core, so if your machine has 4 cores, and you retain + the default buffer size of 128k, then the + ParallelDeflateOutputStream will use 4 * 4 * 2 * 128kb of buffer + memory in total, or 4mb, in blocks of 128kb. If you then set this + property to 8, then the number will be 8 * 2 * 128kb of buffer + memory, or 2mb. + + + + CPU utilization will also go up with additional buffers, because a + larger number of buffer pairs allows a larger number of background + threads to compress in parallel. If you find that parallel + compression is consuming too much memory or CPU, you can adjust this + value downward. + + + + The default value is 16. Different values may deliver better or + worse results, depending on your priorities and the dynamic + performance characteristics of your storage and compute resources. + + + + This property is not the number of buffer pairs to use; it is an + upper limit. An illustration: Suppose you have an application that + uses the default value of this property (which is 16), and it runs + on a machine with 2 CPU cores. In that case, DotNetZip will allocate + 4 buffer pairs per CPU core, for a total of 8 pairs. The upper + limit specified by this property has no effect. + + + + The application can set this value at any time + before calling ZipFile.Save(). + + + + + + + + Provides a string representation of the instance. + a string representation of the instance. + + + + Returns the version number on the DotNetZip assembly. + + + + + This property is exposed as a convenience. Callers could also get the + version value by retrieving GetName().Version on the + System.Reflection.Assembly object pointing to the DotNetZip + assembly. But sometimes it is not clear which assembly is being loaded. + This property makes it clear. + + + This static property is primarily useful for diagnostic purposes. + + + + + + Creates a new ZipFile instance, using the specified filename. + + + + + Applications can use this constructor to create a new ZipFile for writing, + or to slurp in an existing zip archive for read and update purposes. + + + + To create a new zip archive, an application can call this constructor, + passing the name of a file that does not exist. The name may be a fully + qualified path. Then the application can add directories or files to the + ZipFile via AddDirectory(), AddFile(), AddItem() + and then write the zip archive to the disk by calling Save(). The + zip file is not actually opened and written to the disk until the + application calls ZipFile.Save(). At that point the new zip file + with the given name is created. + + + + If you won't know the name of the Zipfile until the time you call + ZipFile.Save(), or if you plan to save to a stream (which has no + name), then you should use the no-argument constructor. + + + + The application can also call this constructor to read an existing zip + archive. passing the name of a valid zip file that does exist. But, it's + better form to use the static method, + passing the name of the zip file, because using ZipFile.Read() in + your code communicates very clearly what you are doing. In either case, + the file is then read into the ZipFile instance. The app can then + enumerate the entries or can modify the zip file, for example adding + entries, removing entries, changing comments, and so on. + + + + One advantage to this parameterized constructor: it allows applications to + use the same code to add items to a zip archive, regardless of whether the + zip file exists. + + + + Instances of the ZipFile class are not multi-thread safe. You may + not party on a single instance with multiple threads. You may have + multiple threads that each use a distinct ZipFile instance, or you + can synchronize multi-thread access to a single instance. + + + + By the way, since DotNetZip is so easy to use, don't you think you should + donate $5 or $10? + + + + + + Thrown if name refers to an existing file that is not a valid zip file. + + + + This example shows how to create a zipfile, and add a few files into it. + + String ZipFileToCreate = "archive1.zip"; + String DirectoryToZip = "c:\\reports"; + using (ZipFile zip = new ZipFile()) + { + // Store all files found in the top level directory, into the zip archive. + String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); + zip.AddFiles(filenames, "files"); + zip.Save(ZipFileToCreate); + } + + + + Dim ZipFileToCreate As String = "archive1.zip" + Dim DirectoryToZip As String = "c:\reports" + Using zip As ZipFile = New ZipFile() + Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) + zip.AddFiles(filenames, "files") + zip.Save(ZipFileToCreate) + End Using + + + + The filename to use for the new zip archive. + + + + + Creates a new ZipFile instance, using the specified name for the + filename, and the specified Encoding. + + + + + See the documentation on the ZipFile + constructor that accepts a single string argument for basic + information on all the ZipFile constructors. + + + + The Encoding is used as the default alternate encoding for entries with + filenames or comments that cannot be encoded with the IBM437 code page. + This is equivalent to setting the property on the ZipFile + instance after construction. + + + + Instances of the ZipFile class are not multi-thread safe. You may + not party on a single instance with multiple threads. You may have + multiple threads that each use a distinct ZipFile instance, or you + can synchronize multi-thread access to a single instance. + + + + + + Thrown if name refers to an existing file that is not a valid zip file. + + + The filename to use for the new zip archive. + The Encoding is used as the default alternate + encoding for entries with filenames or comments that cannot be encoded + with the IBM437 code page. + + + + Create a zip file, without specifying a target filename or stream to save to. + + + + + See the documentation on the ZipFile + constructor that accepts a single string argument for basic + information on all the ZipFile constructors. + + + + After instantiating with this constructor and adding entries to the + archive, the application should call or + to save to a file or a + stream, respectively. The application can also set the + property and then call the no-argument method. (This + is the preferred approach for applications that use the library through + COM interop.) If you call the no-argument method + without having set the Name of the ZipFile, either through + the parameterized constructor or through the explicit property , the + Save() will throw, because there is no place to save the file. + + + Instances of the ZipFile class are not multi-thread safe. You may + have multiple threads that each use a distinct ZipFile instance, or + you can synchronize multi-thread access to a single instance. + + + + + This example creates a Zip archive called Backup.zip, containing all the files + in the directory DirectoryToZip. Files within subdirectories are not zipped up. + + using (ZipFile zip = new ZipFile()) + { + // Store all files found in the top level directory, into the zip archive. + // note: this code does not recurse subdirectories! + String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); + zip.AddFiles(filenames, "files"); + zip.Save("Backup.zip"); + } + + + + Using zip As New ZipFile + ' Store all files found in the top level directory, into the zip archive. + ' note: this code does not recurse subdirectories! + Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) + zip.AddFiles(filenames, "files") + zip.Save("Backup.zip") + End Using + + + + + + Create a zip file, specifying a text Encoding, but without specifying a + target filename or stream to save to. + + + + + See the documentation on the ZipFile + constructor that accepts a single string argument for basic + information on all the ZipFile constructors. + + + + + + The Encoding is used as the default alternate encoding for entries with + filenames or comments that cannot be encoded with the IBM437 code page. + + + + + Creates a new ZipFile instance, using the specified name for the + filename, and the specified status message writer. + + + + + See the documentation on the ZipFile + constructor that accepts a single string argument for basic + information on all the ZipFile constructors. + + + + This version of the constructor allows the caller to pass in a TextWriter, + to which verbose messages will be written during extraction or creation of + the zip archive. A console application may wish to pass + System.Console.Out to get messages on the Console. A graphical or headless + application may wish to capture the messages in a different + TextWriter, for example, a StringWriter, and then display + the messages in a TextBox, or generate an audit log of ZipFile operations. + + + + To encrypt the data for the files added to the ZipFile instance, + set the Password property after creating the ZipFile instance. + + + + Instances of the ZipFile class are not multi-thread safe. You may + not party on a single instance with multiple threads. You may have + multiple threads that each use a distinct ZipFile instance, or you + can synchronize multi-thread access to a single instance. + + + + + + Thrown if name refers to an existing file that is not a valid zip file. + + + + + using (ZipFile zip = new ZipFile("Backup.zip", Console.Out)) + { + // Store all files found in the top level directory, into the zip archive. + // note: this code does not recurse subdirectories! + // Status messages will be written to Console.Out + String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); + zip.AddFiles(filenames); + zip.Save(); + } + + + + Using zip As New ZipFile("Backup.zip", Console.Out) + ' Store all files found in the top level directory, into the zip archive. + ' note: this code does not recurse subdirectories! + ' Status messages will be written to Console.Out + Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) + zip.AddFiles(filenames) + zip.Save() + End Using + + + + The filename to use for the new zip archive. + A TextWriter to use for writing + verbose status messages. + + + + Creates a new ZipFile instance, using the specified name for the + filename, the specified status message writer, and the specified Encoding. + + + + + This constructor works like the ZipFile + constructor that accepts a single string argument. See that + reference for detail on what this constructor does. + + + + This version of the constructor allows the caller to pass in a + TextWriter, and an Encoding. The TextWriter will collect + verbose messages that are generated by the library during extraction or + creation of the zip archive. A console application may wish to pass + System.Console.Out to get messages on the Console. A graphical or + headless application may wish to capture the messages in a different + TextWriter, for example, a StringWriter, and then display + the messages in a TextBox, or generate an audit log of + ZipFile operations. + + + + The Encoding is used as the default alternate encoding for entries + with filenames or comments that cannot be encoded with the IBM437 code + page. This is a equivalent to setting the property on the ZipFile + instance after construction. + + + + To encrypt the data for the files added to the ZipFile instance, + set the Password property after creating the ZipFile + instance. + + + + Instances of the ZipFile class are not multi-thread safe. You may + not party on a single instance with multiple threads. You may have + multiple threads that each use a distinct ZipFile instance, or you + can synchronize multi-thread access to a single instance. + + + + + + Thrown if fileName refers to an existing file that is not a valid zip file. + + + The filename to use for the new zip archive. + A TextWriter to use for writing verbose + status messages. + + The Encoding is used as the default alternate encoding for entries with + filenames or comments that cannot be encoded with the IBM437 code page. + + + + + Initialize a ZipFile instance by reading in a zip file. + + + + + + This method is primarily useful from COM Automation environments, when + reading or extracting zip files. In COM, it is not possible to invoke + parameterized constructors for a class. A COM Automation application can + update a zip file by using the default (no argument) + constructor, then calling Initialize() to read the contents + of an on-disk zip archive into the ZipFile instance. + + + + .NET applications are encouraged to use the ZipFile.Read() methods + for better clarity. + + + + the name of the existing zip file to read in. + + + + This is an integer indexer into the Zip archive. + + + + + This property is read-only. + + + + Internally, the ZipEntry instances that belong to the + ZipFile are stored in a Dictionary. When you use this + indexer the first time, it creates a read-only + List<ZipEntry> from the Dictionary.Values Collection. + If at any time you modify the set of entries in the ZipFile, + either by adding an entry, removing an entry, or renaming an + entry, a new List will be created, and the numeric indexes for the + remaining entries may be different. + + + + This means you cannot rename any ZipEntry from + inside an enumeration of the zip file. + + + + The index value. + + + + + + The ZipEntry within the Zip archive at the specified index. If the + entry does not exist in the archive, this indexer throws. + + + + + + This is a name-based indexer into the Zip archive. + + + + + This property is read-only. + + + + The property on the ZipFile + determines whether retrieval via this indexer is done via case-sensitive + comparisons. By default, retrieval is not case sensitive. This makes + sense on Windows, in which filesystems are not case sensitive. + + + + Regardless of case-sensitivity, it is not always the case that + this[value].FileName == value. In other words, the FileName + property of the ZipEntry retrieved with this indexer, may or may + not be equal to the index value. + + + + This is because DotNetZip performs a normalization of filenames passed to + this indexer, before attempting to retrieve the item. That normalization + includes: removal of a volume letter and colon, swapping backward slashes + for forward slashes. So, zip["dir1\\entry1.txt"].FileName == + "dir1/entry.txt". + + + + Directory entries in the zip file may be retrieved via this indexer only + with names that have a trailing slash. DotNetZip automatically appends a + trailing slash to the names of any directory entries added to a zip. + + + + + + This example extracts only the entries in a zip file that are .txt files. + + using (ZipFile zip = ZipFile.Read("PackedDocuments.zip")) + { + foreach (string s1 in zip.EntryFilenames) + { + if (s1.EndsWith(".txt")) + zip[s1].Extract("textfiles"); + } + } + + + Using zip As ZipFile = ZipFile.Read("PackedDocuments.zip") + Dim s1 As String + For Each s1 In zip.EntryFilenames + If s1.EndsWith(".txt") Then + zip(s1).Extract("textfiles") + End If + Next + End Using + + + + + + Thrown if the caller attempts to assign a non-null value to the indexer. + + + + The name of the file, including any directory path, to retrieve from the + zip. The filename match is not case-sensitive by default; you can use the + property to change this behavior. The + pathname can use forward-slashes or backward slashes. + + + + The ZipEntry within the Zip archive, given by the specified + filename. If the named entry does not exist in the archive, this indexer + returns null (Nothing in VB). + + + + + + The list of filenames for the entries contained within the zip archive. + + + + According to the ZIP specification, the names of the entries use forward + slashes in pathnames. If you are scanning through the list, you may have + to swap forward slashes for backslashes. + + + + + + This example shows one way to test if a filename is already contained + within a zip archive. + + String zipFileToRead= "PackedDocuments.zip"; + string candidate = "DatedMaterial.xps"; + using (ZipFile zip = new ZipFile(zipFileToRead)) + { + if (zip.EntryFilenames.Contains(candidate)) + Console.WriteLine("The file '{0}' exists in the zip archive '{1}'", + candidate, + zipFileName); + else + Console.WriteLine("The file, '{0}', does not exist in the zip archive '{1}'", + candidate, + zipFileName); + Console.WriteLine(); + } + + + Dim zipFileToRead As String = "PackedDocuments.zip" + Dim candidate As String = "DatedMaterial.xps" + Using zip As ZipFile.Read(ZipFileToRead) + If zip.EntryFilenames.Contains(candidate) Then + Console.WriteLine("The file '{0}' exists in the zip archive '{1}'", _ + candidate, _ + zipFileName) + Else + Console.WriteLine("The file, '{0}', does not exist in the zip archive '{1}'", _ + candidate, _ + zipFileName) + End If + Console.WriteLine + End Using + + + + + The list of strings for the filenames contained within the Zip archive. + + + + + + Returns the readonly collection of entries in the Zip archive. + + + + + + If there are no entries in the current ZipFile, the value returned is a + non-null zero-element collection. If there are entries in the zip file, + the elements are returned in no particular order. + + + This is the implied enumerator on the ZipFile class. If you use a + ZipFile instance in a context that expects an enumerator, you will + get this collection. + + + + + + + Returns a readonly collection of entries in the Zip archive, sorted by FileName. + + + + If there are no entries in the current ZipFile, the value returned + is a non-null zero-element collection. If there are entries in the zip + file, the elements are returned sorted by the name of the entry. + + + + + This example fills a Windows Forms ListView with the entries in a zip file. + + + using (ZipFile zip = ZipFile.Read(zipFile)) + { + foreach (ZipEntry entry in zip.EntriesSorted) + { + ListViewItem item = new ListViewItem(n.ToString()); + n++; + string[] subitems = new string[] { + entry.FileName.Replace("/","\\"), + entry.LastModified.ToString("yyyy-MM-dd HH:mm:ss"), + entry.UncompressedSize.ToString(), + String.Format("{0,5:F0}%", entry.CompressionRatio), + entry.CompressedSize.ToString(), + (entry.UsesEncryption) ? "Y" : "N", + String.Format("{0:X8}", entry.Crc)}; + + foreach (String s in subitems) + { + ListViewItem.ListViewSubItem subitem = new ListViewItem.ListViewSubItem(); + subitem.Text = s; + item.SubItems.Add(subitem); + } + + this.listView1.Items.Add(item); + } + } + + + + + + + + Returns the number of entries in the Zip archive. + + + + + Removes the given ZipEntry from the zip archive. + + + + + After calling RemoveEntry, the application must call Save to + make the changes permanent. + + + + + Thrown if the specified ZipEntry does not exist in the ZipFile. + + + + In this example, all entries in the zip archive dating from before + December 31st, 2007, are removed from the archive. This is actually much + easier if you use the RemoveSelectedEntries method. But I needed an + example for RemoveEntry, so here it is. + + String ZipFileToRead = "ArchiveToModify.zip"; + System.DateTime Threshold = new System.DateTime(2007,12,31); + using (ZipFile zip = ZipFile.Read(ZipFileToRead)) + { + var EntriesToRemove = new System.Collections.Generic.List<ZipEntry>(); + foreach (ZipEntry e in zip) + { + if (e.LastModified < Threshold) + { + // We cannot remove the entry from the list, within the context of + // an enumeration of said list. + // So we add the doomed entry to a list to be removed later. + EntriesToRemove.Add(e); + } + } + + // actually remove the doomed entries. + foreach (ZipEntry zombie in EntriesToRemove) + zip.RemoveEntry(zombie); + + zip.Comment= String.Format("This zip archive was updated at {0}.", + System.DateTime.Now.ToString("G")); + + // save with a different name + zip.Save("Archive-Updated.zip"); + } + + + + Dim ZipFileToRead As String = "ArchiveToModify.zip" + Dim Threshold As New DateTime(2007, 12, 31) + Using zip As ZipFile = ZipFile.Read(ZipFileToRead) + Dim EntriesToRemove As New System.Collections.Generic.List(Of ZipEntry) + Dim e As ZipEntry + For Each e In zip + If (e.LastModified < Threshold) Then + ' We cannot remove the entry from the list, within the context of + ' an enumeration of said list. + ' So we add the doomed entry to a list to be removed later. + EntriesToRemove.Add(e) + End If + Next + + ' actually remove the doomed entries. + Dim zombie As ZipEntry + For Each zombie In EntriesToRemove + zip.RemoveEntry(zombie) + Next + zip.Comment = String.Format("This zip archive was updated at {0}.", DateTime.Now.ToString("G")) + 'save as a different name + zip.Save("Archive-Updated.zip") + End Using + + + + + The ZipEntry to remove from the zip. + + + + + + + + Removes the ZipEntry with the given filename from the zip archive. + + + + + After calling RemoveEntry, the application must call Save to + make the changes permanent. + + + + + + Thrown if the ZipFile is not updatable. + + + + Thrown if a ZipEntry with the specified filename does not exist in + the ZipFile. + + + + + This example shows one way to remove an entry with a given filename from + an existing zip archive. + + + String zipFileToRead= "PackedDocuments.zip"; + string candidate = "DatedMaterial.xps"; + using (ZipFile zip = ZipFile.Read(zipFileToRead)) + { + if (zip.EntryFilenames.Contains(candidate)) + { + zip.RemoveEntry(candidate); + zip.Comment= String.Format("The file '{0}' has been removed from this archive.", + Candidate); + zip.Save(); + } + } + + + Dim zipFileToRead As String = "PackedDocuments.zip" + Dim candidate As String = "DatedMaterial.xps" + Using zip As ZipFile = ZipFile.Read(zipFileToRead) + If zip.EntryFilenames.Contains(candidate) Then + zip.RemoveEntry(candidate) + zip.Comment = String.Format("The file '{0}' has been removed from this archive.", Candidate) + zip.Save + End If + End Using + + + + + The name of the file, including any directory path, to remove from the zip. + The filename match is not case-sensitive by default; you can use the + CaseSensitiveRetrieval property to change this behavior. The + pathname can use forward-slashes or backward slashes. + + + + + + Closes the read and write streams associated + to the ZipFile, if necessary. + + + + The Dispose() method is generally employed implicitly, via a using(..) {..} + statement. (Using...End Using in VB) If you do not employ a using + statement, insure that your application calls Dispose() explicitly. For + example, in a Powershell application, or an application that uses the COM + interop interface, you must call Dispose() explicitly. + + + + This example extracts an entry selected by name, from the Zip file to the + Console. + + using (ZipFile zip = ZipFile.Read(zipfile)) + { + foreach (ZipEntry e in zip) + { + if (WantThisEntry(e.FileName)) + zip.Extract(e.FileName, Console.OpenStandardOutput()); + } + } // Dispose() is called implicitly here. + + + + Using zip As ZipFile = ZipFile.Read(zipfile) + Dim e As ZipEntry + For Each e In zip + If WantThisEntry(e.FileName) Then + zip.Extract(e.FileName, Console.OpenStandardOutput()) + End If + Next + End Using ' Dispose is implicity called here + + + + + + Disposes any managed resources, if the flag is set, then marks the + instance disposed. This method is typically not called explicitly from + application code. + + + + Applications should call the no-arg Dispose method. + + + + indicates whether the method should dispose streams or not. + + + + + Default size of the buffer used for IO. + + + + + An event handler invoked when a Save() starts, before and after each + entry has been written to the archive, when a Save() completes, and + during other Save events. + + + + + Depending on the particular event, different properties on the parameter are set. The following + table summarizes the available EventTypes and the conditions under + which this event handler is invoked with a + SaveProgressEventArgs with the given EventType. + + + + + value of EntryType + Meaning and conditions + + + + ZipProgressEventType.Saving_Started + Fired when ZipFile.Save() begins. + + + + + ZipProgressEventType.Saving_BeforeSaveEntry + + Fired within ZipFile.Save(), just before writing data for each + particular entry. + + + + + ZipProgressEventType.Saving_AfterSaveEntry + + Fired within ZipFile.Save(), just after having finished writing data + for each particular entry. + + + + + ZipProgressEventType.Saving_Completed + Fired when ZipFile.Save() has completed. + + + + + ZipProgressEventType.Saving_AfterSaveTempArchive + + Fired after the temporary file has been created. This happens only + when saving to a disk file. This event will not be invoked when + saving to a stream. + + + + + ZipProgressEventType.Saving_BeforeRenameTempArchive + + Fired just before renaming the temporary file to the permanent + location. This happens only when saving to a disk file. This event + will not be invoked when saving to a stream. + + + + + ZipProgressEventType.Saving_AfterRenameTempArchive + + Fired just after renaming the temporary file to the permanent + location. This happens only when saving to a disk file. This event + will not be invoked when saving to a stream. + + + + + ZipProgressEventType.Saving_AfterCompileSelfExtractor + + Fired after a self-extracting archive has finished compiling. This + EventType is used only within SaveSelfExtractor(). + + + + + ZipProgressEventType.Saving_BytesRead + + Set during the save of a particular entry, to update progress of the + Save(). When this EventType is set, the BytesTransferred is the + number of bytes that have been read from the source stream. The + TotalBytesToTransfer is the number of bytes in the uncompressed + file. + + + + + + + + + This example uses an anonymous method to handle the + SaveProgress event, by updating a progress bar. + + + progressBar1.Value = 0; + progressBar1.Max = listbox1.Items.Count; + using (ZipFile zip = new ZipFile()) + { + // listbox1 contains a list of filenames + zip.AddFiles(listbox1.Items); + + // do the progress bar: + zip.SaveProgress += (sender, e) => { + if (e.EventType == ZipProgressEventType.Saving_BeforeWriteEntry) { + progressBar1.PerformStep(); + } + }; + + zip.Save(fs); + } + + + + + This example uses a named method as the + SaveProgress event handler, to update the user, in a + console-based application. + + + static bool justHadByteUpdate= false; + public static void SaveProgress(object sender, SaveProgressEventArgs e) + { + if (e.EventType == ZipProgressEventType.Saving_Started) + Console.WriteLine("Saving: {0}", e.ArchiveName); + + else if (e.EventType == ZipProgressEventType.Saving_Completed) + { + justHadByteUpdate= false; + Console.WriteLine(); + Console.WriteLine("Done: {0}", e.ArchiveName); + } + + else if (e.EventType == ZipProgressEventType.Saving_BeforeWriteEntry) + { + if (justHadByteUpdate) + Console.WriteLine(); + Console.WriteLine(" Writing: {0} ({1}/{2})", + e.CurrentEntry.FileName, e.EntriesSaved, e.EntriesTotal); + justHadByteUpdate= false; + } + + else if (e.EventType == ZipProgressEventType.Saving_EntryBytesRead) + { + if (justHadByteUpdate) + Console.SetCursorPosition(0, Console.CursorTop); + Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, e.TotalBytesToTransfer, + e.BytesTransferred / (0.01 * e.TotalBytesToTransfer )); + justHadByteUpdate= true; + } + } + + public static ZipUp(string targetZip, string directory) + { + using (var zip = new ZipFile()) { + zip.SaveProgress += SaveProgress; + zip.AddDirectory(directory); + zip.Save(targetZip); + } + } + + + + + Public Sub ZipUp(ByVal targetZip As String, ByVal directory As String) + Using zip As ZipFile = New ZipFile + AddHandler zip.SaveProgress, AddressOf MySaveProgress + zip.AddDirectory(directory) + zip.Save(targetZip) + End Using + End Sub + + Private Shared justHadByteUpdate As Boolean = False + + Public Shared Sub MySaveProgress(ByVal sender As Object, ByVal e As SaveProgressEventArgs) + If (e.EventType Is ZipProgressEventType.Saving_Started) Then + Console.WriteLine("Saving: {0}", e.ArchiveName) + + ElseIf (e.EventType Is ZipProgressEventType.Saving_Completed) Then + justHadByteUpdate = False + Console.WriteLine + Console.WriteLine("Done: {0}", e.ArchiveName) + + ElseIf (e.EventType Is ZipProgressEventType.Saving_BeforeWriteEntry) Then + If justHadByteUpdate Then + Console.WriteLine + End If + Console.WriteLine(" Writing: {0} ({1}/{2})", e.CurrentEntry.FileName, e.EntriesSaved, e.EntriesTotal) + justHadByteUpdate = False + + ElseIf (e.EventType Is ZipProgressEventType.Saving_EntryBytesRead) Then + If justHadByteUpdate Then + Console.SetCursorPosition(0, Console.CursorTop) + End If + Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, _ + e.TotalBytesToTransfer, _ + (CDbl(e.BytesTransferred) / (0.01 * e.TotalBytesToTransfer))) + justHadByteUpdate = True + End If + End Sub + + + + + + This is a more complete example of using the SaveProgress + events in a Windows Forms application, with a + Thread object. + + + delegate void SaveEntryProgress(SaveProgressEventArgs e); + delegate void ButtonClick(object sender, EventArgs e); + + public class WorkerOptions + { + public string ZipName; + public string Folder; + public string Encoding; + public string Comment; + public int ZipFlavor; + public Zip64Option Zip64; + } + + private int _progress2MaxFactor; + private bool _saveCanceled; + private long _totalBytesBeforeCompress; + private long _totalBytesAfterCompress; + private Thread _workerThread; + + + private void btnZipup_Click(object sender, EventArgs e) + { + KickoffZipup(); + } + + private void btnCancel_Click(object sender, EventArgs e) + { + if (this.lblStatus.InvokeRequired) + { + this.lblStatus.Invoke(new ButtonClick(this.btnCancel_Click), new object[] { sender, e }); + } + else + { + _saveCanceled = true; + lblStatus.Text = "Canceled..."; + ResetState(); + } + } + + private void KickoffZipup() + { + _folderName = tbDirName.Text; + + if (_folderName == null || _folderName == "") return; + if (this.tbZipName.Text == null || this.tbZipName.Text == "") return; + + // check for existence of the zip file: + if (System.IO.File.Exists(this.tbZipName.Text)) + { + var dlgResult = MessageBox.Show(String.Format("The file you have specified ({0}) already exists." + + " Do you want to overwrite this file?", this.tbZipName.Text), + "Confirmation is Required", MessageBoxButtons.YesNo, MessageBoxIcon.Question); + if (dlgResult != DialogResult.Yes) return; + System.IO.File.Delete(this.tbZipName.Text); + } + + _saveCanceled = false; + _nFilesCompleted = 0; + _totalBytesAfterCompress = 0; + _totalBytesBeforeCompress = 0; + this.btnOk.Enabled = false; + this.btnOk.Text = "Zipping..."; + this.btnCancel.Enabled = true; + lblStatus.Text = "Zipping..."; + + var options = new WorkerOptions + { + ZipName = this.tbZipName.Text, + Folder = _folderName, + Encoding = "ibm437" + }; + + if (this.comboBox1.SelectedIndex != 0) + { + options.Encoding = this.comboBox1.SelectedItem.ToString(); + } + + if (this.radioFlavorSfxCmd.Checked) + options.ZipFlavor = 2; + else if (this.radioFlavorSfxGui.Checked) + options.ZipFlavor = 1; + else options.ZipFlavor = 0; + + if (this.radioZip64AsNecessary.Checked) + options.Zip64 = Zip64Option.AsNecessary; + else if (this.radioZip64Always.Checked) + options.Zip64 = Zip64Option.Always; + else options.Zip64 = Zip64Option.Never; + + options.Comment = String.Format("Encoding:{0} || Flavor:{1} || ZIP64:{2}\r\nCreated at {3} || {4}\r\n", + options.Encoding, + FlavorToString(options.ZipFlavor), + options.Zip64.ToString(), + System.DateTime.Now.ToString("yyyy-MMM-dd HH:mm:ss"), + this.Text); + + if (this.tbComment.Text != TB_COMMENT_NOTE) + options.Comment += this.tbComment.Text; + + _workerThread = new Thread(this.DoSave); + _workerThread.Name = "Zip Saver thread"; + _workerThread.Start(options); + this.Cursor = Cursors.WaitCursor; + } + + + private void DoSave(Object p) + { + WorkerOptions options = p as WorkerOptions; + try + { + using (var zip1 = new ZipFile()) + { + zip1.ProvisionalAlternateEncoding = System.Text.Encoding.GetEncoding(options.Encoding); + zip1.Comment = options.Comment; + zip1.AddDirectory(options.Folder); + _entriesToZip = zip1.EntryFileNames.Count; + SetProgressBars(); + zip1.SaveProgress += this.zip1_SaveProgress; + + zip1.UseZip64WhenSaving = options.Zip64; + + if (options.ZipFlavor == 1) + zip1.SaveSelfExtractor(options.ZipName, SelfExtractorFlavor.WinFormsApplication); + else if (options.ZipFlavor == 2) + zip1.SaveSelfExtractor(options.ZipName, SelfExtractorFlavor.ConsoleApplication); + else + zip1.Save(options.ZipName); + } + } + catch (System.Exception exc1) + { + MessageBox.Show(String.Format("Exception while zipping: {0}", exc1.Message)); + btnCancel_Click(null, null); + } + } + + + + void zip1_SaveProgress(object sender, SaveProgressEventArgs e) + { + switch (e.EventType) + { + case ZipProgressEventType.Saving_AfterWriteEntry: + StepArchiveProgress(e); + break; + case ZipProgressEventType.Saving_EntryBytesRead: + StepEntryProgress(e); + break; + case ZipProgressEventType.Saving_Completed: + SaveCompleted(); + break; + case ZipProgressEventType.Saving_AfterSaveTempArchive: + // this event only occurs when saving an SFX file + TempArchiveSaved(); + break; + } + if (_saveCanceled) + e.Cancel = true; + } + + + + private void StepArchiveProgress(SaveProgressEventArgs e) + { + if (this.progressBar1.InvokeRequired) + { + this.progressBar1.Invoke(new SaveEntryProgress(this.StepArchiveProgress), new object[] { e }); + } + else + { + if (!_saveCanceled) + { + _nFilesCompleted++; + this.progressBar1.PerformStep(); + _totalBytesAfterCompress += e.CurrentEntry.CompressedSize; + _totalBytesBeforeCompress += e.CurrentEntry.UncompressedSize; + + // reset the progress bar for the entry: + this.progressBar2.Value = this.progressBar2.Maximum = 1; + + this.Update(); + } + } + } + + + private void StepEntryProgress(SaveProgressEventArgs e) + { + if (this.progressBar2.InvokeRequired) + { + this.progressBar2.Invoke(new SaveEntryProgress(this.StepEntryProgress), new object[] { e }); + } + else + { + if (!_saveCanceled) + { + if (this.progressBar2.Maximum == 1) + { + // reset + Int64 max = e.TotalBytesToTransfer; + _progress2MaxFactor = 0; + while (max > System.Int32.MaxValue) + { + max /= 2; + _progress2MaxFactor++; + } + this.progressBar2.Maximum = (int)max; + lblStatus.Text = String.Format("{0} of {1} files...({2})", + _nFilesCompleted + 1, _entriesToZip, e.CurrentEntry.FileName); + } + + int xferred = e.BytesTransferred >> _progress2MaxFactor; + + this.progressBar2.Value = (xferred >= this.progressBar2.Maximum) + ? this.progressBar2.Maximum + : xferred; + + this.Update(); + } + } + } + + private void SaveCompleted() + { + if (this.lblStatus.InvokeRequired) + { + this.lblStatus.Invoke(new MethodInvoker(this.SaveCompleted)); + } + else + { + lblStatus.Text = String.Format("Done, Compressed {0} files, {1:N0}% of original.", + _nFilesCompleted, (100.00 * _totalBytesAfterCompress) / _totalBytesBeforeCompress); + ResetState(); + } + } + + private void ResetState() + { + this.btnCancel.Enabled = false; + this.btnOk.Enabled = true; + this.btnOk.Text = "Zip it!"; + this.progressBar1.Value = 0; + this.progressBar2.Value = 0; + this.Cursor = Cursors.Default; + if (!_workerThread.IsAlive) + _workerThread.Join(); + } + + + + + + + + + + + An event handler invoked before, during, and after the reading of a zip archive. + + + + + Depending on the particular event being signaled, different properties on the + parameter are set. The following table + summarizes the available EventTypes and the conditions under which this + event handler is invoked with a ReadProgressEventArgs with the given EventType. + + + + + value of EntryType + Meaning and conditions + + + + ZipProgressEventType.Reading_Started + Fired just as ZipFile.Read() begins. Meaningful properties: ArchiveName. + + + + + ZipProgressEventType.Reading_Completed + Fired when ZipFile.Read() has completed. Meaningful properties: ArchiveName. + + + + + ZipProgressEventType.Reading_ArchiveBytesRead + Fired while reading, updates the number of bytes read for the entire archive. + Meaningful properties: ArchiveName, CurrentEntry, BytesTransferred, TotalBytesToTransfer. + + + + + ZipProgressEventType.Reading_BeforeReadEntry + Indicates an entry is about to be read from the archive. + Meaningful properties: ArchiveName, EntriesTotal. + + + + + ZipProgressEventType.Reading_AfterReadEntry + Indicates an entry has just been read from the archive. + Meaningful properties: ArchiveName, EntriesTotal, CurrentEntry. + + + + + + + + + + + + + An event handler invoked before, during, and after extraction of + entries in the zip archive. + + + + + Depending on the particular event, different properties on the parameter are set. The following + table summarizes the available EventTypes and the conditions under + which this event handler is invoked with a + ExtractProgressEventArgs with the given EventType. + + + + + value of EntryType + Meaning and conditions + + + + ZipProgressEventType.Extracting_BeforeExtractAll + + Set when ExtractAll() begins. The ArchiveName, Overwrite, and + ExtractLocation properties are meaningful. + + + + ZipProgressEventType.Extracting_AfterExtractAll + + Set when ExtractAll() has completed. The ArchiveName, Overwrite, + and ExtractLocation properties are meaningful. + + + + + ZipProgressEventType.Extracting_BeforeExtractEntry + + Set when an Extract() on an entry in the ZipFile has begun. + Properties that are meaningful: ArchiveName, EntriesTotal, + CurrentEntry, Overwrite, ExtractLocation, EntriesExtracted. + + + + + ZipProgressEventType.Extracting_AfterExtractEntry + + Set when an Extract() on an entry in the ZipFile has completed. + Properties that are meaningful: ArchiveName, EntriesTotal, + CurrentEntry, Overwrite, ExtractLocation, EntriesExtracted. + + + + + ZipProgressEventType.Extracting_EntryBytesWritten + + Set within a call to Extract() on an entry in the ZipFile, as data + is extracted for the entry. Properties that are meaningful: + ArchiveName, CurrentEntry, BytesTransferred, TotalBytesToTransfer. + + + + + ZipProgressEventType.Extracting_ExtractEntryWouldOverwrite + + Set within a call to Extract() on an entry in the ZipFile, when the + extraction would overwrite an existing file. This event type is used + only when ExtractExistingFileAction on the ZipFile or + ZipEntry is set to InvokeExtractProgressEvent. + + + + + + + + + + private static bool justHadByteUpdate = false; + public static void ExtractProgress(object sender, ExtractProgressEventArgs e) + { + if(e.EventType == ZipProgressEventType.Extracting_EntryBytesWritten) + { + if (justHadByteUpdate) + Console.SetCursorPosition(0, Console.CursorTop); + + Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, e.TotalBytesToTransfer, + e.BytesTransferred / (0.01 * e.TotalBytesToTransfer )); + justHadByteUpdate = true; + } + else if(e.EventType == ZipProgressEventType.Extracting_BeforeExtractEntry) + { + if (justHadByteUpdate) + Console.WriteLine(); + Console.WriteLine("Extracting: {0}", e.CurrentEntry.FileName); + justHadByteUpdate= false; + } + } + + public static ExtractZip(string zipToExtract, string directory) + { + string TargetDirectory= "extract"; + using (var zip = ZipFile.Read(zipToExtract)) { + zip.ExtractProgress += ExtractProgress; + foreach (var e in zip1) + { + e.Extract(TargetDirectory, true); + } + } + } + + + + Public Shared Sub Main(ByVal args As String()) + Dim ZipToUnpack As String = "C1P3SML.zip" + Dim TargetDir As String = "ExtractTest_Extract" + Console.WriteLine("Extracting file {0} to {1}", ZipToUnpack, TargetDir) + Using zip1 As ZipFile = ZipFile.Read(ZipToUnpack) + AddHandler zip1.ExtractProgress, AddressOf MyExtractProgress + Dim e As ZipEntry + For Each e In zip1 + e.Extract(TargetDir, True) + Next + End Using + End Sub + + Private Shared justHadByteUpdate As Boolean = False + + Public Shared Sub MyExtractProgress(ByVal sender As Object, ByVal e As ExtractProgressEventArgs) + If (e.EventType = ZipProgressEventType.Extracting_EntryBytesWritten) Then + If ExtractTest.justHadByteUpdate Then + Console.SetCursorPosition(0, Console.CursorTop) + End If + Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, e.TotalBytesToTransfer, (CDbl(e.BytesTransferred) / (0.01 * e.TotalBytesToTransfer))) + ExtractTest.justHadByteUpdate = True + ElseIf (e.EventType = ZipProgressEventType.Extracting_BeforeExtractEntry) Then + If ExtractTest.justHadByteUpdate Then + Console.WriteLine + End If + Console.WriteLine("Extracting: {0}", e.CurrentEntry.FileName) + ExtractTest.justHadByteUpdate = False + End If + End Sub + + + + + + + + + + An event handler invoked before, during, and after Adding entries to a zip archive. + + + + Adding a large number of entries to a zip file can take a long + time. For example, when calling on a + directory that contains 50,000 files, it could take 3 minutes or so. + This event handler allws an application to track the progress of the Add + operation, and to optionally cancel a lengthy Add operation. + + + + + + int _numEntriesToAdd= 0; + int _numEntriesAdded= 0; + void AddProgressHandler(object sender, AddProgressEventArgs e) + { + switch (e.EventType) + { + case ZipProgressEventType.Adding_Started: + Console.WriteLine("Adding files to the zip..."); + break; + case ZipProgressEventType.Adding_AfterAddEntry: + _numEntriesAdded++; + Console.WriteLine(String.Format("Adding file {0}/{1} :: {2}", + _numEntriesAdded, _numEntriesToAdd, e.CurrentEntry.FileName)); + break; + case ZipProgressEventType.Adding_Completed: + Console.WriteLine("Added all files"); + break; + } + } + + void CreateTheZip() + { + using (ZipFile zip = new ZipFile()) + { + zip.AddProgress += AddProgressHandler; + zip.AddDirectory(System.IO.Path.GetFileName(DirToZip)); + zip.Save(ZipFileToCreate); + } + } + + + + + + Private Sub AddProgressHandler(ByVal sender As Object, ByVal e As AddProgressEventArgs) + Select Case e.EventType + Case ZipProgressEventType.Adding_Started + Console.WriteLine("Adding files to the zip...") + Exit Select + Case ZipProgressEventType.Adding_AfterAddEntry + Console.WriteLine(String.Format("Adding file {0}", e.CurrentEntry.FileName)) + Exit Select + Case ZipProgressEventType.Adding_Completed + Console.WriteLine("Added all files") + Exit Select + End Select + End Sub + + Sub CreateTheZip() + Using zip as ZipFile = New ZipFile + AddHandler zip.AddProgress, AddressOf AddProgressHandler + zip.AddDirectory(System.IO.Path.GetFileName(DirToZip)) + zip.Save(ZipFileToCreate); + End Using + End Sub + + + + + + + + + + + + An event that is raised when an error occurs during open or read of files + while saving a zip archive. + + + + + Errors can occur as a file is being saved to the zip archive. For + example, the File.Open may fail, or a File.Read may fail, because of + lock conflicts or other reasons. If you add a handler to this event, + you can handle such errors in your own code. If you don't add a + handler, the library will throw an exception if it encounters an I/O + error during a call to Save(). + + + + Setting a handler implicitly sets to + ZipErrorAction.InvokeErrorEvent. + + + + The handler you add applies to all items that are + subsequently added to the ZipFile instance. If you set this + property after you have added items to the ZipFile, but before you + have called Save(), errors that occur while saving those items + will not cause the error handler to be invoked. + + + + If you want to handle any errors that occur with any entry in the zip + file using the same error handler, then add your error handler once, + before adding any entries to the zip archive. + + + + In the error handler method, you need to set the property on the + ZipErrorEventArgs.CurrentEntry. This communicates back to + DotNetZip what you would like to do with this particular error. Within + an error handler, if you set the ZipEntry.ZipErrorAction property + on the ZipEntry to ZipErrorAction.InvokeErrorEvent or if + you don't set it at all, the library will throw the exception. (It is the + same as if you had set the ZipEntry.ZipErrorAction property on the + ZipEntry to ZipErrorAction.Throw.) If you set the + ZipErrorEventArgs.Cancel to true, the entire Save() will be + canceled. + + + + In the case that you use ZipErrorAction.Skip, implying that + you want to skip the entry for which there's been an error, DotNetZip + tries to seek backwards in the output stream, and truncate all bytes + written on behalf of that particular entry. This works only if the + output stream is seekable. It will not work, for example, when using + ASPNET's Response.OutputStream. + + + + + + + This example shows how to use an event handler to handle + errors during save of the zip file. + + + public static void MyZipError(object sender, ZipErrorEventArgs e) + { + Console.WriteLine("Error saving {0}...", e.FileName); + Console.WriteLine(" Exception: {0}", e.exception); + ZipEntry entry = e.CurrentEntry; + string response = null; + // Ask the user whether he wants to skip this error or not + do + { + Console.Write("Retry, Skip, Throw, or Cancel ? (R/S/T/C) "); + response = Console.ReadLine(); + Console.WriteLine(); + + } while (response != null && + response[0]!='S' && response[0]!='s' && + response[0]!='R' && response[0]!='r' && + response[0]!='T' && response[0]!='t' && + response[0]!='C' && response[0]!='c'); + + e.Cancel = (response[0]=='C' || response[0]=='c'); + + if (response[0]=='S' || response[0]=='s') + entry.ZipErrorAction = ZipErrorAction.Skip; + else if (response[0]=='R' || response[0]=='r') + entry.ZipErrorAction = ZipErrorAction.Retry; + else if (response[0]=='T' || response[0]=='t') + entry.ZipErrorAction = ZipErrorAction.Throw; + } + + public void SaveTheFile() + { + string directoryToZip = "fodder"; + string directoryInArchive = "files"; + string zipFileToCreate = "Archive.zip"; + using (var zip = new ZipFile()) + { + // set the event handler before adding any entries + zip.ZipError += MyZipError; + zip.AddDirectory(directoryToZip, directoryInArchive); + zip.Save(zipFileToCreate); + } + } + + + + Private Sub MyZipError(ByVal sender As Object, ByVal e As Ionic.Zip.ZipErrorEventArgs) + ' At this point, the application could prompt the user for an action to take. + ' But in this case, this application will simply automatically skip the file, in case of error. + Console.WriteLine("Zip Error, entry {0}", e.CurrentEntry.FileName) + Console.WriteLine(" Exception: {0}", e.exception) + ' set the desired ZipErrorAction on the CurrentEntry to communicate that to DotNetZip + e.CurrentEntry.ZipErrorAction = Zip.ZipErrorAction.Skip + End Sub + + Public Sub SaveTheFile() + Dim directoryToZip As String = "fodder" + Dim directoryInArchive As String = "files" + Dim zipFileToCreate as String = "Archive.zip" + Using zipArchive As ZipFile = New ZipFile + ' set the event handler before adding any entries + AddHandler zipArchive.ZipError, AddressOf MyZipError + zipArchive.AddDirectory(directoryToZip, directoryInArchive) + zipArchive.Save(zipFileToCreate) + End Using + End Sub + + + + + + + + + Extracts all of the items in the zip archive, to the specified path in the + filesystem. The path can be relative or fully-qualified. + + + + + This method will extract all entries in the ZipFile to the + specified path. + + + + If an extraction of a file from the zip archive would overwrite an + existing file in the filesystem, the action taken is dictated by the + ExtractExistingFile property, which overrides any setting you may have + made on individual ZipEntry instances. By default, if you have not + set that property on the ZipFile instance, the entry will not + be extracted, the existing file will not be overwritten and an + exception will be thrown. To change this, set the property, or use the + overload that allows you to + specify an ExtractExistingFileAction parameter. + + + + The action to take when an extract would overwrite an existing file + applies to all entries. If you want to set this on a per-entry basis, + then you must use one of the ZipEntry.Extract methods. + + + + This method will send verbose output messages to the , if it is set on the ZipFile + instance. + + + + You may wish to take advantage of the ExtractProgress event. + + + + About timestamps: When extracting a file entry from a zip archive, the + extracted file gets the last modified time of the entry as stored in + the archive. The archive may also store extended file timestamp + information, including last accessed and created times. If these are + present in the ZipEntry, then the extracted file will also get + these times. + + + + A Directory entry is somewhat different. It will get the times as + described for a file entry, but, if there are file entries in the zip + archive that, when extracted, appear in the just-created directory, + then when those file entries are extracted, the last modified and last + accessed times of the directory will change, as a side effect. The + result is that after an extraction of a directory and a number of + files within the directory, the last modified and last accessed + timestamps on the directory will reflect the time that the last file + was extracted into the directory, rather than the time stored in the + zip archive for the directory. + + + + To compensate, when extracting an archive with ExtractAll, + DotNetZip will extract all the file and directory entries as described + above, but it will then make a second pass on the directories, and + reset the times on the directories to reflect what is stored in the + zip archive. + + + + This compensation is performed only within the context of an + ExtractAll. If you call ZipEntry.Extract on a directory + entry, the timestamps on directory in the filesystem will reflect the + times stored in the zip. If you then call ZipEntry.Extract on + a file entry, which is extracted into the directory, the timestamps on + the directory will be updated to the current time. + + + + + This example extracts all the entries in a zip archive file, to the + specified target directory. The extraction will overwrite any + existing files silently. + + + String TargetDirectory= "unpack"; + using(ZipFile zip= ZipFile.Read(ZipFileToExtract)) + { + zip.ExtractExistingFile= ExtractExistingFileAction.OverwriteSilently; + zip.ExtractAll(TargetDirectory); + } + + + + Dim TargetDirectory As String = "unpack" + Using zip As ZipFile = ZipFile.Read(ZipFileToExtract) + zip.ExtractExistingFile= ExtractExistingFileAction.OverwriteSilently + zip.ExtractAll(TargetDirectory) + End Using + + + + + + + + The path to which the contents of the zipfile will be extracted. + The path can be relative or fully-qualified. + + + + + + Extracts all of the items in the zip archive, to the specified path in the + filesystem, using the specified behavior when extraction would overwrite an + existing file. + + + + + + This method will extract all entries in the ZipFile to the specified + path. For an extraction that would overwrite an existing file, the behavior + is dictated by , which overrides any + setting you may have made on individual ZipEntry instances. + + + + The action to take when an extract would overwrite an existing file + applies to all entries. If you want to set this on a per-entry basis, + then you must use or one of the similar methods. + + + + Calling this method is equivalent to setting the property and then calling . + + + + This method will send verbose output messages to the + , if it is set on the ZipFile instance. + + + + + This example extracts all the entries in a zip archive file, to the + specified target directory. It does not overwrite any existing files. + + String TargetDirectory= "c:\\unpack"; + using(ZipFile zip= ZipFile.Read(ZipFileToExtract)) + { + zip.ExtractAll(TargetDirectory, ExtractExistingFileAction.DontOverwrite); + } + + + + Dim TargetDirectory As String = "c:\unpack" + Using zip As ZipFile = ZipFile.Read(ZipFileToExtract) + zip.ExtractAll(TargetDirectory, ExtractExistingFileAction.DontOverwrite) + End Using + + + + + The path to which the contents of the zipfile will be extracted. + The path can be relative or fully-qualified. + + + + The action to take if extraction would overwrite an existing file. + + + + + + Reads a zip file archive and returns the instance. + + + + + The stream is read using the default System.Text.Encoding, which is the + IBM437 codepage. + + + + + Thrown if the ZipFile cannot be read. The implementation of this method + relies on System.IO.File.OpenRead, which can throw a variety of exceptions, + including specific exceptions if a file is not found, an unauthorized access + exception, exceptions for poorly formatted filenames, and so on. + + + + The name of the zip archive to open. This can be a fully-qualified or relative + pathname. + + + . + + The instance read from the zip archive. + + + + + Reads a zip file archive from the named filesystem file using the + specified options. + + + + + This version of the Read() method allows the caller to pass + in a TextWriter an Encoding, via an instance of the + ReadOptions class. The ZipFile is read in using the + specified encoding for entries where UTF-8 encoding is not + explicitly specified. + + + + + + + This example shows how to read a zip file using the Big-5 Chinese + code page (950), and extract each entry in the zip file, while + sending status messages out to the Console. + + + + For this code to work as intended, the zipfile must have been + created using the big5 code page (CP950). This is typical, for + example, when using WinRar on a machine with CP950 set as the + default code page. In that case, the names of entries within the + Zip archive will be stored in that code page, and reading the zip + archive must be done using that code page. If the application did + not use the correct code page in ZipFile.Read(), then names of + entries within the zip archive would not be correctly retrieved. + + + + string zipToExtract = "MyArchive.zip"; + string extractDirectory = "extract"; + var options = new ReadOptions + { + StatusMessageWriter = System.Console.Out, + Encoding = System.Text.Encoding.GetEncoding(950) + }; + using (ZipFile zip = ZipFile.Read(zipToExtract, options)) + { + foreach (ZipEntry e in zip) + { + e.Extract(extractDirectory); + } + } + + + + + Dim zipToExtract as String = "MyArchive.zip" + Dim extractDirectory as String = "extract" + Dim options as New ReadOptions + options.Encoding = System.Text.Encoding.GetEncoding(950) + options.StatusMessageWriter = System.Console.Out + Using zip As ZipFile = ZipFile.Read(zipToExtract, options) + Dim e As ZipEntry + For Each e In zip + e.Extract(extractDirectory) + Next + End Using + + + + + + + + This example shows how to read a zip file using the default + code page, to remove entries that have a modified date before a given threshold, + sending status messages out to a StringWriter. + + + + var options = new ReadOptions + { + StatusMessageWriter = new System.IO.StringWriter() + }; + using (ZipFile zip = ZipFile.Read("PackedDocuments.zip", options)) + { + var Threshold = new DateTime(2007,7,4); + // We cannot remove the entry from the list, within the context of + // an enumeration of said list. + // So we add the doomed entry to a list to be removed later. + // pass 1: mark the entries for removal + var MarkedEntries = new System.Collections.Generic.List<ZipEntry>(); + foreach (ZipEntry e in zip) + { + if (e.LastModified < Threshold) + MarkedEntries.Add(e); + } + // pass 2: actually remove the entry. + foreach (ZipEntry zombie in MarkedEntries) + zip.RemoveEntry(zombie); + zip.Comment = "This archive has been updated."; + zip.Save(); + } + // can now use contents of sw, eg store in an audit log + + + + Dim options as New ReadOptions + options.StatusMessageWriter = New System.IO.StringWriter + Using zip As ZipFile = ZipFile.Read("PackedDocuments.zip", options) + Dim Threshold As New DateTime(2007, 7, 4) + ' We cannot remove the entry from the list, within the context of + ' an enumeration of said list. + ' So we add the doomed entry to a list to be removed later. + ' pass 1: mark the entries for removal + Dim MarkedEntries As New System.Collections.Generic.List(Of ZipEntry) + Dim e As ZipEntry + For Each e In zip + If (e.LastModified < Threshold) Then + MarkedEntries.Add(e) + End If + Next + ' pass 2: actually remove the entry. + Dim zombie As ZipEntry + For Each zombie In MarkedEntries + zip.RemoveEntry(zombie) + Next + zip.Comment = "This archive has been updated." + zip.Save + End Using + ' can now use contents of sw, eg store in an audit log + + + + + Thrown if the zipfile cannot be read. The implementation of + this method relies on System.IO.File.OpenRead, which + can throw a variety of exceptions, including specific + exceptions if a file is not found, an unauthorized access + exception, exceptions for poorly formatted filenames, and so + on. + + + + The name of the zip archive to open. + This can be a fully-qualified or relative pathname. + + + + The set of options to use when reading the zip file. + + + The ZipFile instance read from the zip archive. + + + + + + + Reads a zip file archive using the specified text encoding, the specified + TextWriter for status messages, and the specified ReadProgress event handler, + and returns the instance. + + + + The name of the zip archive to open. + This can be a fully-qualified or relative pathname. + + + + An event handler for Read operations. + + + + The System.IO.TextWriter to use for writing verbose status messages + during operations on the zip archive. A console application may wish to + pass System.Console.Out to get messages on the Console. A graphical + or headless application may wish to capture the messages in a different + TextWriter, such as a System.IO.StringWriter. + + + + The System.Text.Encoding to use when reading in the zip archive. Be + careful specifying the encoding. If the value you use here is not the same + as the Encoding used when the zip archive was created (possibly by a + different archiver) you will get unexpected results and possibly exceptions. + + + The instance read from the zip archive. + + + + + Reads a zip archive from a stream. + + + + + + When reading from a file, it's probably easier to just use + ZipFile.Read(String, ReadOptions). This + overload is useful when when the zip archive content is + available from an already-open stream. The stream must be + open and readable and seekable when calling this method. The + stream is left open when the reading is completed. + + + + Using this overload, the stream is read using the default + System.Text.Encoding, which is the IBM437 + codepage. If you want to specify the encoding to use when + reading the zipfile content, see + ZipFile.Read(Stream, ReadOptions). This + + + + Reading of zip content begins at the current position in the + stream. This means if you have a stream that concatenates + regular data and zip data, if you position the open, readable + stream at the start of the zip data, you will be able to read + the zip archive using this constructor, or any of the ZipFile + constructors that accept a as + input. Some examples of where this might be useful: the zip + content is concatenated at the end of a regular EXE file, as + some self-extracting archives do. (Note: SFX files produced + by DotNetZip do not work this way; they can be read as normal + ZIP files). Another example might be a stream being read from + a database, where the zip content is embedded within an + aggregate stream of data. + + + + + + + This example shows how to Read zip content from a stream, and + extract one entry into a different stream. In this example, + the filename "NameOfEntryInArchive.doc", refers only to the + name of the entry within the zip archive. A file by that + name is not created in the filesystem. The I/O is done + strictly with the given streams. + + + + using (ZipFile zip = ZipFile.Read(InputStream)) + { + zip.Extract("NameOfEntryInArchive.doc", OutputStream); + } + + + + Using zip as ZipFile = ZipFile.Read(InputStream) + zip.Extract("NameOfEntryInArchive.doc", OutputStream) + End Using + + + + the stream containing the zip data. + + The ZipFile instance read from the stream + + + + + Reads a zip file archive from the given stream using the + specified options. + + + + + + When reading from a file, it's probably easier to just use + ZipFile.Read(String, ReadOptions). This + overload is useful when when the zip archive content is + available from an already-open stream. The stream must be + open and readable and seekable when calling this method. The + stream is left open when the reading is completed. + + + + Reading of zip content begins at the current position in the + stream. This means if you have a stream that concatenates + regular data and zip data, if you position the open, readable + stream at the start of the zip data, you will be able to read + the zip archive using this constructor, or any of the ZipFile + constructors that accept a as + input. Some examples of where this might be useful: the zip + content is concatenated at the end of a regular EXE file, as + some self-extracting archives do. (Note: SFX files produced + by DotNetZip do not work this way; they can be read as normal + ZIP files). Another example might be a stream being read from + a database, where the zip content is embedded within an + aggregate stream of data. + + + + the stream containing the zip data. + + + The set of options to use when reading the zip file. + + + + Thrown if the zip archive cannot be read. + + + The ZipFile instance read from the stream. + + + + + + + Reads a zip archive from a stream, using the specified text Encoding, the + specified TextWriter for status messages, + and the specified ReadProgress event handler. + + + + + Reading of zip content begins at the current position in the stream. This + means if you have a stream that concatenates regular data and zip data, if + you position the open, readable stream at the start of the zip data, you + will be able to read the zip archive using this constructor, or any of the + ZipFile constructors that accept a as + input. Some examples of where this might be useful: the zip content is + concatenated at the end of a regular EXE file, as some self-extracting + archives do. (Note: SFX files produced by DotNetZip do not work this + way). Another example might be a stream being read from a database, where + the zip content is embedded within an aggregate stream of data. + + + + the stream containing the zip data. + + + The System.IO.TextWriter to which verbose status messages are written + during operations on the ZipFile. For example, in a console + application, System.Console.Out works, and will get a message for each entry + added to the ZipFile. If the TextWriter is null, no verbose messages + are written. + + + + The text encoding to use when reading entries that do not have the UTF-8 + encoding bit set. Be careful specifying the encoding. If the value you use + here is not the same as the Encoding used when the zip archive was created + (possibly by a different archiver) you will get unexpected results and + possibly exceptions. See the + property for more information. + + + + An event handler for Read operations. + + + an instance of ZipFile + + + + Checks the given file to see if it appears to be a valid zip file. + + + + + Calling this method is equivalent to calling with the testExtract parameter set to false. + + + + The file to check. + true if the file appears to be a zip file. + + + + Checks a file to see if it is a valid zip file. + + + + + This method opens the specified zip file, reads in the zip archive, + verifying the ZIP metadata as it reads. + + + + If everything succeeds, then the method returns true. If anything fails - + for example if an incorrect signature or CRC is found, indicating a + corrupt file, the the method returns false. This method also returns + false for a file that does not exist. + + + + If is true, as part of its check, this + method reads in the content for each entry, expands it, and checks CRCs. + This provides an additional check beyond verifying the zip header and + directory data. + + + + If is true, and if any of the zip entries + are protected with a password, this method will return false. If you want + to verify a ZipFile that has entries which are protected with a + password, you will need to do that manually. + + + + + The zip file to check. + true if the caller wants to extract each entry. + true if the file contains a valid zip file. + + + + Checks a stream to see if it contains a valid zip archive. + + + + + This method reads the zip archive contained in the specified stream, verifying + the ZIP metadata as it reads. If testExtract is true, this method also extracts + each entry in the archive, dumping all the bits into . + + + + If everything succeeds, then the method returns true. If anything fails - + for example if an incorrect signature or CRC is found, indicating a corrupt + file, the the method returns false. This method also returns false for a + file that does not exist. + + + + If testExtract is true, this method reads in the content for each + entry, expands it, and checks CRCs. This provides an additional check + beyond verifying the zip header data. + + + + If testExtract is true, and if any of the zip entries are protected + with a password, this method will return false. If you want to verify a + ZipFile that has entries which are protected with a password, you will need + to do that manually. + + + + + + The stream to check. + true if the caller wants to extract each entry. + true if the stream contains a valid zip archive. + + + + Delete file with retry on UnauthorizedAccessException. + + + + + When calling File.Delete() on a file that has been "recently" + created, the call sometimes fails with + UnauthorizedAccessException. This method simply retries the Delete 3 + times with a sleep between tries. + + + + the name of the file to be deleted + + + + Saves the Zip archive to a file, specified by the Name property of the + ZipFile. + + + + + The ZipFile instance is written to storage, typically a zip file + in a filesystem, only when the caller calls Save. In the typical + case, the Save operation writes the zip content to a temporary file, and + then renames the temporary file to the desired name. If necessary, this + method will delete a pre-existing file before the rename. + + + + The property is specified either explicitly, + or implicitly using one of the parameterized ZipFile constructors. For + COM Automation clients, the Name property must be set explicitly, + because COM Automation clients cannot call parameterized constructors. + + + + When using a filesystem file for the Zip output, it is possible to call + Save multiple times on the ZipFile instance. With each + call the zip content is re-written to the same output file. + + + + Data for entries that have been added to the ZipFile instance is + written to the output when the Save method is called. This means + that the input streams for those entries must be available at the time + the application calls Save. If, for example, the application + adds entries with AddEntry using a dynamically-allocated + MemoryStream, the memory stream must not have been disposed + before the call to Save. See the property for more discussion of the + availability requirements of the input stream for an entry, and an + approach for providing just-in-time stream lifecycle management. + + + + + + + + Thrown if you haven't specified a location or stream for saving the zip, + either in the constructor or by setting the Name property, or if you try + to save a regular zip archive to a filename with a .exe extension. + + + + Thrown if or is non-zero, and the number + of segments that would be generated for the spanned zip file during the + save operation exceeds 99. If this happens, you need to increase the + segment size. + + + + + + Save the file to a new zipfile, with the given name. + + + + + This method allows the application to explicitly specify the name of the zip + file when saving. Use this when creating a new zip file, or when + updating a zip archive. + + + + An application can also save a zip archive in several places by calling this + method multiple times in succession, with different filenames. + + + + The ZipFile instance is written to storage, typically a zip file in a + filesystem, only when the caller calls Save. The Save operation writes + the zip content to a temporary file, and then renames the temporary file + to the desired name. If necessary, this method will delete a pre-existing file + before the rename. + + + + + + Thrown if you specify a directory for the filename. + + + + The name of the zip archive to save to. Existing files will + be overwritten with great prejudice. + + + + This example shows how to create and Save a zip file. + + using (ZipFile zip = new ZipFile()) + { + zip.AddDirectory(@"c:\reports\January"); + zip.Save("January.zip"); + } + + + + Using zip As New ZipFile() + zip.AddDirectory("c:\reports\January") + zip.Save("January.zip") + End Using + + + + + + This example shows how to update a zip file. + + using (ZipFile zip = ZipFile.Read("ExistingArchive.zip")) + { + zip.AddFile("NewData.csv"); + zip.Save("UpdatedArchive.zip"); + } + + + + Using zip As ZipFile = ZipFile.Read("ExistingArchive.zip") + zip.AddFile("NewData.csv") + zip.Save("UpdatedArchive.zip") + End Using + + + + + + + Save the zip archive to the specified stream. + + + + + The ZipFile instance is written to storage - typically a zip file + in a filesystem, but using this overload, the storage can be anything + accessible via a writable stream - only when the caller calls Save. + + + + Use this method to save the zip content to a stream directly. A common + scenario is an ASP.NET application that dynamically generates a zip file + and allows the browser to download it. The application can call + Save(Response.OutputStream) to write a zipfile directly to the + output stream, without creating a zip file on the disk on the ASP.NET + server. + + + + Be careful when saving a file to a non-seekable stream, including + Response.OutputStream. When DotNetZip writes to a non-seekable + stream, the zip archive is formatted in such a way that may not be + compatible with all zip tools on all platforms. It's a perfectly legal + and compliant zip file, but some people have reported problems opening + files produced this way using the Mac OS archive utility. + + + + + + + This example saves the zipfile content into a MemoryStream, and + then gets the array of bytes from that MemoryStream. + + + using (var zip = new Ionic.Zip.ZipFile()) + { + zip.CompressionLevel= Ionic.Zlib.CompressionLevel.BestCompression; + zip.Password = "VerySecret."; + zip.Encryption = EncryptionAlgorithm.WinZipAes128; + zip.AddFile(sourceFileName); + MemoryStream output = new MemoryStream(); + zip.Save(output); + + byte[] zipbytes = output.ToArray(); + } + + + + + + This example shows a pitfall you should avoid. DO NOT read + from a stream, then try to save to the same stream. DO + NOT DO THIS: + + + + using (var fs = new FileStream(filename, FileMode.Open)) + { + using (var zip = Ionic.Zip.ZipFile.Read(inputStream)) + { + zip.AddEntry("Name1.txt", "this is the content"); + zip.Save(inputStream); // NO NO NO!! + } + } + + + + Better like this: + + + + using (var zip = Ionic.Zip.ZipFile.Read(filename)) + { + zip.AddEntry("Name1.txt", "this is the content"); + zip.Save(); // YES! + } + + + + + + The System.IO.Stream to write to. It must be + writable. If you created the ZipFile instance by calling + ZipFile.Read(), this stream must not be the same stream + you passed to ZipFile.Read(). + + + + + Adds to the ZipFile a set of files from the current working directory on + disk, that conform to the specified criteria. + + + + + This method selects files from the the current working directory matching + the specified criteria, and adds them to the ZipFile. + + + + Specify the criteria in statements of 3 elements: a noun, an operator, and + a value. Consider the string "name != *.doc" . The noun is "name". The + operator is "!=", implying "Not Equal". The value is "*.doc". That + criterion, in English, says "all files with a name that does not end in + the .doc extension." + + + + Supported nouns include "name" (or "filename") for the filename; "atime", + "mtime", and "ctime" for last access time, last modfied time, and created + time of the file, respectively; "attributes" (or "attrs") for the file + attributes; "size" (or "length") for the file length (uncompressed), and + "type" for the type of object, either a file or a directory. The + "attributes", "name" and "type" nouns both support = and != as operators. + The "size", "atime", "mtime", and "ctime" nouns support = and !=, and + >, >=, <, <= as well. The times are taken to be expressed in + local time. + + + + Specify values for the file attributes as a string with one or more of the + characters H,R,S,A,I,L in any order, implying file attributes of Hidden, + ReadOnly, System, Archive, NotContextIndexed, and ReparsePoint (symbolic + link) respectively. + + + + To specify a time, use YYYY-MM-DD-HH:mm:ss or YYYY/MM/DD-HH:mm:ss as the + format. If you omit the HH:mm:ss portion, it is assumed to be 00:00:00 + (midnight). + + + + The value for a size criterion is expressed in integer quantities of bytes, + kilobytes (use k or kb after the number), megabytes (m or mb), or gigabytes + (g or gb). + + + + The value for a name is a pattern to match against the filename, potentially + including wildcards. The pattern follows CMD.exe glob rules: * implies one + or more of any character, while ? implies one character. If the name + pattern contains any slashes, it is matched to the entire filename, + including the path; otherwise, it is matched against only the filename + without the path. This means a pattern of "*\*.*" matches all files one + directory level deep, while a pattern of "*.*" matches all files in all + directories. + + + + To specify a name pattern that includes spaces, use single quotes around the + pattern. A pattern of "'* *.*'" will match all files that have spaces in + the filename. The full criteria string for that would be "name = '* *.*'" . + + + + The value for a type criterion is either F (implying a file) or D (implying + a directory). + + + + Some examples: + + + + + criteria + Files retrieved + + + + name != *.xls + any file with an extension that is not .xls + + + + + name = *.mp3 + any file with a .mp3 extension. + + + + + *.mp3 + (same as above) any file with a .mp3 extension. + + + + + attributes = A + all files whose attributes include the Archive bit. + + + + + attributes != H + all files whose attributes do not include the Hidden bit. + + + + + mtime > 2009-01-01 + all files with a last modified time after January 1st, 2009. + + + + + size > 2gb + all files whose uncompressed size is greater than 2gb. + + + + + type = D + all directories in the filesystem. + + + + + + You can combine criteria with the conjunctions AND or OR. Using a string + like "name = *.txt AND size >= 100k" for the selectionCriteria retrieves + entries whose names end in .txt, and whose uncompressed size is greater than + or equal to 100 kilobytes. + + + + For more complex combinations of criteria, you can use parenthesis to group + clauses in the boolean logic. Without parenthesis, the precedence of the + criterion atoms is determined by order of appearance. Unlike the C# + language, the AND conjunction does not take precendence over the logical OR. + This is important only in strings that contain 3 or more criterion atoms. + In other words, "name = *.txt and size > 1000 or attributes = H" implies + "((name = *.txt AND size > 1000) OR attributes = H)" while "attributes = + H OR name = *.txt and size > 1000" evaluates to "((attributes = H OR name + = *.txt) AND size > 1000)". When in doubt, use parenthesis. + + + + Using time properties requires some extra care. If you want to retrieve all + entries that were last updated on 2009 February 14, specify a time range + like so:"mtime >= 2009-02-14 AND mtime < 2009-02-15". Read this to + say: all files updated after 12:00am on February 14th, until 12:00am on + February 15th. You can use the same bracketing approach to specify any time + period - a year, a month, a week, and so on. + + + + The syntax allows one special case: if you provide a string with no spaces, it is + treated as a pattern to match for the filename. Therefore a string like "*.xls" + will be equivalent to specifying "name = *.xls". + + + + There is no logic in this method that insures that the file inclusion + criteria are internally consistent. For example, it's possible to specify + criteria that says the file must have a size of less than 100 bytes, as well + as a size that is greater than 1000 bytes. Obviously no file will ever + satisfy such criteria, but this method does not detect such logical + inconsistencies. The caller is responsible for insuring the criteria are + sensible. + + + + Using this method, the file selection does not recurse into + subdirectories, and the full path of the selected files is included in the + entries added into the zip archive. If you don't like these behaviors, + see the other overloads of this method. + + + + + This example zips up all *.csv files in the current working directory. + + using (ZipFile zip = new ZipFile()) + { + // To just match on filename wildcards, + // use the shorthand form of the selectionCriteria string. + zip.AddSelectedFiles("*.csv"); + zip.Save(PathToZipArchive); + } + + + Using zip As ZipFile = New ZipFile() + zip.AddSelectedFiles("*.csv") + zip.Save(PathToZipArchive) + End Using + + + + The criteria for file selection + + + + Adds to the ZipFile a set of files from the disk that conform to the + specified criteria, optionally recursing into subdirectories. + + + + + This method selects files from the the current working directory matching + the specified criteria, and adds them to the ZipFile. If + recurseDirectories is true, files are also selected from + subdirectories, and the directory structure in the filesystem is + reproduced in the zip archive, rooted at the current working directory. + + + + Using this method, the full path of the selected files is included in the + entries added into the zip archive. If you don't want this behavior, use + one of the overloads of this method that allows the specification of a + directoryInArchive. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + + + + This example zips up all *.xml files in the current working directory, or any + subdirectory, that are larger than 1mb. + + + using (ZipFile zip = new ZipFile()) + { + // Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.xml and size > 1024kb", true); + zip.Save(PathToZipArchive); + } + + + Using zip As ZipFile = New ZipFile() + ' Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.xml and size > 1024kb", true) + zip.Save(PathToZipArchive) + End Using + + + + The criteria for file selection + + + If true, the file selection will recurse into subdirectories. + + + + + Adds to the ZipFile a set of files from a specified directory in the + filesystem, that conform to the specified criteria. + + + + + This method selects files that conform to the specified criteria, from the + the specified directory on disk, and adds them to the ZipFile. The search + does not recurse into subdirectores. + + + + Using this method, the full filesystem path of the files on disk is + reproduced on the entries added to the zip file. If you don't want this + behavior, use one of the other overloads of this method. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + + + + This example zips up all *.xml files larger than 1mb in the directory + given by "d:\rawdata". + + + using (ZipFile zip = new ZipFile()) + { + // Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.xml and size > 1024kb", "d:\\rawdata"); + zip.Save(PathToZipArchive); + } + + + + Using zip As ZipFile = New ZipFile() + ' Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.xml and size > 1024kb", "d:\rawdata) + zip.Save(PathToZipArchive) + End Using + + + + The criteria for file selection + + + The name of the directory on the disk from which to select files. + + + + + Adds to the ZipFile a set of files from the specified directory on disk, + that conform to the specified criteria. + + + + + + This method selects files from the the specified disk directory matching + the specified selection criteria, and adds them to the ZipFile. If + recurseDirectories is true, files are also selected from + subdirectories. + + + + The full directory structure in the filesystem is reproduced on the + entries added to the zip archive. If you don't want this behavior, use + one of the overloads of this method that allows the specification of a + directoryInArchive. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + + + This example zips up all *.csv files in the "files" directory, or any + subdirectory, that have been saved since 2009 February 14th. + + + using (ZipFile zip = new ZipFile()) + { + // Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.csv and mtime > 2009-02-14", "files", true); + zip.Save(PathToZipArchive); + } + + + Using zip As ZipFile = New ZipFile() + ' Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.csv and mtime > 2009-02-14", "files", true) + zip.Save(PathToZipArchive) + End Using + + + + + This example zips up all files in the current working + directory, and all its child directories, except those in + the excludethis subdirectory. + + Using Zip As ZipFile = New ZipFile(zipfile) + Zip.AddSelectedFfiles("name != 'excludethis\*.*'", datapath, True) + Zip.Save() + End Using + + + + The criteria for file selection + + + The filesystem path from which to select files. + + + + If true, the file selection will recurse into subdirectories. + + + + + Adds to the ZipFile a selection of files from the specified directory on + disk, that conform to the specified criteria, and using a specified root + path for entries added to the zip archive. + + + + + This method selects files from the specified disk directory matching the + specified selection criteria, and adds those files to the ZipFile, using + the specified directory path in the archive. The search does not recurse + into subdirectories. For details on the syntax for the selectionCriteria + parameter, see . + + + + + + + This example zips up all *.psd files in the "photos" directory that have + been saved since 2009 February 14th, and puts them all in a zip file, + using the directory name of "content" in the zip archive itself. When the + zip archive is unzipped, the folder containing the .psd files will be + named "content". + + + using (ZipFile zip = new ZipFile()) + { + // Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.psd and mtime > 2009-02-14", "photos", "content"); + zip.Save(PathToZipArchive); + } + + + Using zip As ZipFile = New ZipFile + zip.AddSelectedFiles("name = *.psd and mtime > 2009-02-14", "photos", "content") + zip.Save(PathToZipArchive) + End Using + + + + + The criteria for selection of files to add to the ZipFile. + + + + The path to the directory in the filesystem from which to select files. + + + + Specifies a directory path to use to in place of the + directoryOnDisk. This path may, or may not, correspond to a real + directory in the current filesystem. If the files within the zip are + later extracted, this is the path used for the extracted file. Passing + null (nothing in VB) will use the path on the file name, if any; in other + words it would use directoryOnDisk, plus any subdirectory. Passing + the empty string ("") will insert the item at the root path within the + archive. + + + + + Adds to the ZipFile a selection of files from the specified directory on + disk, that conform to the specified criteria, optionally recursing through + subdirectories, and using a specified root path for entries added to the + zip archive. + + + + This method selects files from the specified disk directory that match the + specified selection criteria, and adds those files to the ZipFile, using + the specified directory path in the archive. If recurseDirectories + is true, files are also selected from subdirectories, and the directory + structure in the filesystem is reproduced in the zip archive, rooted at + the directory specified by directoryOnDisk. For details on the + syntax for the selectionCriteria parameter, see . + + + + + This example zips up all files that are NOT *.pst files, in the current + working directory and any subdirectories. + + + using (ZipFile zip = new ZipFile()) + { + zip.AddSelectedFiles("name != *.pst", SourceDirectory, "backup", true); + zip.Save(PathToZipArchive); + } + + + Using zip As ZipFile = New ZipFile + zip.AddSelectedFiles("name != *.pst", SourceDirectory, "backup", true) + zip.Save(PathToZipArchive) + End Using + + + + + The criteria for selection of files to add to the ZipFile. + + + + The path to the directory in the filesystem from which to select files. + + + + Specifies a directory path to use to in place of the + directoryOnDisk. This path may, or may not, correspond to a real + directory in the current filesystem. If the files within the zip are + later extracted, this is the path used for the extracted file. Passing + null (nothing in VB) will use the path on the file name, if any; in other + words it would use directoryOnDisk, plus any subdirectory. Passing + the empty string ("") will insert the item at the root path within the + archive. + + + + If true, the method also scans subdirectories for files matching the + criteria. + + + + + Updates the ZipFile with a selection of files from the disk that conform + to the specified criteria. + + + + This method selects files from the specified disk directory that match the + specified selection criteria, and Updates the ZipFile with those + files, using the specified directory path in the archive. If + recurseDirectories is true, files are also selected from + subdirectories, and the directory structure in the filesystem is + reproduced in the zip archive, rooted at the directory specified by + directoryOnDisk. For details on the syntax for the + selectionCriteria parameter, see . + + + + The criteria for selection of files to add to the ZipFile. + + + + The path to the directory in the filesystem from which to select files. + + + + Specifies a directory path to use to in place of the + directoryOnDisk. This path may, or may not, correspond to a + real directory in the current filesystem. If the files within the zip + are later extracted, this is the path used for the extracted file. + Passing null (nothing in VB) will use the path on the file name, if + any; in other words it would use directoryOnDisk, plus any + subdirectory. Passing the empty string ("") will insert the item at + the root path within the archive. + + + + If true, the method also scans subdirectories for files matching the criteria. + + + + + + + Retrieve entries from the zipfile by specified criteria. + + + + + This method allows callers to retrieve the collection of entries from the zipfile + that fit the specified criteria. The criteria are described in a string format, and + can include patterns for the filename; constraints on the size of the entry; + constraints on the last modified, created, or last accessed time for the file + described by the entry; or the attributes of the entry. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + This method is intended for use with a ZipFile that has been read from storage. + When creating a new ZipFile, this method will work only after the ZipArchive has + been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip + archive from storage.) Calling SelectEntries on a ZipFile that has not yet been + saved will deliver undefined results. + + + + + Thrown if selectionCriteria has an invalid syntax. + + + + This example selects all the PhotoShop files from within an archive, and extracts them + to the current working directory. + + using (ZipFile zip1 = ZipFile.Read(ZipFileName)) + { + var PhotoShopFiles = zip1.SelectEntries("*.psd"); + foreach (ZipEntry psd in PhotoShopFiles) + { + psd.Extract(); + } + } + + + Using zip1 As ZipFile = ZipFile.Read(ZipFileName) + Dim PhotoShopFiles as ICollection(Of ZipEntry) + PhotoShopFiles = zip1.SelectEntries("*.psd") + Dim psd As ZipEntry + For Each psd In PhotoShopFiles + psd.Extract + Next + End Using + + + the string that specifies which entries to select + a collection of ZipEntry objects that conform to the inclusion spec + + + + Retrieve entries from the zipfile by specified criteria. + + + + + This method allows callers to retrieve the collection of entries from the zipfile + that fit the specified criteria. The criteria are described in a string format, and + can include patterns for the filename; constraints on the size of the entry; + constraints on the last modified, created, or last accessed time for the file + described by the entry; or the attributes of the entry. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + This method is intended for use with a ZipFile that has been read from storage. + When creating a new ZipFile, this method will work only after the ZipArchive has + been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip + archive from storage.) Calling SelectEntries on a ZipFile that has not yet been + saved will deliver undefined results. + + + + + Thrown if selectionCriteria has an invalid syntax. + + + + + using (ZipFile zip1 = ZipFile.Read(ZipFileName)) + { + var UpdatedPhotoShopFiles = zip1.SelectEntries("*.psd", "UpdatedFiles"); + foreach (ZipEntry e in UpdatedPhotoShopFiles) + { + // prompt for extract here + if (WantExtract(e.FileName)) + e.Extract(); + } + } + + + Using zip1 As ZipFile = ZipFile.Read(ZipFileName) + Dim UpdatedPhotoShopFiles As ICollection(Of ZipEntry) = zip1.SelectEntries("*.psd", "UpdatedFiles") + Dim e As ZipEntry + For Each e In UpdatedPhotoShopFiles + ' prompt for extract here + If Me.WantExtract(e.FileName) Then + e.Extract + End If + Next + End Using + + + the string that specifies which entries to select + + + the directory in the archive from which to select entries. If null, then + all directories in the archive are used. + + + a collection of ZipEntry objects that conform to the inclusion spec + + + + Remove entries from the zipfile by specified criteria. + + + + + This method allows callers to remove the collection of entries from the zipfile + that fit the specified criteria. The criteria are described in a string format, and + can include patterns for the filename; constraints on the size of the entry; + constraints on the last modified, created, or last accessed time for the file + described by the entry; or the attributes of the entry. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + This method is intended for use with a ZipFile that has been read from storage. + When creating a new ZipFile, this method will work only after the ZipArchive has + been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip + archive from storage.) Calling SelectEntries on a ZipFile that has not yet been + saved will deliver undefined results. + + + + + Thrown if selectionCriteria has an invalid syntax. + + + + This example removes all entries in a zip file that were modified prior to January 1st, 2008. + + using (ZipFile zip1 = ZipFile.Read(ZipFileName)) + { + // remove all entries from prior to Jan 1, 2008 + zip1.RemoveEntries("mtime < 2008-01-01"); + // don't forget to save the archive! + zip1.Save(); + } + + + Using zip As ZipFile = ZipFile.Read(ZipFileName) + ' remove all entries from prior to Jan 1, 2008 + zip1.RemoveEntries("mtime < 2008-01-01") + ' do not forget to save the archive! + zip1.Save + End Using + + + the string that specifies which entries to select + the number of entries removed + + + + Remove entries from the zipfile by specified criteria, and within the specified + path in the archive. + + + + + This method allows callers to remove the collection of entries from the zipfile + that fit the specified criteria. The criteria are described in a string format, and + can include patterns for the filename; constraints on the size of the entry; + constraints on the last modified, created, or last accessed time for the file + described by the entry; or the attributes of the entry. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + This method is intended for use with a ZipFile that has been read from storage. + When creating a new ZipFile, this method will work only after the ZipArchive has + been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip + archive from storage.) Calling SelectEntries on a ZipFile that has not yet been + saved will deliver undefined results. + + + + + Thrown if selectionCriteria has an invalid syntax. + + + + + using (ZipFile zip1 = ZipFile.Read(ZipFileName)) + { + // remove all entries from prior to Jan 1, 2008 + zip1.RemoveEntries("mtime < 2008-01-01", "documents"); + // a call to ZipFile.Save will make the modifications permanent + zip1.Save(); + } + + + Using zip As ZipFile = ZipFile.Read(ZipFileName) + ' remove all entries from prior to Jan 1, 2008 + zip1.RemoveEntries("mtime < 2008-01-01", "documents") + ' a call to ZipFile.Save will make the modifications permanent + zip1.Save + End Using + + + + the string that specifies which entries to select + + the directory in the archive from which to select entries. If null, then + all directories in the archive are used. + + the number of entries removed + + + + Selects and Extracts a set of Entries from the ZipFile. + + + + + The entries are extracted into the current working directory. + + + + If any of the files to be extracted already exist, then the action taken is as + specified in the property on the + corresponding ZipEntry instance. By default, the action taken in this case is to + throw an exception. + + + + For information on the syntax of the selectionCriteria string, + see . + + + + + This example shows how extract all XML files modified after 15 January 2009. + + using (ZipFile zip = ZipFile.Read(zipArchiveName)) + { + zip.ExtractSelectedEntries("name = *.xml and mtime > 2009-01-15"); + } + + + the selection criteria for entries to extract. + + + + + + Selects and Extracts a set of Entries from the ZipFile. + + + + + The entries are extracted into the current working directory. When extraction would would + overwrite an existing filesystem file, the action taken is as specified in the + parameter. + + + + For information on the syntax of the string describing the entry selection criteria, + see . + + + + + This example shows how extract all XML files modified after 15 January 2009, + overwriting any existing files. + + using (ZipFile zip = ZipFile.Read(zipArchiveName)) + { + zip.ExtractSelectedEntries("name = *.xml and mtime > 2009-01-15", + ExtractExistingFileAction.OverwriteSilently); + } + + + + the selection criteria for entries to extract. + + + The action to take if extraction would overwrite an existing file. + + + + + Selects and Extracts a set of Entries from the ZipFile. + + + + + The entries are selected from the specified directory within the archive, and then + extracted into the current working directory. + + + + If any of the files to be extracted already exist, then the action taken is as + specified in the property on the + corresponding ZipEntry instance. By default, the action taken in this case is to + throw an exception. + + + + For information on the syntax of the string describing the entry selection criteria, + see . + + + + + This example shows how extract all XML files modified after 15 January 2009, + and writes them to the "unpack" directory. + + using (ZipFile zip = ZipFile.Read(zipArchiveName)) + { + zip.ExtractSelectedEntries("name = *.xml and mtime > 2009-01-15","unpack"); + } + + + + the selection criteria for entries to extract. + + + the directory in the archive from which to select entries. If null, then + all directories in the archive are used. + + + + + + + Selects and Extracts a set of Entries from the ZipFile. + + + + + The entries are extracted into the specified directory. If any of the files to be + extracted already exist, an exception will be thrown. + + + For information on the syntax of the string describing the entry selection criteria, + see . + + + + the selection criteria for entries to extract. + + + the directory in the archive from which to select entries. If null, then + all directories in the archive are used. + + + + the directory on the disk into which to extract. It will be created + if it does not exist. + + + + + Selects and Extracts a set of Entries from the ZipFile. + + + + + The entries are extracted into the specified directory. When extraction would would + overwrite an existing filesystem file, the action taken is as specified in the + parameter. + + + + For information on the syntax of the string describing the entry selection criteria, + see . + + + + + This example shows how extract all files with an XML extension or with a size larger than 100,000 bytes, + and puts them in the unpack directory. For any files that already exist in + that destination directory, they will not be overwritten. + + using (ZipFile zip = ZipFile.Read(zipArchiveName)) + { + zip.ExtractSelectedEntries("name = *.xml or size > 100000", + null, + "unpack", + ExtractExistingFileAction.DontOverwrite); + } + + + + the selection criteria for entries to extract. + + + The directory on the disk into which to extract. It will be created if it does not exist. + + + + The directory in the archive from which to select entries. If null, then + all directories in the archive are used. + + + + The action to take if extraction would overwrite an existing file. + + + + + + + + Static constructor for ZipFile + + + Code Pages 437 and 1252 for English are same + Code Page 1252 Windows Latin 1 (ANSI) - + Code Page 437 MS-DOS Latin US - + + + + + The default text encoding used in zip archives. It is numeric 437, also + known as IBM437. + + + + + + Generic IEnumerator support, for use of a ZipFile in an enumeration. + + + + You probably do not want to call GetEnumerator explicitly. Instead + it is implicitly called when you use a loop in C#, or a + For Each loop in VB.NET. + + + + This example reads a zipfile of a given name, then enumerates the + entries in that zip file, and displays the information about each + entry on the Console. + + using (ZipFile zip = ZipFile.Read(zipfile)) + { + bool header = true; + foreach (ZipEntry e in zip) + { + if (header) + { + System.Console.WriteLine("Zipfile: {0}", zip.Name); + System.Console.WriteLine("Version Needed: 0x{0:X2}", e.VersionNeeded); + System.Console.WriteLine("BitField: 0x{0:X2}", e.BitField); + System.Console.WriteLine("Compression Method: 0x{0:X2}", e.CompressionMethod); + System.Console.WriteLine("\n{1,-22} {2,-6} {3,4} {4,-8} {0}", + "Filename", "Modified", "Size", "Ratio", "Packed"); + System.Console.WriteLine(new System.String('-', 72)); + header = false; + } + + System.Console.WriteLine("{1,-22} {2,-6} {3,4:F0}% {4,-8} {0}", + e.FileName, + e.LastModified.ToString("yyyy-MM-dd HH:mm:ss"), + e.UncompressedSize, + e.CompressionRatio, + e.CompressedSize); + + e.Extract(); + } + } + + + + Dim ZipFileToExtract As String = "c:\foo.zip" + Using zip As ZipFile = ZipFile.Read(ZipFileToExtract) + Dim header As Boolean = True + Dim e As ZipEntry + For Each e In zip + If header Then + Console.WriteLine("Zipfile: {0}", zip.Name) + Console.WriteLine("Version Needed: 0x{0:X2}", e.VersionNeeded) + Console.WriteLine("BitField: 0x{0:X2}", e.BitField) + Console.WriteLine("Compression Method: 0x{0:X2}", e.CompressionMethod) + Console.WriteLine(ChrW(10) & "{1,-22} {2,-6} {3,4} {4,-8} {0}", _ + "Filename", "Modified", "Size", "Ratio", "Packed" ) + Console.WriteLine(New String("-"c, 72)) + header = False + End If + Console.WriteLine("{1,-22} {2,-6} {3,4:F0}% {4,-8} {0}", _ + e.FileName, _ + e.LastModified.ToString("yyyy-MM-dd HH:mm:ss"), _ + e.UncompressedSize, _ + e.CompressionRatio, _ + e.CompressedSize ) + e.Extract + Next + End Using + + + + A generic enumerator suitable for use within a foreach loop. + + + + An IEnumerator, for use of a ZipFile in a foreach construct. + + + + This method is included for COM support. An application generally does not call + this method directly. It is called implicitly by COM clients when enumerating + the entries in the ZipFile instance. In VBScript, this is done with a For Each + statement. In Javascript, this is done with new Enumerator(zipfile). + + + + The IEnumerator over the entries in the ZipFile. + + + + + Options for using ZIP64 extensions when saving zip archives. + + + + + + Designed many years ago, the original zip + specification from PKWARE allowed for 32-bit quantities for the + compressed and uncompressed sizes of zip entries, as well as a 32-bit quantity + for specifying the length of the zip archive itself, and a maximum of 65535 + entries. These limits are now regularly exceeded in many backup and archival + scenarios. Recently, PKWare added extensions to the original zip spec, called + "ZIP64 extensions", to raise those limitations. This property governs whether + DotNetZip will use those extensions when writing zip archives. The use of + these extensions is optional and explicit in DotNetZip because, despite the + status of ZIP64 as a bona fide standard, many other zip tools and libraries do + not support ZIP64, and therefore a zip file with ZIP64 extensions may be + unreadable by some of those other tools. + + + + Set this property to to always use ZIP64 + extensions when saving, regardless of whether your zip archive needs it. + Suppose you add 5 files, each under 100k, to a ZipFile. If you specify Always + for this flag, you will get a ZIP64 archive, though the archive does not need + to use ZIP64 because none of the original zip limits had been exceeded. + + + + Set this property to to tell the DotNetZip + library to never use ZIP64 extensions. This is useful for maximum + compatibility and interoperability, at the expense of the capability of + handling large files or large archives. NB: Windows Explorer in Windows XP + and Windows Vista cannot currently extract files from a zip64 archive, so if + you want to guarantee that a zip archive produced by this library will work in + Windows Explorer, use Never. If you set this property to , and your application creates a zip that would + exceed one of the Zip limits, the library will throw an exception while saving + the zip file. + + + + Set this property to to tell the + DotNetZip library to use the ZIP64 extensions when required by the + entry. After the file is compressed, the original and compressed sizes are + checked, and if they exceed the limits described above, then zip64 can be + used. That is the general idea, but there is an additional wrinkle when saving + to a non-seekable device, like the ASP.NET Response.OutputStream, or + Console.Out. When using non-seekable streams for output, the entry + header - which indicates whether zip64 is in use - is emitted before it is + known if zip64 is necessary. It is only after all entries have been saved + that it can be known if ZIP64 will be required. On seekable output streams, + after saving all entries, the library can seek backward and re-emit the zip + file header to be consistent with the actual ZIP64 requirement. But using a + non-seekable output stream, the library cannot seek backward, so the header + can never be changed. In other words, the archive's use of ZIP64 extensions is + not alterable after the header is emitted. Therefore, when saving to + non-seekable streams, using is the same + as using : it will always produce a zip + archive that uses ZIP64 extensions. + + + + + + + The default behavior, which is "Never". + (For COM clients, this is a 0 (zero).) + + + + + Do not use ZIP64 extensions when writing zip archives. + (For COM clients, this is a 0 (zero).) + + + + + Use ZIP64 extensions when writing zip archives, as necessary. + For example, when a single entry exceeds 0xFFFFFFFF in size, or when the archive as a whole + exceeds 0xFFFFFFFF in size, or when there are more than 65535 entries in an archive. + (For COM clients, this is a 1.) + + + + + Always use ZIP64 extensions when writing zip archives, even when unnecessary. + (For COM clients, this is a 2.) + + + + + An enum representing the values on a three-way toggle switch + for various options in the library. This might be used to + specify whether to employ a particular text encoding, or to use + ZIP64 extensions, or some other option. + + + + + The default behavior. This is the same as "Never". + (For COM clients, this is a 0 (zero).) + + + + + Never use the associated option. + (For COM clients, this is a 0 (zero).) + + + + + Use the associated behavior "as necessary." + (For COM clients, this is a 1.) + + + + + Use the associated behavior Always, whether necessary or not. + (For COM clients, this is a 2.) + + + + + A class for collecting the various options that can be used when + Reading zip files for extraction or update. + + + + + When reading a zip file, there are several options an + application can set, to modify how the file is read, or what + the library does while reading. This class collects those + options into one container. + + + + Pass an instance of the ReadOptions class into the + ZipFile.Read() method. + + + . + . + + + + + An event handler for Read operations. When opening large zip + archives, you may want to display a progress bar or other + indicator of status progress while reading. This parameter + allows you to specify a ReadProgress Event Handler directly. + When you call Read(), the progress event is invoked as + necessary. + + + + + The System.IO.TextWriter to use for writing verbose status messages + during operations on the zip archive. A console application may wish to + pass System.Console.Out to get messages on the Console. A graphical + or headless application may wish to capture the messages in a different + TextWriter, such as a System.IO.StringWriter. + + + + + The System.Text.Encoding to use when reading in the zip archive. Be + careful specifying the encoding. If the value you use here is not the same + as the Encoding used when the zip archive was created (possibly by a + different archiver) you will get unexpected results and possibly exceptions. + + + + + + + + Provides a stream metaphor for reading zip files. + + + + + This class provides an alternative programming model for reading zip files to + the one enabled by the class. Use this when reading zip + files, as an alternative to the class, when you would + like to use a Stream class to read the file. + + + + Some application designs require a readable stream for input. This stream can + be used to read a zip file, and extract entries. + + + + Both the ZipInputStream class and the ZipFile class can be used + to read and extract zip files. Both of them support many of the common zip + features, including Unicode, different compression levels, and ZIP64. The + programming models differ. For example, when extracting entries via calls to + the GetNextEntry() and Read() methods on the + ZipInputStream class, the caller is responsible for creating the file, + writing the bytes into the file, setting the attributes on the file, and + setting the created, last modified, and last accessed timestamps on the + file. All of these things are done automatically by a call to ZipEntry.Extract(). For this reason, the + ZipInputStream is generally recommended for when your application wants + to extract the data, without storing that data into a file. + + + + Aside from the obvious differences in programming model, there are some + differences in capability between the ZipFile class and the + ZipInputStream class. + + + + + ZipFile can be used to create or update zip files, or read and + extract zip files. ZipInputStream can be used only to read and + extract zip files. If you want to use a stream to create zip files, check + out the . + + + + ZipInputStream cannot read segmented or spanned + zip files. + + + + ZipInputStream will not read Zip file comments. + + + + When reading larger files, ZipInputStream will always underperform + ZipFile. This is because the ZipInputStream does a full scan on the + zip file, while the ZipFile class reads the central directory of the + zip file. + + + + + + + + + Create a ZipInputStream, wrapping it around an existing stream. + + + + + + While the class is generally easier + to use, this class provides an alternative to those + applications that want to read from a zipfile directly, + using a . + + + + Both the ZipInputStream class and the ZipFile class can be used + to read and extract zip files. Both of them support many of the common zip + features, including Unicode, different compression levels, and ZIP64. The + programming models differ. For example, when extracting entries via calls to + the GetNextEntry() and Read() methods on the + ZipInputStream class, the caller is responsible for creating the file, + writing the bytes into the file, setting the attributes on the file, and + setting the created, last modified, and last accessed timestamps on the + file. All of these things are done automatically by a call to ZipEntry.Extract(). For this reason, the + ZipInputStream is generally recommended for when your application wants + to extract the data, without storing that data into a file. + + + + Aside from the obvious differences in programming model, there are some + differences in capability between the ZipFile class and the + ZipInputStream class. + + + + + ZipFile can be used to create or update zip files, or read and extract + zip files. ZipInputStream can be used only to read and extract zip + files. If you want to use a stream to create zip files, check out the . + + + + ZipInputStream cannot read segmented or spanned + zip files. + + + + ZipInputStream will not read Zip file comments. + + + + When reading larger files, ZipInputStream will always underperform + ZipFile. This is because the ZipInputStream does a full scan on the + zip file, while the ZipFile class reads the central directory of the + zip file. + + + + + + + + The stream to read. It must be readable. This stream will be closed at + the time the ZipInputStream is closed. + + + + + This example shows how to read a zip file, and extract entries, using the + ZipInputStream class. + + + private void Unzip() + { + byte[] buffer= new byte[2048]; + int n; + using (var raw = File.Open(inputFileName, FileMode.Open, FileAccess.Read)) + { + using (var input= new ZipInputStream(raw)) + { + ZipEntry e; + while (( e = input.GetNextEntry()) != null) + { + if (e.IsDirectory) continue; + string outputPath = Path.Combine(extractDir, e.FileName); + using (var output = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite)) + { + while ((n= input.Read(buffer, 0, buffer.Length)) > 0) + { + output.Write(buffer,0,n); + } + } + } + } + } + } + + + + Private Sub UnZip() + Dim inputFileName As String = "MyArchive.zip" + Dim extractDir As String = "extract" + Dim buffer As Byte() = New Byte(2048) {} + Using raw As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read) + Using input As ZipInputStream = New ZipInputStream(raw) + Dim e As ZipEntry + Do While (Not e = input.GetNextEntry Is Nothing) + If Not e.IsDirectory Then + Using output As FileStream = File.Open(Path.Combine(extractDir, e.FileName), _ + FileMode.Create, FileAccess.ReadWrite) + Dim n As Integer + Do While (n = input.Read(buffer, 0, buffer.Length) > 0) + output.Write(buffer, 0, n) + Loop + End Using + End If + Loop + End Using + End Using + End Sub + + + + + + Create a ZipInputStream, given the name of an existing zip file. + + + + + + This constructor opens a FileStream for the given zipfile, and + wraps a ZipInputStream around that. See the documentation for the + constructor for full details. + + + + While the class is generally easier + to use, this class provides an alternative to those + applications that want to read from a zipfile directly, + using a . + + + + + + The name of the filesystem file to read. + + + + + This example shows how to read a zip file, and extract entries, using the + ZipInputStream class. + + + private void Unzip() + { + byte[] buffer= new byte[2048]; + int n; + using (var input= new ZipInputStream(inputFileName)) + { + ZipEntry e; + while (( e = input.GetNextEntry()) != null) + { + if (e.IsDirectory) continue; + string outputPath = Path.Combine(extractDir, e.FileName); + using (var output = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite)) + { + while ((n= input.Read(buffer, 0, buffer.Length)) > 0) + { + output.Write(buffer,0,n); + } + } + } + } + } + + + + Private Sub UnZip() + Dim inputFileName As String = "MyArchive.zip" + Dim extractDir As String = "extract" + Dim buffer As Byte() = New Byte(2048) {} + Using input As ZipInputStream = New ZipInputStream(inputFileName) + Dim e As ZipEntry + Do While (Not e = input.GetNextEntry Is Nothing) + If Not e.IsDirectory Then + Using output As FileStream = File.Open(Path.Combine(extractDir, e.FileName), _ + FileMode.Create, FileAccess.ReadWrite) + Dim n As Integer + Do While (n = input.Read(buffer, 0, buffer.Length) > 0) + output.Write(buffer, 0, n) + Loop + End Using + End If + Loop + End Using + End Sub + + + + + + Create a ZipInputStream, explicitly specifying whether to + keep the underlying stream open. + + + + See the documentation for the ZipInputStream(Stream) + constructor for a discussion of the class, and an example of how to use the class. + + + + The stream to read from. It must be readable. + + + + true if the application would like the stream + to remain open after the ZipInputStream has been closed. + + + + Provides a string representation of the instance. + + + This can be useful for debugging purposes. + + + a string representation of the instance. + + + + The text encoding to use when reading entries into the zip archive, for + those entries whose filenames or comments cannot be encoded with the + default (IBM437) encoding. + + + + + In its + zip specification, PKWare describes two options for encoding + filenames and comments: using IBM437 or UTF-8. But, some archiving tools + or libraries do not follow the specification, and instead encode + characters using the system default code page. For example, WinRAR when + run on a machine in Shanghai may encode filenames with the Big-5 Chinese + (950) code page. This behavior is contrary to the Zip specification, but + it occurs anyway. + + + + When using DotNetZip to read zip archives that use something other than + UTF-8 or IBM437, set this property to specify the code page to use when + reading encoded filenames and comments for each ZipEntry in the zip + file. + + + + This property is "provisional". When the entry in the zip archive is not + explicitly marked as using UTF-8, then IBM437 is used to decode filenames + and comments. If a loss of data would result from using IBM436 - + specifically when encoding and decoding is not reflexive - the codepage + specified here is used. It is possible, therefore, to have a given entry + with a Comment encoded in IBM437 and a FileName encoded with + the specified "provisional" codepage. + + + + When a zip file uses an arbitrary, non-UTF8 code page for encoding, there + is no standard way for the reader application - whether DotNetZip, WinZip, + WinRar, or something else - to know which codepage has been used for the + entries. Readers of zip files are not able to inspect the zip file and + determine the codepage that was used for the entries contained within it. + It is left to the application or user to determine the necessary codepage + when reading zip files encoded this way. If you use an incorrect codepage + when reading a zipfile, you will get entries with filenames that are + incorrect, and the incorrect filenames may even contain characters that + are not legal for use within filenames in Windows. Extracting entries with + illegal characters in the filenames will lead to exceptions. It's too bad, + but this is just the way things are with code pages in zip files. Caveat + Emptor. + + + + + + + Size of the work buffer to use for the ZLIB codec during decompression. + + + + Setting this affects the performance and memory efficiency of compression + and decompression. For larger files, setting this to a larger size may + improve performance, but the exact numbers vary depending on available + memory, and a bunch of other variables. I don't have good firm + recommendations on how to set it. You'll have to test it yourself. Or + just leave it alone and accept the default. + + + + + Sets the password to be used on the ZipInputStream instance. + + + + + + When reading a zip archive, this password is used to read and decrypt the + entries that are encrypted within the zip file. When entries within a zip + file use different passwords, set the appropriate password for the entry + before the first call to Read() for each entry. + + + + When reading an entry that is not encrypted, the value of this property is + ignored. + + + + + + + This example uses the ZipInputStream to read and extract entries from a + zip file, using a potentially different password for each entry. + + + byte[] buffer= new byte[2048]; + int n; + using (var raw = File.Open(_inputFileName, FileMode.Open, FileAccess.Read )) + { + using (var input= new ZipInputStream(raw)) + { + ZipEntry e; + while (( e = input.GetNextEntry()) != null) + { + input.Password = PasswordForEntry(e.FileName); + if (e.IsDirectory) continue; + string outputPath = Path.Combine(_extractDir, e.FileName); + using (var output = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite)) + { + while ((n= input.Read(buffer,0,buffer.Length)) > 0) + { + output.Write(buffer,0,n); + } + } + } + } + } + + + + + + + Read the data from the stream into the buffer. + + + + + The data for the zipentry will be decrypted and uncompressed, as + necessary, before being copied into the buffer. + + + + You must set the property before calling + Read() the first time for an encrypted entry. To determine if an + entry is encrypted and requires a password, check the ZipEntry.Encryption property. + + + + The buffer to hold the data read from the stream. + the offset within the buffer to copy the first byte read. + the number of bytes to read. + the number of bytes read, after decryption and decompression. + + + + Read the next entry from the zip file. + + + + + Call this method just before calling , + to position the pointer in the zip file to the next entry that can be + read. Subsequent calls to Read(), will decrypt and decompress the + data in the zip file, until Read() returns 0. + + + + Each time you call GetNextEntry(), the pointer in the wrapped + stream is moved to the next entry in the zip file. If you call , and thus re-position the pointer within + the file, you will need to call GetNextEntry() again, to insure + that the file pointer is positioned at the beginning of a zip entry. + + + + This method returns the ZipEntry. Using a stream approach, you will + read the raw bytes for an entry in a zip file via calls to Read(). + Alternatively, you can extract an entry into a file, or a stream, by + calling , or one of its siblings. + + + + + + The ZipEntry read. Returns null (or Nothing in VB) if there are no more + entries in the zip file. + + + + + + Dispose the stream. + + + + + This method disposes the ZipInputStream. It may also close the + underlying stream, depending on which constructor was used. + + + + Typically the application will call Dispose() implicitly, via + a using statement in C#, or a Using statement in VB. + + + + Application code won't call this code directly. This method may + be invoked in two distinct scenarios. If disposing == true, the + method has been called directly or indirectly by a user's code, + for example via the public Dispose() method. In this case, both + managed and unmanaged resources can be referenced and disposed. + If disposing == false, the method has been called by the runtime + from inside the object finalizer and this method should not + reference other objects; in that case only unmanaged resources + must be referenced or disposed. + + + + + true if the Dispose method was invoked by user code. + + + + + Always returns true. + + + + + Returns the value of CanSeek for the underlying (wrapped) stream. + + + + + Always returns false. + + + + + Returns the length of the underlying stream. + + + + + Gets or sets the position of the underlying stream. + + + Setting the position is equivalent to calling Seek(value, SeekOrigin.Begin). + + + + + This is a no-op. + + + + + This method always throws a NotSupportedException. + + ignored + ignored + ignored + + + + This method seeks in the underlying stream. + + + + + Call this method if you want to seek around within the zip file for random access. + + + + Applications can intermix calls to Seek() with calls to . After a call to Seek(), + GetNextEntry() will get the next ZipEntry that falls after + the current position in the input stream. You're on your own for finding + out just where to seek in the stream, to get to the various entries. + + + + + the offset point to seek to + the reference point from which to seek + The new position + + + + This method always throws a NotSupportedException. + + ignored + + + + Provides a stream metaphor for generating zip files. + + + + + This class writes zip files, as defined in the specification + for zip files described by PKWare. The compression for this + implementation is provided by a managed-code version of Zlib, included with + DotNetZip in the classes in the Ionic.Zlib namespace. + + + + This class provides an alternative programming model to the one enabled by the + class. Use this when creating zip files, as an + alternative to the class, when you would like to use a + Stream type to write the zip file. + + + + Both the ZipOutputStream class and the ZipFile class can be used + to create zip files. Both of them support many of the common zip features, + including Unicode, different compression levels, and ZIP64. They provide + very similar performance when creating zip files. + + + + The ZipFile class is generally easier to use than + ZipOutputStream and should be considered a higher-level interface. For + example, when creating a zip file via calls to the PutNextEntry() and + Write() methods on the ZipOutputStream class, the caller is + responsible for opening the file, reading the bytes from the file, writing + those bytes into the ZipOutputStream, setting the attributes on the + ZipEntry, and setting the created, last modified, and last accessed + timestamps on the zip entry. All of these things are done automatically by a + call to ZipFile.AddFile(). + For this reason, the ZipOutputStream is generally recommended for use + only when your application emits arbitrary data, not necessarily data from a + filesystem file, directly into a zip file, and does so using a Stream + metaphor. + + + + Aside from the differences in programming model, there are other + differences in capability between the two classes. + + + + + ZipFile can be used to read and extract zip files, in addition to + creating zip files. ZipOutputStream cannot read zip files. If you want + to use a stream to read zip files, check out the class. + + + + ZipOutputStream does not support the creation of segmented or spanned + zip files. + + + + ZipOutputStream cannot produce a self-extracting archive. + + + + + Be aware that the ZipOutputStream class implements the interface. In order for + ZipOutputStream to produce a valid zip file, you use use it within + a using clause (Using in VB), or call the Dispose() method + explicitly. See the examples for how to employ a using clause. + + + + Also, a note regarding compression performance: On the desktop .NET + Framework, DotNetZip can use a multi-threaded compression implementation + that provides significant speed increases on large files, over 300k or so, + at the cost of increased memory use at runtime. (The output of the + compression is almost exactly the same size). But, the multi-threaded + approach incurs a performance hit on smaller files. There's no way for the + ZipOutputStream to know whether parallel compression will be beneficial, + because the ZipOutputStream does not know how much data you will write + through the stream. You may wish to set the property to zero, if you are compressing + large files through ZipOutputStream. This will cause parallel + compression to be used, always. + + + + + + Create a ZipOutputStream, wrapping an existing stream. + + + + + The class is generally easier to use when creating + zip files. The ZipOutputStream offers a different metaphor for creating a + zip file, based on the class. + + + + + + The stream to wrap. It must be writable. This stream will be closed at + the time the ZipOutputStream is closed. + + + + + This example shows how to create a zip file, using the + ZipOutputStream class. + + + private void Zipup() + { + if (filesToZip.Count == 0) + { + System.Console.WriteLine("Nothing to do."); + return; + } + + using (var raw = File.Open(_outputFileName, FileMode.Create, FileAccess.ReadWrite )) + { + using (var output= new ZipOutputStream(raw)) + { + output.Password = "VerySecret!"; + output.Encryption = EncryptionAlgorithm.WinZipAes256; + + foreach (string inputFileName in filesToZip) + { + System.Console.WriteLine("file: {0}", inputFileName); + + output.PutNextEntry(inputFileName); + using (var input = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Write )) + { + byte[] buffer= new byte[2048]; + int n; + while ((n= input.Read(buffer,0,buffer.Length)) > 0) + { + output.Write(buffer,0,n); + } + } + } + } + } + } + + + + Private Sub Zipup() + Dim outputFileName As String = "XmlData.zip" + Dim filesToZip As String() = Directory.GetFiles(".", "*.xml") + If (filesToZip.Length = 0) Then + Console.WriteLine("Nothing to do.") + Else + Using raw As FileStream = File.Open(outputFileName, FileMode.Create, FileAccess.ReadWrite) + Using output As ZipOutputStream = New ZipOutputStream(raw) + output.Password = "VerySecret!" + output.Encryption = EncryptionAlgorithm.WinZipAes256 + Dim inputFileName As String + For Each inputFileName In filesToZip + Console.WriteLine("file: {0}", inputFileName) + output.PutNextEntry(inputFileName) + Using input As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) + Dim n As Integer + Dim buffer As Byte() = New Byte(2048) {} + Do While (n = input.Read(buffer, 0, buffer.Length) > 0) + output.Write(buffer, 0, n) + Loop + End Using + Next + End Using + End Using + End If + End Sub + + + + + + Create a ZipOutputStream that writes to a filesystem file. + + + + The class is generally easier to use when creating + zip files. The ZipOutputStream offers a different metaphor for creating a + zip file, based on the class. + + + + The name of the zip file to create. + + + + + This example shows how to create a zip file, using the + ZipOutputStream class. + + + private void Zipup() + { + if (filesToZip.Count == 0) + { + System.Console.WriteLine("Nothing to do."); + return; + } + + using (var output= new ZipOutputStream(outputFileName)) + { + output.Password = "VerySecret!"; + output.Encryption = EncryptionAlgorithm.WinZipAes256; + + foreach (string inputFileName in filesToZip) + { + System.Console.WriteLine("file: {0}", inputFileName); + + output.PutNextEntry(inputFileName); + using (var input = File.Open(inputFileName, FileMode.Open, FileAccess.Read, + FileShare.Read | FileShare.Write )) + { + byte[] buffer= new byte[2048]; + int n; + while ((n= input.Read(buffer,0,buffer.Length)) > 0) + { + output.Write(buffer,0,n); + } + } + } + } + } + + + + Private Sub Zipup() + Dim outputFileName As String = "XmlData.zip" + Dim filesToZip As String() = Directory.GetFiles(".", "*.xml") + If (filesToZip.Length = 0) Then + Console.WriteLine("Nothing to do.") + Else + Using output As ZipOutputStream = New ZipOutputStream(outputFileName) + output.Password = "VerySecret!" + output.Encryption = EncryptionAlgorithm.WinZipAes256 + Dim inputFileName As String + For Each inputFileName In filesToZip + Console.WriteLine("file: {0}", inputFileName) + output.PutNextEntry(inputFileName) + Using input As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) + Dim n As Integer + Dim buffer As Byte() = New Byte(2048) {} + Do While (n = input.Read(buffer, 0, buffer.Length) > 0) + output.Write(buffer, 0, n) + Loop + End Using + Next + End Using + End If + End Sub + + + + + + Create a ZipOutputStream. + + + + See the documentation for the ZipOutputStream(Stream) + constructor for an example. + + + + The stream to wrap. It must be writable. + + + + true if the application would like the stream + to remain open after the ZipOutputStream has been closed. + + + + Provides a string representation of the instance. + + + This can be useful for debugging purposes. + + + a string representation of the instance. + + + + Sets the password to be used on the ZipOutputStream instance. + + + + + + When writing a zip archive, this password is applied to the entries, not + to the zip archive itself. It applies to any ZipEntry subsequently + written to the ZipOutputStream. + + + + Using a password does not encrypt or protect the "directory" of the + archive - the list of entries contained in the archive. If you set the + Password property, the password actually applies to individual + entries that are added to the archive, subsequent to the setting of this + property. The list of filenames in the archive that is eventually created + will appear in clear text, but the contents of the individual files are + encrypted. This is how Zip encryption works. + + + + If you set this property, and then add a set of entries to the archive via + calls to PutNextEntry, then each entry is encrypted with that + password. You may also want to change the password between adding + different entries. If you set the password, add an entry, then set the + password to null (Nothing in VB), and add another entry, the + first entry is encrypted and the second is not. + + + + When setting the Password, you may also want to explicitly set the property, to specify how to encrypt the entries added + to the ZipFile. If you set the Password to a non-null value and do not + set , then PKZip 2.0 ("Weak") encryption is used. + This encryption is relatively weak but is very interoperable. If + you set the password to a null value (Nothing in VB), + Encryption is reset to None. + + + + Special case: if you wrap a ZipOutputStream around a non-seekable stream, + and use encryption, and emit an entry of zero bytes, the Close() or + PutNextEntry() following the entry will throw an exception. + + + + + + + The Encryption to use for entries added to the ZipOutputStream. + + + + + The specified Encryption is applied to the entries subsequently + written to the ZipOutputStream instance. + + + + If you set this to something other than + EncryptionAlgorithm.None, you will also need to set the + to a non-null, non-empty value in + order to actually get encryption on the entry. + + + + + ZipOutputStream.Password + ZipEntry.Encryption + + + + Size of the work buffer to use for the ZLIB codec during compression. + + + + Setting this may affect performance. For larger files, setting this to a + larger size may improve performance, but I'm not sure. Sorry, I don't + currently have good recommendations on how to set it. You can test it if + you like. + + + + + The compression strategy to use for all entries. + + + + Set the Strategy used by the ZLIB-compatible compressor, when compressing + data for the entries in the zip archive. Different compression strategies + work better on different sorts of data. The strategy parameter can affect + the compression ratio and the speed of compression but not the correctness + of the compresssion. For more information see . + + + + + The type of timestamp attached to the ZipEntry. + + + + Set this in order to specify the kind of timestamp that should be emitted + into the zip file for each entry. + + + + + Sets the compression level to be used for entries subsequently added to + the zip archive. + + + + + Varying the compression level used on entries can affect the + size-vs-speed tradeoff when compression and decompressing data streams + or files. + + + + As with some other properties on the ZipOutputStream class, like , and , + setting this property on a ZipOutputStream + instance will cause the specified CompressionLevel to be used on all + items that are subsequently added to the + ZipOutputStream instance. + + + + If you do not set this property, the default compression level is used, + which normally gives a good balance of compression efficiency and + compression speed. In some tests, using BestCompression can + double the time it takes to compress, while delivering just a small + increase in compression efficiency. This behavior will vary with the + type of data you compress. If you are in doubt, just leave this setting + alone, and accept the default. + + + + + + The compression method used on each entry added to the ZipOutputStream. + + + + + A comment attached to the zip archive. + + + + + + The application sets this property to specify a comment to be embedded + into the generated zip archive. + + + + According to PKWARE's + zip specification, the comment is not encrypted, even if there is a + password set on the zip file. + + + + The specification does not describe how to indicate the encoding used + on a comment string. Many "compliant" zip tools and libraries use + IBM437 as the code page for comments; DotNetZip, too, follows that + practice. On the other hand, there are situations where you want a + Comment to be encoded with something else, for example using code page + 950 "Big-5 Chinese". To fill that need, DotNetZip will encode the + comment following the same procedure it follows for encoding + filenames: (a) if is + Never, it uses the default encoding (IBM437). (b) if is Always, it always uses the + alternate encoding (). (c) if is AsNecessary, it uses the + alternate encoding only if the default encoding is not sufficient for + encoding the comment - in other words if decoding the result does not + produce the original string. This decision is taken at the time of + the call to ZipFile.Save(). + + + + + + + Specify whether to use ZIP64 extensions when saving a zip archive. + + + + + The default value for the property is . is + safest, in the sense that you will not get an Exception if a + pre-ZIP64 limit is exceeded. + + + + You must set this property before calling Write(). + + + + + + + Indicates whether ZIP64 extensions were used when saving the zip archive. + + + + The value is defined only after the ZipOutputStream has been closed. + + + + + Whether the ZipOutputStream should use case-insensitive comparisons when + checking for uniqueness of zip entries. + + + + + Though the zip specification doesn't prohibit zipfiles with duplicate + entries, Sane zip files have no duplicates, and the DotNetZip library + cannot create zip files with duplicate entries. If an application attempts + to call with a name that duplicates one + already used within the archive, the library will throw an Exception. + + + This property allows the application to specify whether the + ZipOutputStream instance considers ordinal case when checking for + uniqueness of zip entries. + + + + + + Indicates whether to encode entry filenames and entry comments using + Unicode (UTF-8). + + + + + The + PKWare zip specification provides for encoding file names and file + comments in either the IBM437 code page, or in UTF-8. This flag selects + the encoding according to that specification. By default, this flag is + false, and filenames and comments are encoded into the zip file in the + IBM437 codepage. Setting this flag to true will specify that filenames + and comments that cannot be encoded with IBM437 will be encoded with + UTF-8. + + + + Zip files created with strict adherence to the PKWare specification with + respect to UTF-8 encoding can contain entries with filenames containing + any combination of Unicode characters, including the full range of + characters from Chinese, Latin, Hebrew, Greek, Cyrillic, and many other + alphabets. However, because at this time, the UTF-8 portion of the PKWare + specification is not broadly supported by other zip libraries and + utilities, such zip files may not be readable by your favorite zip tool or + archiver. In other words, interoperability will decrease if you set this + flag to true. + + + + In particular, Zip files created with strict adherence to the PKWare + specification with respect to UTF-8 encoding will not work well with + Explorer in Windows XP or Windows Vista, because Windows compressed + folders, as far as I know, do not support UTF-8 in zip files. Vista can + read the zip files, but shows the filenames incorrectly. Unpacking from + Windows Vista Explorer will result in filenames that have rubbish + characters in place of the high-order UTF-8 bytes. + + + + Also, zip files that use UTF-8 encoding will not work well with Java + applications that use the java.util.zip classes, as of v5.0 of the Java + runtime. The Java runtime does not correctly implement the PKWare + specification in this regard. + + + + As a result, we have the unfortunate situation that "correct" behavior by + the DotNetZip library with regard to Unicode encoding of filenames during + zip creation will result in zip files that are readable by strictly + compliant and current tools (for example the most recent release of the + commercial WinZip tool); but these zip files will not be readable by + various other tools or libraries, including Windows Explorer. + + + + The DotNetZip library can read and write zip files with UTF8-encoded + entries, according to the PKware spec. If you use DotNetZip for both + creating and reading the zip file, and you use UTF-8, there will be no + loss of information in the filenames. For example, using a self-extractor + created by this library will allow you to unpack files correctly with no + loss of information in the filenames. + + + + If you do not set this flag, it will remain false. If this flag is false, + the ZipOutputStream will encode all filenames and comments using + the IBM437 codepage. This can cause "loss of information" on some + filenames, but the resulting zipfile will be more interoperable with other + utilities. As an example of the loss of information, diacritics can be + lost. The o-tilde character will be down-coded to plain o. The c with a + cedilla (Unicode 0xE7) used in Portugese will be downcoded to a c. + Likewise, the O-stroke character (Unicode 248), used in Danish and + Norwegian, will be down-coded to plain o. Chinese characters cannot be + represented in codepage IBM437; when using the default encoding, Chinese + characters in filenames will be represented as ?. These are all examples + of "information loss". + + + + The loss of information associated to the use of the IBM437 encoding is + inconvenient, and can also lead to runtime errors. For example, using + IBM437, any sequence of 4 Chinese characters will be encoded as ????. If + your application creates a ZipOutputStream, does not set the + encoding, then adds two files, each with names of four Chinese characters + each, this will result in a duplicate filename exception. In the case + where you add a single file with a name containing four Chinese + characters, the zipfile will save properly, but extracting that file + later, with any zip tool, will result in an error, because the question + mark is not legal for use within filenames on Windows. These are just a + few examples of the problems associated to loss of information. + + + + This flag is independent of the encoding of the content within the entries + in the zip file. Think of the zip file as a container - it supports an + encoding. Within the container are other "containers" - the file entries + themselves. The encoding within those entries is independent of the + encoding of the zip archive container for those entries. + + + + Rather than specify the encoding in a binary fashion using this flag, an + application can specify an arbitrary encoding via the property. Setting the encoding + explicitly when creating zip archives will result in non-compliant zip + files that, curiously, are fairly interoperable. The challenge is, the + PKWare specification does not provide for a way to specify that an entry + in a zip archive uses a code page that is neither IBM437 nor UTF-8. + Therefore if you set the encoding explicitly when creating a zip archive, + you must take care upon reading the zip archive to use the same code page. + If you get it wrong, the behavior is undefined and may result in incorrect + filenames, exceptions, stomach upset, hair loss, and acne. + + + + + + + The text encoding to use when emitting entries into the zip archive, for + those entries whose filenames or comments cannot be encoded with the + default (IBM437) encoding. + + + + + In its + zip specification, PKWare describes two options for encoding + filenames and comments: using IBM437 or UTF-8. But, some archiving tools + or libraries do not follow the specification, and instead encode + characters using the system default code page. For example, WinRAR when + run on a machine in Shanghai may encode filenames with the Big-5 Chinese + (950) code page. This behavior is contrary to the Zip specification, but + it occurs anyway. + + + + When using DotNetZip to write zip archives that will be read by one of + these other archivers, set this property to specify the code page to use + when encoding the and for each ZipEntry in the zip file, for + values that cannot be encoded with the default codepage for zip files, + IBM437. This is why this property is "provisional". In all cases, IBM437 + is used where possible, in other words, where no loss of data would + result. It is possible, therefore, to have a given entry with a + Comment encoded in IBM437 and a FileName encoded with the + specified "provisional" codepage. + + + + Be aware that a zip file created after you've explicitly set the + ProvisionalAlternateEncoding property to a value other than + IBM437 may not be compliant to the PKWare specification, and may not be + readable by compliant archivers. On the other hand, many (most?) + archivers are non-compliant and can read zip files created in arbitrary + code pages. The trick is to use or specify the proper codepage when + reading the zip. + + + + When creating a zip archive using this library, it is possible to change + the value of ProvisionalAlternateEncoding between each entry you + add, and between adding entries and the call to Close(). Don't do + this. It will likely result in a zipfile that is not readable. For best + interoperability, either leave ProvisionalAlternateEncoding + alone, or specify it only once, before adding any entries to the + ZipOutputStream instance. There is one exception to this + recommendation, described later. + + + + When using an arbitrary, non-UTF8 code page for encoding, there is no + standard way for the creator application - whether DotNetZip, WinZip, + WinRar, or something else - to formally specify in the zip file which + codepage has been used for the entries. As a result, readers of zip files + are not able to inspect the zip file and determine the codepage that was + used for the entries contained within it. It is left to the application + or user to determine the necessary codepage when reading zip files encoded + this way. If you use an incorrect codepage when reading a zipfile, you + will get entries with filenames that are incorrect, and the incorrect + filenames may even contain characters that are not legal for use within + filenames in Windows. Extracting entries with illegal characters in the + filenames will lead to exceptions. It's too bad, but this is just the way + things are with code pages in zip files. Caveat Emptor. + + + + One possible approach for specifying the code page for a given zip file is + to describe the code page in a human-readable form in the Zip comment. For + example, the comment may read "Entries in this archive are encoded in the + Big5 code page". For maximum interoperability, the zip comment in this + case should be encoded in the default, IBM437 code page. In this case, + the zip comment is encoded using a different page than the filenames. To + do this, Specify ProvisionalAlternateEncoding to your desired + region-specific code page, once before adding any entries, and then set + the property and reset + ProvisionalAlternateEncoding to IBM437 before calling Close(). + + + + + + A Text Encoding to use when encoding the filenames and comments for + all the ZipEntry items, during a ZipFile.Save() operation. + + + + Whether the encoding specified here is used during the save depends + on . + + + + + + A flag that tells if and when this instance should apply + AlternateEncoding to encode the filenames and comments associated to + of ZipEntry objects contained within this instance. + + + + + The default text encoding used in zip archives. It is numeric 437, also + known as IBM437. + + + + + + The size threshold for an entry, above which a parallel deflate is used. + + + + + + DotNetZip will use multiple threads to compress any ZipEntry, when + the CompressionMethod is Deflate, and if the entry is + larger than the given size. Zero means "always use parallel + deflate", while -1 means "never use parallel deflate". + + + + If the entry size cannot be known before compression, as with any entry + added via a ZipOutputStream, then Parallel deflate will never be + performed, unless the value of this property is zero. + + + + A parallel deflate operations will speed up the compression of + large files, on computers with multiple CPUs or multiple CPU + cores. For files above 1mb, on a dual core or dual-cpu (2p) + machine, the time required to compress the file can be 70% of the + single-threaded deflate. For very large files on 4p machines the + compression can be done in 30% of the normal time. The downside + is that parallel deflate consumes extra memory during the deflate, + and the deflation is slightly less effective. + + + + Parallel deflate tends to not be as effective as single-threaded deflate + because the original data stream is split into multiple independent + buffers, each of which is compressed in parallel. But because they are + treated independently, there is no opportunity to share compression + dictionaries, and additional framing bytes must be added to the output + stream. For that reason, a deflated stream may be slightly larger when + compressed using parallel deflate, as compared to a traditional + single-threaded deflate. For files of about 512k, the increase over the + normal deflate is as much as 5% of the total compressed size. For larger + files, the difference can be as small as 0.1%. + + + + Multi-threaded compression does not give as much an advantage when using + Encryption. This is primarily because encryption tends to slow down + the entire pipeline. Also, multi-threaded compression gives less of an + advantage when using lower compression levels, for example . You may have to perform + some tests to determine the best approach for your situation. + + + + The default value for this property is -1, which means parallel + compression will not be performed unless you set it to zero. + + + + + + + The maximum number of buffer pairs to use when performing + parallel compression. + + + + + This property sets an upper limit on the number of memory + buffer pairs to create when performing parallel + compression. The implementation of the parallel + compression stream allocates multiple buffers to + facilitate parallel compression. As each buffer fills up, + the stream uses + ThreadPool.QueueUserWorkItem() to compress those + buffers in a background threadpool thread. After a buffer + is compressed, it is re-ordered and written to the output + stream. + + + + A higher number of buffer pairs enables a higher degree of + parallelism, which tends to increase the speed of compression on + multi-cpu computers. On the other hand, a higher number of buffer + pairs also implies a larger memory consumption, more active worker + threads, and a higher cpu utilization for any compression. This + property enables the application to limit its memory consumption and + CPU utilization behavior depending on requirements. + + + + For each compression "task" that occurs in parallel, there are 2 + buffers allocated: one for input and one for output. This property + sets a limit for the number of pairs. The total amount of storage + space allocated for buffering will then be (N*S*2), where N is the + number of buffer pairs, S is the size of each buffer (). By default, DotNetZip allocates 4 buffer + pairs per CPU core, so if your machine has 4 cores, and you retain + the default buffer size of 128k, then the + ParallelDeflateOutputStream will use 4 * 4 * 2 * 128kb of buffer + memory in total, or 4mb, in blocks of 128kb. If you then set this + property to 8, then the number will be 8 * 2 * 128kb of buffer + memory, or 2mb. + + + + CPU utilization will also go up with additional buffers, because a + larger number of buffer pairs allows a larger number of background + threads to compress in parallel. If you find that parallel + compression is consuming too much memory or CPU, you can adjust this + value downward. + + + + The default value is 16. Different values may deliver better or + worse results, depending on your priorities and the dynamic + performance characteristics of your storage and compute resources. + + + + This property is not the number of buffer pairs to use; it is an + upper limit. An illustration: Suppose you have an application that + uses the default value of this property (which is 16), and it runs + on a machine with 2 CPU cores. In that case, DotNetZip will allocate + 4 buffer pairs per CPU core, for a total of 8 pairs. The upper + limit specified by this property has no effect. + + + + The application can set this value at any time, but it is + effective only if set before calling + ZipOutputStream.Write() for the first time. + + + + + + + + + Returns true if an entry by the given name has already been written + to the ZipOutputStream. + + + + The name of the entry to scan for. + + + + true if an entry by the given name has already been written. + + + + + Write the data from the buffer to the stream. + + + + As the application writes data into this stream, the data may be + compressed and encrypted before being written out to the underlying + stream, depending on the settings of the + and the properties. + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Specify the name of the next entry that will be written to the zip file. + + + + + Call this method just before calling , to + specify the name of the entry that the next set of bytes written to + the ZipOutputStream belongs to. All subsequent calls to Write, + until the next call to PutNextEntry, + will be inserted into the named entry in the zip file. + + + + If the used in PutNextEntry() ends in + a slash, then the entry added is marked as a directory. Because directory + entries do not contain data, a call to Write(), before an + intervening additional call to PutNextEntry(), will throw an + exception. + + + + If you don't call Write() between two calls to + PutNextEntry(), the first entry is inserted into the zip file as a + file of zero size. This may be what you want. + + + + Because PutNextEntry() closes out the prior entry, if any, this + method may throw if there is a problem with the prior entry. + + + + This method returns the ZipEntry. You can modify public properties + on the ZipEntry, such as , , and so on, until the first call to + ZipOutputStream.Write(), or until the next call to + PutNextEntry(). If you modify the ZipEntry after + having called Write(), you may get a runtime exception, or you may + silently get an invalid zip archive. + + + + + + + This example shows how to create a zip file, using the + ZipOutputStream class. + + + private void Zipup() + { + using (FileStream fs raw = File.Open(_outputFileName, FileMode.Create, FileAccess.ReadWrite )) + { + using (var output= new ZipOutputStream(fs)) + { + output.Password = "VerySecret!"; + output.Encryption = EncryptionAlgorithm.WinZipAes256; + output.PutNextEntry("entry1.txt"); + byte[] buffer= System.Text.Encoding.ASCII.GetBytes("This is the content for entry #1."); + output.Write(buffer,0,buffer.Length); + output.PutNextEntry("entry2.txt"); // this will be zero length + output.PutNextEntry("entry3.txt"); + buffer= System.Text.Encoding.ASCII.GetBytes("This is the content for entry #3."); + output.Write(buffer,0,buffer.Length); + } + } + } + + + + + The name of the entry to be added, including any path to be used + within the zip file. + + + + The ZipEntry created. + + + + + + Dispose the stream + + + + + This method writes the Zip Central directory, then closes the stream. The + application must call Dispose() (or Close) in order to produce a valid zip file. + + + + Typically the application will call Dispose() implicitly, via a using + statement in C#, or a Using statement in VB. + + + + + set this to true, always. + + + + Always returns false. + + + + + Always returns false. + + + + + Always returns true. + + + + + Always returns a NotSupportedException. + + + + + Setting this property always returns a NotSupportedException. Getting it + returns the value of the Position on the underlying stream. + + + + + This is a no-op. + + + + + This method always throws a NotSupportedException. + + ignored + ignored + ignored + nothing + + + + This method always throws a NotSupportedException. + + ignored + ignored + nothing + + + + This method always throws a NotSupportedException. + + ignored + + + + Sort-of like a factory method, ForUpdate is used only when + the application needs to update the zip entry metadata for + a segmented zip file, when the starting segment is earlier + than the ending segment, for a particular entry. + + + + The update is always contiguous, never rolls over. As a + result, this method doesn't need to return a ZSS; it can + simply return a FileStream. That's why it's "sort of" + like a Factory method. + + + Caller must Close/Dispose the stream object returned by + this method. + + + + + + Name of the filesystem file corresponding to the current segment. + + + + The name is not always the name currently being used in the + filesystem. When rwMode is RwMode.Write, the filesystem file has a + temporary name until the stream is closed or until the next segment is + started. + + + + + + Read from the stream + + the buffer to read + the offset at which to start + the number of bytes to read + the number of bytes actually read + + + + Write to the stream. + + the buffer from which to write + the offset at which to start writing + the number of bytes to write + + + + Enumerates the options for a logical conjunction. This enum is intended for use + internally by the FileSelector class. + + + + + FileSelector encapsulates logic that selects files from a source - a zip file + or the filesystem - based on a set of criteria. This class is used internally + by the DotNetZip library, in particular for the AddSelectedFiles() methods. + This class can also be used independently of the zip capability in DotNetZip. + + + + + + The FileSelector class is used internally by the ZipFile class for selecting + files for inclusion into the ZipFile, when the method, or one of + its overloads, is called. It's also used for the methods. Typically, an + application that creates or manipulates Zip archives will not directly + interact with the FileSelector class. + + + + Some applications may wish to use the FileSelector class directly, to + select files from disk volumes based on a set of criteria, without creating or + querying Zip archives. The file selection criteria include: a pattern to + match the filename; the last modified, created, or last accessed time of the + file; the size of the file; and the attributes of the file. + + + + Consult the documentation for + for more information on specifying the selection criteria. + + + + + + + Constructor that allows the caller to specify file selection criteria. + + + + + This constructor allows the caller to specify a set of criteria for + selection of files. + + + + See for a description of + the syntax of the selectionCriteria string. + + + + By default the FileSelector will traverse NTFS Reparse Points. To + change this, use FileSelector(String, bool). + + + + The criteria for file selection. + + + + Constructor that allows the caller to specify file selection criteria. + + + + + This constructor allows the caller to specify a set of criteria for + selection of files. + + + + See for a description of + the syntax of the selectionCriteria string. + + + + The criteria for file selection. + + whether to traverse NTFS reparse points (junctions). + + + + + The string specifying which files to include when retrieving. + + + + + Specify the criteria in statements of 3 elements: a noun, an operator, + and a value. Consider the string "name != *.doc" . The noun is + "name". The operator is "!=", implying "Not Equal". The value is + "*.doc". That criterion, in English, says "all files with a name that + does not end in the .doc extension." + + + + Supported nouns include "name" (or "filename") for the filename; + "atime", "mtime", and "ctime" for last access time, last modfied time, + and created time of the file, respectively; "attributes" (or "attrs") + for the file attributes; "size" (or "length") for the file length + (uncompressed); and "type" for the type of object, either a file or a + directory. The "attributes", "type", and "name" nouns all support = + and != as operators. The "size", "atime", "mtime", and "ctime" nouns + support = and !=, and >, >=, <, <= as well. The times are + taken to be expressed in local time. + + + + Specify values for the file attributes as a string with one or more of + the characters H,R,S,A,I,L in any order, implying file attributes of + Hidden, ReadOnly, System, Archive, NotContextIndexed, and ReparsePoint + (symbolic link) respectively. + + + + To specify a time, use YYYY-MM-DD-HH:mm:ss or YYYY/MM/DD-HH:mm:ss as + the format. If you omit the HH:mm:ss portion, it is assumed to be + 00:00:00 (midnight). + + + + The value for a size criterion is expressed in integer quantities of + bytes, kilobytes (use k or kb after the number), megabytes (m or mb), + or gigabytes (g or gb). + + + + The value for a name is a pattern to match against the filename, + potentially including wildcards. The pattern follows CMD.exe glob + rules: * implies one or more of any character, while ? implies one + character. If the name pattern contains any slashes, it is matched to + the entire filename, including the path; otherwise, it is matched + against only the filename without the path. This means a pattern of + "*\*.*" matches all files one directory level deep, while a pattern of + "*.*" matches all files in all directories. + + + + To specify a name pattern that includes spaces, use single quotes + around the pattern. A pattern of "'* *.*'" will match all files that + have spaces in the filename. The full criteria string for that would + be "name = '* *.*'" . + + + + The value for a type criterion is either F (implying a file) or D + (implying a directory). + + + + Some examples: + + + + + criteria + Files retrieved + + + + name != *.xls + any file with an extension that is not .xls + + + + + name = *.mp3 + any file with a .mp3 extension. + + + + + *.mp3 + (same as above) any file with a .mp3 extension. + + + + + attributes = A + all files whose attributes include the Archive bit. + + + + + attributes != H + all files whose attributes do not include the Hidden bit. + + + + + mtime > 2009-01-01 + all files with a last modified time after January 1st, 2009. + + + + + ctime > 2009/01/01-03:00:00 + all files with a created time after 3am (local time), + on January 1st, 2009. + + + + + size > 2gb + all files whose uncompressed size is greater than 2gb. + + + + + type = D + all directories in the filesystem. + + + + + + You can combine criteria with the conjunctions AND, OR, and XOR. Using + a string like "name = *.txt AND size >= 100k" for the + selectionCriteria retrieves entries whose names end in .txt, and whose + uncompressed size is greater than or equal to 100 kilobytes. + + + + For more complex combinations of criteria, you can use parenthesis to + group clauses in the boolean logic. Absent parenthesis, the + precedence of the criterion atoms is determined by order of + appearance. Unlike the C# language, the AND conjunction does not take + precendence over the logical OR. This is important only in strings + that contain 3 or more criterion atoms. In other words, "name = *.txt + and size > 1000 or attributes = H" implies "((name = *.txt AND size + > 1000) OR attributes = H)" while "attributes = H OR name = *.txt + and size > 1000" evaluates to "((attributes = H OR name = *.txt) + AND size > 1000)". When in doubt, use parenthesis. + + + + Using time properties requires some extra care. If you want to + retrieve all entries that were last updated on 2009 February 14, + specify "mtime >= 2009-02-14 AND mtime < 2009-02-15". Read this + to say: all files updated after 12:00am on February 14th, until + 12:00am on February 15th. You can use the same bracketing approach to + specify any time period - a year, a month, a week, and so on. + + + + The syntax allows one special case: if you provide a string with no + spaces, it is treated as a pattern to match for the filename. + Therefore a string like "*.xls" will be equivalent to specifying "name + = *.xls". This "shorthand" notation does not work with compound + criteria. + + + + There is no logic in this class that insures that the inclusion + criteria are internally consistent. For example, it's possible to + specify criteria that says the file must have a size of less than 100 + bytes, as well as a size that is greater than 1000 bytes. Obviously + no file will ever satisfy such criteria, but this class does not check + for or detect such inconsistencies. + + + + + + Thrown in the setter if the value has an invalid syntax. + + + + + Indicates whether searches will traverse NTFS reparse points, like Junctions. + + + + + Returns a string representation of the FileSelector object. + + The string representation of the boolean logic statement of the file + selection criteria for this instance. + + + + Returns the names of the files in the specified directory + that fit the selection criteria specified in the FileSelector. + + + + This is equivalent to calling + with recurseDirectories = false. + + + + The name of the directory over which to apply the FileSelector + criteria. + + + + A collection of strings containing fully-qualified pathnames of files + that match the criteria specified in the FileSelector instance. + + + + + Returns the names of the files in the specified directory that fit the + selection criteria specified in the FileSelector, optionally recursing + through subdirectories. + + + + This method applies the file selection criteria contained in the + FileSelector to the files contained in the given directory, and + returns the names of files that conform to the criteria. + + + + The name of the directory over which to apply the FileSelector + criteria. + + + + Whether to recurse through subdirectories when applying the file + selection criteria. + + + + A collection of strings containing fully-qualified pathnames of files + that match the criteria specified in the FileSelector instance. + + + + + Retrieve the ZipEntry items in the ZipFile that conform to the specified criteria. + + + + + This method applies the criteria set in the FileSelector instance (as described in + the ) to the specified ZipFile. Using this + method, for example, you can retrieve all entries from the given ZipFile that + have filenames ending in .txt. + + + + Normally, applications would not call this method directly. This method is used + by the ZipFile class. + + + + Using the appropriate SelectionCriteria, you can retrieve entries based on size, + time, and attributes. See for a + description of the syntax of the SelectionCriteria string. + + + + + The ZipFile from which to retrieve entries. + + a collection of ZipEntry objects that conform to the criteria. + + + + Retrieve the ZipEntry items in the ZipFile that conform to the specified criteria. + + + + + This method applies the criteria set in the FileSelector instance (as described in + the ) to the specified ZipFile. Using this + method, for example, you can retrieve all entries from the given ZipFile that + have filenames ending in .txt. + + + + Normally, applications would not call this method directly. This method is used + by the ZipFile class. + + + + This overload allows the selection of ZipEntry instances from the ZipFile to be restricted + to entries contained within a particular directory in the ZipFile. + + + + Using the appropriate SelectionCriteria, you can retrieve entries based on size, + time, and attributes. See for a + description of the syntax of the SelectionCriteria string. + + + + + The ZipFile from which to retrieve entries. + + + the directory in the archive from which to select entries. If null, then + all directories in the archive are used. + + + a collection of ZipEntry objects that conform to the criteria. + + + + Summary description for EnumUtil. + + + + + Returns the value of the DescriptionAttribute if the specified Enum + value has one. If not, returns the ToString() representation of the + Enum value. + + The Enum to get the description for + + + + + Converts the string representation of the name or numeric value of one + or more enumerated constants to an equivalent enumerated object. + Note: use the DescriptionAttribute on enum values to enable this. + + The System.Type of the enumeration. + + A string containing the name or value to convert. + + + + + + Converts the string representation of the name or numeric value of one + or more enumerated constants to an equivalent enumerated object. A + parameter specified whether the operation is case-sensitive. Note: + use the DescriptionAttribute on enum values to enable this. + + The System.Type of the enumeration. + + A string containing the name or value to convert. + + + Whether the operation is case-sensitive or not. + + + +