Разархивировать или заархивировать любой zip файл буквально в несколько строк кода, можно с помощью бесплатной библиотеки DotNetZip.
// Разархивирование
try
{
using (ZipFile zipApp = new ZipFile(@"D:\Test.zip"))
{
DirectoryInfo di = new DirectoryInfo(@"C:\!");
if (!di.Exists)
{
di.Create();
}
zipApp.ExtractAll(di.FullName,true);
}
}
catch (System.Exception ex)
{
MessageBox.Show("exception: " + ex);
}
Для того что бы отобразить процесс выполнения архивации/разархивации необходимо воспользоваться событием ExtractProgress:
public void ExtractProgress(object sender, ExtractProgressEventArgs e)
{
if (e.EventType == ZipProgressEventType.Extracting_EntryBytesWritten)
{
pbBytes.Maximum = (int) e.TotalBytesToTransfer;
pbBytes.Value = (int) e.BytesTransferred;
}
else if (e.EventType == ZipProgressEventType.Extracting_BeforeExtractEntry)
{
pbFiles.Maximum = e.EntriesTotal;
pbFiles.Value = e.EntriesExtracted;
}
}
private void Extract()
{
// Разархивирование
try
{
using (ZipFile zipApp = new ZipFile(@"D:\Test.zip"))
{
DirectoryInfo di = new DirectoryInfo(@"C:\!");
if (!di.Exists)
{
di.Create();
}
zipApp.ExtractProgress += ExtractProgress;
zipApp.ExtractAll(di.FullName,true);
}
}
catch (System.Exception ex1)
{
MessageBox.Show("exception: " + ex1);
}
}
P.S. Для этого также можно использовать встроенный класс GZipStream и еще одну сторонюю библиотеку SharpZipLib не говоря уже о вызове установленного архиватора через параметры командной строки.
P.P.S. Для того что бы не копировать каждый раз с исполняемым файлом еще и библиотеку для разархивирования, можно воспользоваться ilmerge