Xceed .NET Libraries Documentation
Using the ByteProgression and InvalidPassword events (ZipReader) Snippet
The following examples demonstrate how to use ZipReader's ByteProgression and InvalidPassword events, as well as their event arguments.
using System.IO;
using Xceed.Zip.ReaderWriter;
//The source Zip archive.
using (FileStream fileStream1 = new FileStream(@"d:\testOutput\test.zip",
  FileMode.Open, FileAccess.Read))
{
  //Must seek to the beginning of the stream before reading.
  fileStream1.Seek(0, SeekOrigin.Begin);
  //Create a ZipReader around the stream.
  Xceed.Zip.ReaderWriter.ZipReader zipReader1 =
    new Xceed.Zip.ReaderWriter.ZipReader(fileStream1);
  //Subscribe to the ByteProgression event
  zipReader1.ByteProgression +=
    new EventHandler<ZipReaderByteProgressionEventArgs>
    (zipReader1_ByteProgression);
  //Subscribe to the InvalidPassword event
  zipReader1.InvalidPassword +=
    new EventHandler<ZipReaderInvalidPasswordEventArgs>
    (zipReader1_InvalidPassword);
  ZipItemLocalHeader zipItemLocalHeader = null;
  //Read the local headers until no more are found
  while ((zipItemLocalHeader = zipReader1.ReadItemLocalHeader()) != null)
  {
    byte[] buffer = new byte[1024];
    int read = 0;
    //Read the item's data
    while ((read = zipReader1.ReadItemData(buffer, 0, buffer.Length)) > 0)
    {
      //Do something with the data in 'buffer'
    }
  }
}

//The InvalidPassword event's handler. Demonstrates the use of
//the properties of ZipReaderInvalidPasswordEventArgs.
static void zipReader1_InvalidPassword(object sender,
  ZipReaderInvalidPasswordEventArgs e)
{
  Console.Write("Enter password for file {0} (<Enter> alone to abort): ",
    e.ZipItemLocalHeader.FileName);
  string password = Console.ReadLine();
  if (string.IsNullOrEmpty(password))
  {
    //Set Abort to true to abort the read operation.
    e.Abort = true;
  }
  else
  {
    //Set NewPassword to the provided password. If it is the correct password,
    //the read operation will proceed. Otherwise, the InvalidPassword event is
    //raised again.
    e.NewPassword = password;
  }
}
//The ByteProgression event's handler. Demonstrates the use of
//the properties of ZipReaderByteProgressionEventArgs.
static void zipReader1_ByteProgression(object sender,
   ZipReaderByteProgressionEventArgs e)
{
  if (e.UncompressedSize == -1)
    Console.WriteLine("Processing item {0}: {1} bytes processed.",
      e.ZipItemLocalHeader.FileName, e.BytesProcessed);
  else
  {
    //UncompressedSize is not -1, so this property and the Percent property
    //return useful values.
    Console.WriteLine("Processing item {0}: {1} bytes processed ({3}%).
      (Uncompressed size = {3}.)",
      e.ZipItemLocalHeader.FileName,
      e.BytesProcessed,
      e.UncompressedSize,
      e.Percent);
  }
}
Imports System.IO
Imports Xceed.Zip.ReaderWriter
Using fileStream1 As New FileStream("d:\testOutput\test.zip",
  FileMode.Open, FileAccess.Read)

  'Must seek to the beginning of the stream before reading.
  fileStream1.Seek(0, SeekOrigin.Begin)
  'Create a ZipReader around the stream.
  Dim zipReader1 As New Xceed.Zip.ReaderWriter.ZipReader(fileStream1)
  'Subscribe to the ByteProgression event
  AddHandler zipReader1.ByteProgression, AddressOf Of
    ZipReaderByteProgressionEventArgs
  'Subscribe to the InvalidPassword event
  AddHandler zipReader1.InvalidPassword, AddressOf Of
    ZipReaderInvalidPasswordEventArgs
  Dim zipItemLocalHeader As ZipItemLocalHeader = Nothing
  'Read the local headers until no more are found
  Do While Not (zipItemLocalHeader = zipReader1.ReadItemLocalHeader()) Is
  Nothing
    Dim buffer As Byte() = New Byte(1023){}
    Dim read As Integer = 0
    'Read the item's data
    Do While (read = zipReader1.ReadItemData(buffer, 0, buffer.Length)) > 0
      'Do something with the data in 'buffer'
    Loop
  Loop
End Using

'The InvalidPassword event's handler. Demonstrates the use of
'the properties of ZipReaderInvalidPasswordEventArgs.
Shared Sub zipReader1_InvalidPassword(ByVal sender As Object, ByVal e As
  ZipReaderInvalidPasswordEventArgs)
  Console.Write("Enter password for file {0} (<Enter> alone to abort): ",
    e.ZipItemLocalHeader.FileName)
  Dim password As String = Console.ReadLine()
  'Set Abort to true to abort the read operation.
  If String.IsNullOrEmpty(password) Then
    e.Abort = True
  Else
    'Set NewPassword to the provided password. If it is the correct password,
    'the read operation will proceed. Otherwise, the InvalidPassword event is
    'raised again.
    e.NewPassword = password
  End If
End Sub

'The ByteProgression event's handler. Demonstrates the use of
'the properties of ZipReaderByteProgressionEventArgs.
Shared Sub zipReader1_ByteProgression(ByVal sender As Object, ByVal e As
  ZipReaderByteProgressionEventArgs)
  If e.UncompressedSize = -1 Then
    Console.WriteLine("Processing item {0}: {1} bytes processed.",
      e.ZipItemLocalHeader.FileName, e.BytesProcessed)
  Else
    'UncompressedSize is not -1, so this property and the Percent
    'property return useful values.
    Console.WriteLine("Processing item {0}: {1} bytes processed
      ({3}%). (Uncompressed size = {3}.)",
      e.ZipItemLocalHeader.FileName,
      e.BytesProcessed, e.UncompressedSize, e.Percent)
  End If
End Sub