Class ZipFile
This class represents a Zip archive. You can ask for the contained entries, or get an input stream for a file entry. The entry is automatically decompressed.
You can also update the archive adding or deleting entries.
This class is thread safe for input: You can open input streams for arbitrary
entries in different threads.
Author of the original java version : Jochen Hoenicke
Inheritance
Implements
Inherited Members
Namespace: ICSharpCode.SharpZipLib.Zip
Assembly: ICSharpCode.SharpZipLib.dll
Syntax
public class ZipFile : IEnumerable, IDisposable
Examples
using System;
using System.Text;
using System.Collections;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
class MainClass
{
static public void Main(string[] args)
{
using (ZipFile zFile = new ZipFile(args[0])) {
Console.WriteLine("Listing of : " + zFile.Name);
Console.WriteLine("");
Console.WriteLine("Raw Size Size Date Time Name");
Console.WriteLine("-------- -------- -------- ------ ---------");
foreach (ZipEntry e in zFile) {
if ( e.IsFile ) {
DateTime d = e.DateTime;
Console.WriteLine("{0, -10}{1, -10}{2} {3} {4}", e.Size, e.CompressedSize,
d.ToString("dd-MM-yy"), d.ToString("HH:mm"),
e.Name);
}
}
}
}
}
Constructors
| Improve this Doc View SourceZipFile(FileStream)
Opens a Zip file reading the given System.IO.FileStream.
Declaration
public ZipFile(FileStream file)
Parameters
Type | Name | Description |
---|---|---|
System.IO.FileStream | file | The System.IO.FileStream to read archive data from. |
Exceptions
Type | Condition |
---|---|
System.ArgumentNullException | The supplied argument is null. |
System.IO.IOException | An i/o error occurs. |
ZipException | The file doesn't contain a valid zip archive. |
ZipFile(FileStream, Boolean)
Opens a Zip file reading the given System.IO.FileStream.
Declaration
public ZipFile(FileStream file, bool leaveOpen)
Parameters
Type | Name | Description |
---|---|---|
System.IO.FileStream | file | The System.IO.FileStream to read archive data from. |
System.Boolean | leaveOpen | true to leave the System.IO.FileStream open when the ZipFile is disposed, false to dispose of it |
Exceptions
Type | Condition |
---|---|
System.ArgumentNullException | The supplied argument is null. |
System.IO.IOException | An i/o error occurs. |
ZipException | The file doesn't contain a valid zip archive. |
ZipFile(Stream)
Opens a Zip file reading the given System.IO.Stream.
Declaration
public ZipFile(Stream stream)
Parameters
Type | Name | Description |
---|---|---|
System.IO.Stream | stream | The System.IO.Stream to read archive data from. |
Exceptions
Type | Condition |
---|---|
System.IO.IOException | An i/o error occurs |
ZipException | The stream doesn't contain a valid zip archive. |
System.ArgumentException | The System.IO.Stream doesnt support seeking. |
System.ArgumentNullException | The System.IO.Stream argument is null. |
ZipFile(Stream, Boolean, StringCodec)
Opens a Zip file reading the given System.IO.Stream.
Declaration
public ZipFile(Stream stream, bool leaveOpen, StringCodec stringCodec = null)
Parameters
Type | Name | Description |
---|---|---|
System.IO.Stream | stream | The System.IO.Stream to read archive data from. |
System.Boolean | leaveOpen | true to leave the System.IO.Stream open when the ZipFile is disposed, false to dispose of it |
StringCodec | stringCodec |
Exceptions
Type | Condition |
---|---|
System.IO.IOException | An i/o error occurs |
ZipException | The stream doesn't contain a valid zip archive. |
System.ArgumentException | The System.IO.Stream doesnt support seeking. |
System.ArgumentNullException | The System.IO.Stream argument is null. |
ZipFile(String, StringCodec)
Opens a Zip file with the given name for reading.
Declaration
public ZipFile(string name, StringCodec stringCodec = null)
Parameters
Type | Name | Description |
---|---|---|
System.String | name | The name of the file to open. |
StringCodec | stringCodec |
Exceptions
Type | Condition |
---|---|
System.ArgumentNullException | The argument supplied is null. |
System.IO.IOException | An i/o error occurs |
ZipException | The file doesn't contain a valid zip archive. |
Fields
| Improve this Doc View SourceKeysRequired
Event handler for handling encryption keys.
Declaration
public ZipFile.KeysRequiredEventHandler KeysRequired
Field Value
Type | Description |
---|---|
ZipFile.KeysRequiredEventHandler |
Properties
| Improve this Doc View SourceBufferSize
Get /set the buffer size to be used when updating this zip file.
Declaration
public int BufferSize { get; set; }
Property Value
Type | Description |
---|---|
System.Int32 |
Count
Get the number of entries contained in this ZipFile.
Declaration
public long Count { get; }
Property Value
Type | Description |
---|---|
System.Int64 |
EntryByIndex[Int32]
Indexer property for ZipEntries
Declaration
public ZipEntry this[int index] { get; }
Parameters
Type | Name | Description |
---|---|---|
System.Int32 | index |
Property Value
Type | Description |
---|---|
ZipEntry |
EntryFactory
Get/set the IEntryFactory used to generate ZipEntry values during updates.
Declaration
public IEntryFactory EntryFactory { get; set; }
Property Value
Type | Description |
---|---|
IEntryFactory |
IsEmbeddedArchive
Get a value indicating whether this archive is embedded in another file or not.
Declaration
public bool IsEmbeddedArchive { get; }
Property Value
Type | Description |
---|---|
System.Boolean |
IsNewArchive
Get a value indicating that this archive is a new one.
Declaration
public bool IsNewArchive { get; }
Property Value
Type | Description |
---|---|
System.Boolean |
IsStreamOwner
Get/set a flag indicating if the underlying stream is owned by the ZipFile instance. If the flag is true then the stream will be closed when Close is called.
Declaration
public bool IsStreamOwner { get; set; }
Property Value
Type | Description |
---|---|
System.Boolean |
Remarks
The default value is true in all cases.
IsUpdating
Get a value indicating an update has been started.
Declaration
public bool IsUpdating { get; }
Property Value
Type | Description |
---|---|
System.Boolean |
Name
Gets the name of this zip file.
Declaration
public string Name { get; }
Property Value
Type | Description |
---|---|
System.String |
NameTransform
Get / set the INameTransform to apply to names when updating.
Declaration
public INameTransform NameTransform { get; set; }
Property Value
Type | Description |
---|---|
INameTransform |
Password
Password to be used for encrypting/decrypting files.
Declaration
public string Password { set; }
Property Value
Type | Description |
---|---|
System.String |
Remarks
Set to null if no password is required.
Size
Gets the number of entries in this zip file.
Declaration
[Obsolete("Use the Count property instead")]
public int Size { get; }
Property Value
Type | Description |
---|---|
System.Int32 |
Exceptions
Type | Condition |
---|---|
System.InvalidOperationException | The Zip file has been closed. |
SkipLocalEntryTestsOnLocate
Skip the verification of the local header when reading an archive entry. Set this to attempt to read the entries even if the headers should indicate that doing so would fail or produce an unexpected output.
Declaration
public bool SkipLocalEntryTestsOnLocate { get; set; }
Property Value
Type | Description |
---|---|
System.Boolean |
StringCodec
Utility class for resolving the encoding used for reading and writing strings
Declaration
public StringCodec StringCodec { set; }
Property Value
Type | Description |
---|---|
StringCodec |
UseZip64
Get / set a value indicating how Zip64 Extension usage is determined when adding entries.
Declaration
public UseZip64 UseZip64 { get; set; }
Property Value
Type | Description |
---|---|
UseZip64 |
ZipCryptoEncoding
The encoding used for the ZipCrypto passwords. Defaults to DefaultZipCryptoEncoding.
Declaration
public Encoding ZipCryptoEncoding { get; set; }
Property Value
Type | Description |
---|---|
System.Text.Encoding |
ZipFileComment
Gets the comment for the zip file.
Declaration
public string ZipFileComment { get; }
Property Value
Type | Description |
---|---|
System.String |
Methods
| Improve this Doc View SourceAbortUpdate()
Abort updating leaving the archive unchanged.
Declaration
public void AbortUpdate()
See Also
| Improve this Doc View SourceAdd(IStaticDataSource, ZipEntry)
Add a ZipEntry with data.
Declaration
public void Add(IStaticDataSource dataSource, ZipEntry entry)
Parameters
Type | Name | Description |
---|---|---|
IStaticDataSource | dataSource | The source of the data for this entry. |
ZipEntry | entry | The entry to add. |
Remarks
This can be used to add file entries with a custom data source.
Exceptions
Type | Condition |
---|---|
System.NotSupportedException | The encryption method specified in |
System.NotImplementedException | Compression method is not supported for creating entries. |
Add(IStaticDataSource, String)
Add a file entry with data.
Declaration
public void Add(IStaticDataSource dataSource, string entryName)
Parameters
Type | Name | Description |
---|---|---|
IStaticDataSource | dataSource | The source of the data for this entry. |
System.String | entryName | The name to give to the entry. |
Add(IStaticDataSource, String, CompressionMethod)
Add a file entry with data.
Declaration
public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)
Parameters
Type | Name | Description |
---|---|---|
IStaticDataSource | dataSource | The source of the data for this entry. |
System.String | entryName | The name to give to the entry. |
CompressionMethod | compressionMethod | The compression method to use. |
Exceptions
Type | Condition |
---|---|
System.NotImplementedException | Compression method is not supported for creating entries. |
Add(IStaticDataSource, String, CompressionMethod, Boolean)
Add a file entry with data.
Declaration
public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod, bool useUnicodeText)
Parameters
Type | Name | Description |
---|---|---|
IStaticDataSource | dataSource | The source of the data for this entry. |
System.String | entryName | The name to give to the entry. |
CompressionMethod | compressionMethod | The compression method to use. |
System.Boolean | useUnicodeText | Ensure Unicode text is used for name and comments for this entry. |
Exceptions
Type | Condition |
---|---|
System.NotImplementedException | Compression method is not supported for creating entries. |
Add(ZipEntry)
Add a ZipEntry that contains no data.
Declaration
public void Add(ZipEntry entry)
Parameters
Type | Name | Description |
---|---|---|
ZipEntry | entry | The entry to add. |
Remarks
This can be used to add directories, volume labels, or empty file entries.
Add(String)
Add a file to the archive.
Declaration
public void Add(string fileName)
Parameters
Type | Name | Description |
---|---|---|
System.String | fileName | The name of the file to add. |
Exceptions
Type | Condition |
---|---|
System.ArgumentNullException | Argument supplied is null. |
Add(String, CompressionMethod)
Add a new entry to the archive.
Declaration
public void Add(string fileName, CompressionMethod compressionMethod)
Parameters
Type | Name | Description |
---|---|---|
System.String | fileName | The name of the file to add. |
CompressionMethod | compressionMethod | The compression method to use. |
Exceptions
Type | Condition |
---|---|
System.ArgumentNullException | ZipFile has been closed. |
System.NotImplementedException | Compression method is not supported for creating entries. |
Add(String, CompressionMethod, Boolean)
Add a new entry to the archive.
Declaration
public void Add(string fileName, CompressionMethod compressionMethod, bool useUnicodeText)
Parameters
Type | Name | Description |
---|---|---|
System.String | fileName | The name of the file to add. |
CompressionMethod | compressionMethod | The compression method to use. |
System.Boolean | useUnicodeText | Ensure Unicode text is used for name and comment for this entry. |
Exceptions
Type | Condition |
---|---|
System.ArgumentNullException | Argument supplied is null. |
System.ObjectDisposedException | ZipFile has been closed. |
System.NotImplementedException | Compression method is not supported for creating entries. |
Add(String, String)
Add a file to the archive.
Declaration
public void Add(string fileName, string entryName)
Parameters
Type | Name | Description |
---|---|---|
System.String | fileName | The name of the file to add. |
System.String | entryName | The name to use for the ZipEntry on the Zip file created. |
Exceptions
Type | Condition |
---|---|
System.ArgumentNullException | Argument supplied is null. |
AddDirectory(String)
Add a directory entry to the archive.
Declaration
public void AddDirectory(string directoryName)
Parameters
Type | Name | Description |
---|---|---|
System.String | directoryName | The directory to add. |
BeginUpdate()
Begin updating this ZipFile archive.
Declaration
public void BeginUpdate()
See Also
| Improve this Doc View SourceBeginUpdate(IArchiveStorage)
Begin updating to this ZipFile archive.
Declaration
public void BeginUpdate(IArchiveStorage archiveStorage)
Parameters
Type | Name | Description |
---|---|---|
IArchiveStorage | archiveStorage | The storage to use during the update. |
BeginUpdate(IArchiveStorage, IDynamicDataSource)
Begin updating this ZipFile archive.
Declaration
public void BeginUpdate(IArchiveStorage archiveStorage, IDynamicDataSource dataSource)
Parameters
Type | Name | Description |
---|---|---|
IArchiveStorage | archiveStorage | The archive storage for use during the update. |
IDynamicDataSource | dataSource | The data source to utilise during updating. |
Exceptions
Type | Condition |
---|---|
System.ObjectDisposedException | ZipFile has been closed. |
System.ArgumentNullException | One of the arguments provided is null |
System.ObjectDisposedException | ZipFile has been closed. |
Close()
Closes the ZipFile. If the stream is owned then this also closes the underlying input stream. Once closed, no further instance methods should be called.
Declaration
public void Close()
Exceptions
Type | Condition |
---|---|
System.IO.IOException | An i/o error occurs. |
CommitUpdate()
Commit current updates, updating this archive.
Declaration
public void CommitUpdate()
Exceptions
Type | Condition |
---|---|
System.ObjectDisposedException | ZipFile has been closed. |
See Also
| Improve this Doc View SourceCreate(Stream)
Create a new ZipFile whose data will be stored on a stream.
Declaration
public static ZipFile Create(Stream outStream)
Parameters
Type | Name | Description |
---|---|---|
System.IO.Stream | outStream | The stream providing data storage. |
Returns
Type | Description |
---|---|
ZipFile | Returns the newly created ZipFile |
Exceptions
Type | Condition |
---|---|
System.ArgumentNullException |
|
System.ArgumentException |
|
Create(String)
Create a new ZipFile whose data will be stored in a file.
Declaration
public static ZipFile Create(string fileName)
Parameters
Type | Name | Description |
---|---|---|
System.String | fileName | The name of the archive to create. |
Returns
Type | Description |
---|---|
ZipFile | Returns the newly created ZipFile |
Exceptions
Type | Condition |
---|---|
System.ArgumentNullException |
|
Delete(ZipEntry)
Delete a ZipEntry from the archive.
Declaration
public void Delete(ZipEntry entry)
Parameters
Type | Name | Description |
---|---|---|
ZipEntry | entry | The entry to delete. |
Delete(String)
Delete an entry by name
Declaration
public bool Delete(string fileName)
Parameters
Type | Name | Description |
---|---|---|
System.String | fileName | The filename to delete |
Returns
Type | Description |
---|---|
System.Boolean | True if the entry was found and deleted; false otherwise. |
Dispose(Boolean)
Releases the unmanaged resources used by the this instance and optionally releases the managed resources.
Declaration
protected virtual void Dispose(bool disposing)
Parameters
Type | Name | Description |
---|---|---|
System.Boolean | disposing | true to release both managed and unmanaged resources; false to release only unmanaged resources. |
Finalize()
Finalize this instance.
Declaration
protected void Finalize()
FindEntry(String, Boolean)
Return the index of the entry with a matching name
Declaration
public int FindEntry(string name, bool ignoreCase)
Parameters
Type | Name | Description |
---|---|---|
System.String | name | Entry name to find |
System.Boolean | ignoreCase | If true the comparison is case insensitive |
Returns
Type | Description |
---|---|
System.Int32 | The index position of the matching entry or -1 if not found |
Exceptions
Type | Condition |
---|---|
System.ObjectDisposedException | The Zip file has been closed. |
GetEntry(String)
Searches for a zip entry in this archive with the given name. String comparisons are case insensitive
Declaration
public ZipEntry GetEntry(string name)
Parameters
Type | Name | Description |
---|---|---|
System.String | name | The name to find. May contain directory components separated by slashes ('/'). |
Returns
Type | Description |
---|---|
ZipEntry | A clone of the zip entry, or null if no entry with that name exists. |
Exceptions
Type | Condition |
---|---|
System.ObjectDisposedException | The Zip file has been closed. |
GetEnumerator()
Gets an enumerator for the Zip entries in this Zip file.
Declaration
public IEnumerator GetEnumerator()
Returns
Type | Description |
---|---|
System.Collections.IEnumerator | Returns an System.Collections.IEnumerator for this archive. |
Exceptions
Type | Condition |
---|---|
System.ObjectDisposedException | The Zip file has been closed. |
GetInputStream(ZipEntry)
Gets an input stream for reading the given zip entry data in an uncompressed form. Normally the ZipEntry should be an entry returned by GetEntry().
Declaration
public Stream GetInputStream(ZipEntry entry)
Parameters
Type | Name | Description |
---|---|---|
ZipEntry | entry | The ZipEntry to obtain a data System.IO.Stream for |
Returns
Type | Description |
---|---|
System.IO.Stream | An input System.IO.Stream containing data for this ZipEntry |
Exceptions
Type | Condition |
---|---|
System.ObjectDisposedException | The ZipFile has already been closed |
ZipException | The compression method for the entry is unknown |
System.IndexOutOfRangeException | The entry is not found in the ZipFile |
GetInputStream(Int64)
Creates an input stream reading a zip entry
Declaration
public Stream GetInputStream(long entryIndex)
Parameters
Type | Name | Description |
---|---|---|
System.Int64 | entryIndex | The index of the entry to obtain an input stream for. |
Returns
Type | Description |
---|---|
System.IO.Stream | An input System.IO.Stream containing data for this |
Exceptions
Type | Condition |
---|---|
System.ObjectDisposedException | The ZipFile has already been closed |
ZipException | The compression method for the entry is unknown |
System.IndexOutOfRangeException | The entry is not found in the ZipFile |
SetComment(String)
Set the file comment to be recorded when the current update is commited.
Declaration
public void SetComment(string comment)
Parameters
Type | Name | Description |
---|---|---|
System.String | comment | The comment to record. |
Exceptions
Type | Condition |
---|---|
System.ObjectDisposedException | ZipFile has been closed. |
TestArchive(Boolean)
Test an archive for integrity/validity
Declaration
public bool TestArchive(bool testData)
Parameters
Type | Name | Description |
---|---|---|
System.Boolean | testData | Perform low level data Crc check |
Returns
Type | Description |
---|---|
System.Boolean | true if all tests pass, false otherwise |
Remarks
Testing will terminate on the first error found.
TestArchive(Boolean, TestStrategy, ZipTestResultHandler)
Test an archive for integrity/validity
Declaration
public bool TestArchive(bool testData, TestStrategy strategy, ZipTestResultHandler resultHandler)
Parameters
Type | Name | Description |
---|---|---|
System.Boolean | testData | Perform low level data Crc check |
TestStrategy | strategy | The TestStrategy to apply. |
ZipTestResultHandler | resultHandler | The ZipTestResultHandler handler to call during testing. |
Returns
Type | Description |
---|---|
System.Boolean | true if all tests pass, false otherwise |
Exceptions
Type | Condition |
---|---|
System.ObjectDisposedException | The object has already been closed. |
Explicit Interface Implementations
| Improve this Doc View SourceIDisposable.Dispose()
Declaration
void IDisposable.Dispose()