Creare file ZIP con C#
Prossimamente saranno dedicati dei posts alla gestione dei files, mio oggetto di studio degli ultimi giorni. Oggi invece voglio parlare dell’utilizzo dei files ZIP. In C# come si fa a creare o a leggere un file ZIP? Sembra che sia necessaria una libreria esterna che si trova qui: #ziplib. Esistono delle dll per ogni versione del framework. Io utilizzo la 2.0. Dopo aver aggiunto il riferimento alla libreria possiamo utilzzarla come meglio ci pare. Per l’occazione ho sviluppato un progettino elementare, composto da: 2 textbox, una per il path della directory da zippare e un’altra con il path del file di destinazione; un bottone per generare tutta la procedura di zip e un label da utilizzare per segnalare eventuali errori. Ecco il source code dell’evento click del bottone.
private void btnZip_Click(object sender, EventArgs e)
{
String dir = txbDirectory.Text;
if ( !Directory.Exists(dir))
lblError.Text = "La Directory " + dir + " non esiste";
try
{
string[] filenames = Directory.GetFiles(dir);
string Destinazione = txbDestination.Text;
using (ZipOutputStream s = new ZipOutputStream(File.Create(Destinazione)))
{
s.SetLevel(0);
byte[] buffer = new byte[4096];
foreach (string file in filenames)
{
ZipEntry entry = new ZipEntry(Path.GetFileName(file));
// Could also use the last write time or similar for the file.
entry.DateTime = DateTime.Now;
s.PutNextEntry(entry);
using (FileStream fs = File.OpenRead(file))
{
// Using a fixed size buffer here makes no noticeable difference for output
// but keeps a lid on memory usage.
int sourceBytes;
do
{
sourceBytes = fs.Read(buffer, 0, buffer.Length);
s.Write(buffer, 0, sourceBytes);
} while (sourceBytes > 0);
}
}
s.Finish();
s.Close();
lblError.Text = "Zip creato";
}
}
catch
{
lblError.Text = "Errore nella procedura ZIP";
}
}
}
Primo controllo da effettuare: verificare l’esistenza della directory da zippare, dopo di che si procede.
Nota importante: il file di output sono riuscito ad aprirlo col gestore delle cartelle compresse di Windows, invece con WinRar riesco solo ad aprirlo e guardarci dentro ma non ad estrarre i files.
Ciao Antonio, non è possibile gestire la medesima operazione di zipping tramite i Package? Se si hai qualche buon riferimento?