Documentos de Académico
Documentos de Profesional
Documentos de Cultura
//-----------------------------------------------------------------------
-------
// ZipUtil
(16/Dic/02)
// utilidad para comprimir/descomprimir ficheros zips
// usando SharpZipLib.dll
//
// ©Guillermo 'guille' Som, 2002
//-----------------------------------------------------------------------
-------
using System;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Checksums;
using System.IO;
Directory.CreateDirectory(Path.GetDirectoryName(fileName));
streamWriter = File.Create(fileName);
}
//
int size = 2048;
byte[] data = new byte[2048];
do
{
size = z.Read(data, 0, data.Length);
if( (size > 0) )
{
streamWriter.Write(data, 0, size);
}
else
{
break;
}
}while(true);
streamWriter.Close();
}
else
{
break;
}
}while(true);
z.Close();
//
// cuando se hayan extraído los ficheros, renombrarlo
if( renombrar )
{
File.Copy(zipFic, zipFic + ".descomprimido");
}
if( eliminar )
{
File.Delete(zipFic);
}
}
//
public ZipEntry[] Contenido(string zipFic)
{
// devuelve el contenido del zip indicado
ZipInputStream strmZipInputStream = new
ZipInputStream(File.OpenRead(zipFic));
ZipEntry objEntry;
ZipEntry[] files = new ZipEntry[1];
int n = -1;
//
while ((objEntry = strmZipInputStream.GetNextEntry()) != null)
{
n = n + 1;
// hacer una copia de files
// para añadir el nuevo elemento
// ¡con lo fácil que es usar ReDim Preserve!
if(n > 0)
{
ZipEntry[] files2 = new ZipEntry[n + 1];
Array.Copy(files, files2, n);
files2[n] = objEntry;
files = new ZipEntry[n + 1];
Array.Copy(files2, files, n + 1);
files2 = null;
}
else
{
files[0] = objEntry;
}
}
strmZipInputStream.Close();
//
return files;
}
}
El formulario de ejemplo
//-----------------------------------------------------------------------
-------
// Utilidad para comprimir/descomprimir ficheros
(16/Dic/02)
// usando SharpZipLib.dll
//
// ©Guillermo 'guille' Som, 2002
//-----------------------------------------------------------------------
-------
// En este ejemplo utilizo esta constante para indicar si el código
// es compatible con el VS 2002 o para versiones posteriores
// En el caso de las versiones posteriores, se usan los bucles
// con la variable declarada junto al For o ForEach y
// para seleccionar directorios se usa la nueva clase FolderBrowserDialog
#define VS2002
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
///
/// Descripción breve de Form1.
///
public class fZipTest : System.Windows.Forms.Form
{
//
//...
//
private bool iniciando = true;
private cLine3DEx linea3D;
private OpenFileDialog openFD = new OpenFileDialog();
private ZipUtil zUtil = new ZipUtil();
//
private void fZipTest_Load(System.Object sender, System.EventArgs
e)
{
linea3D = new cLine3DEx(linea1, linea2, this);
linea3D.AdjustWidth = true;
//
zipFicTextBox.Text = "";
unZipDirTextBox.Text = "";
zipButton.Enabled = false;
//
iniciando = false;
}
mostrarButton.Enabled = false;
}
unZipButton.Enabled = mostrarButton.Enabled;
}
listaFic.Items.Add(s).SubItems.Add(fi.Length.ToString("#,##0"));
}
zipButton.Enabled = listaFic.Items.Count > 0;
}