/// <summary>
/// Decompresion de zip file to file (create directory structure if necesary)
/// </summary>
/// <param name="zipFileName"></param>
/// <param name="outputFilePath"></param>
public static void Decompress(string zipFileName, string outputFilePath)
{
FileStream input =null;
ZipInputStream zip = null;
try
{
//read file to stream
using (input = File.OpenRead(zipFileName))
{
//obtengo todas las entradas del zip
using ( zip = new ZipInputStream(input))
{
ZipEntry entry;
//recorro todos los archivos
while ((entry = zip.GetNextEntry()) != null)
{
string entryName = entry.Name;
string outFileName = outputFilePath + "\\" + entryName;
if(entryName.IndexOf('.')>0)
//is file
{
FileStream output = null;
try
{
//compress stream to file
using (output = File.Create(outFileName))
{
//copy input to ouput
//streams throw ZipInputStream
byte[] buffer = new byte[BUFFER_LENGHT]; //128 kb
while(true)
{
System.Threading.Thread.Sleep(SLEEP_UNCOMPRESS);
int count = zip.Read(buffer, 0, BUFFER_LENGHT); //128 kb
if(count==0) break;
output.Write(buffer, 0, count);
}
}
}
finally
{
if(output!=null)
output.Close();
}
}
else
//is directory
{
Directory.CreateDirectory(outFileName);
}
}
}
}
}
finally
{
if(input!=null)
input.Close();
if(zip!=null)
zip.Close();
}
}