Si riporta l'articolo scritto per il sito
http://www.iprogrammatori.it/articoli/programmazione/art_net-comprimere-e-decomprimere-i-file-tra_1512.aspx
In questo articolo vedremo come utilizzare la libreria DotNetZip, scaricabile gratuitamente da questo sito
http://dotnetzip.codeplex.com/ per comprimere e decomprimere i file.
La libreria, come in molti progetti presenti in Codeplex è gratuita ed utilizzabile in vari scenari.
Vedremo alcuni esempi di codice da utilizzare con il linguaggio di programmazione VB.Net e C# sia in ambito Windows Application e webapplication.
Dopo aver scaricare il componente dal seguente sito
http://dotnetzip.codeplex.com/ decomprimere la cartella, nella quale troviamo, esempi di codice, librerie per diversi ambienti e dll.
Stesura del codice
Si crea un nuovo progetto con Visual Studio di tipo “Windows Application”, per il linguaggio VB.Net e C#.
Aggiungete quattro pulsanti, come riportato in figura 1
Figura 1 – la form
Ogni pulsante eseguirà un determinato frammento di codice per comprimere o decomprimere.
Aggiungiamo al nostro progetto, un riferimento alla libreria presente nella cartella “zip-v1.9” dove v1.9 indica la versione della libreria (possiamo trovare altre versione nei prossimi mesi) selezionando dalla cartella “Release” la libreria “Ionic.Zip”
Dopo aver aggiunto tale riferimento, inseriamo lo spazio dei nomi, qui di seguito la dichiaraizone per il linguaggio di programmazione VB.Net e C#.
VB.Net
Imports Ionic.Zip
C#
using Ionic.Zip;
Dopo aver aggiunto lo spazio dei nomi, abbiamo a disposizione le classi per comprimere e decomprimere i file o intere cartelle.
Per il pulsante con la dicitura “Zip”, il primo di destra della figura 1, nell’evento click scriviamo il seguente codice.
VB.Net
Private Sub
BtnZip_Click(sender As Object, e As EventArgs) Handles
BtnZip.Click
Using fileZip As New ZipFile()
fileZip.AddFile("E:\Filetest1Zip.jpg")
fileZip.AddFile("E:\Filetest2Zip.jpg")
fileZip.AddFile("E:\Filetest3Zip.jpg")
fileZip.Save("E:\FileCompresso.zip")
End Using
C#
private void
BtnZip_Click(object sender, EventArgs e)
{
using (ZipFile fileZip
= new ZipFile())
{
fileZip.AddFile("E:\\Filetest1Zip.jpg");
fileZip.AddFile("E:\\Filetest2Zip.jpg");
fileZip.AddFile("E:\\Filetest3Zip.jpg");
fileZip.Save("E:\\FileCompresso.zip");
}
}
Come si vede dal frammento di codice precedente, tramite la classe ZipFile, si crea un oggetto con il quale si crea un file compresso.
Il metodo “AddFile”, permette di aggiungere il singolo file, impostando il percorso e nome del file da comprimere.
Con il metodo “Save” si crea il file Compresso, passando come parametro, il percorso e nome file compresso.
Ora facciamo doppio click sul secondo pulsante partendo da destra, quello con la dicitura “Zip multi file directory”. Nell’evento click di questo pulsante, abbiamo la possibilità di creare un file compresso, dove al suo interno avremmo delle cartelle che contengono dei file.
Qui di seguito il frammento di codice di esempio.
VB.Net
Private Sub
btnFileConDirectory_Click(sender As Object, e As EventArgs) Handles
btnFileConDirectory.Click
Using fileZip As New ZipFile()
fileZip.AddFile("E:\Filetest1Zip.jpg", "immagine")
fileZip.AddFile("E:\Filetest2Zip.jpg", "files")
fileZip.AddFile("E:\Filetest3Zip.jpg")
fileZip.Save("E:\FileCompresso.zip")
End Using
End Sub
C#
private void
btnFileConDirectory_Click(object sender, EventArgs e)
{
using (ZipFile fileZip
= new ZipFile())
{
fileZip.AddFile("E:\\Filetest1Zip.jpg", "immagine");
fileZip.AddFile("E:\\Filetest2Zip.jpg", "files");
fileZip.AddFile("E:\\Filetest3Zip.jpg");
fileZip.Save("E:\\FileCompresso.zip");
}
}
Come si vede dal frammento di codice, utilizzando il metodo “AddFile” con il secondo parametro indichiamo la cartella all’interno del file compresso che dobbiamo creare ed aggiungerci il file.
Adesso vediamo un altro esempio di codice, con il quale comprimere un’intera cartella con al suo interno dei file.
Facciamo doppio click sul secondo pulsante, partendo da sinistra, quello con la dicitura “Zip directory”.
Nell’evento click scriviamo il frammento di codice riportato qui di seguito.
VB.Net
Private Sub
BtnCompressDirectory_Click(sender As Object, e As EventArgs) Handles
BtnCompressDirectory.Click
Using fileZip As New ZipFile()
fileZip.AddDirectory("E:\TestCartellaDaZippare")
fileZip.Save("E:\FileCompresso.zip")
End Using
End Sub
C#
private void
BtnCompressDirectory_Click(object sender, EventArgs e)
{
using (ZipFile fileZip
= new ZipFile())
{
fileZip.AddDirectory("E:\\TestCartellaDaZippare");
fileZip.Save("E:\\FileCompresso.zip");
}
}
Come si vede dal precedente codice, tramite il metodo “AddDirectory” passando come parametro il percorso della cartella, aggiungiamo nell’archivio del file compresso tutti i file presenti in quella cartella.
Ora che abbiamo visto la parte per comprimere i file, vediamo invece come decomprimere i file compressi.
Facciamo doppio click sul primo pulsante di sinistra, quello con scritto “Decomprimere”, nell’evento click di tale pulsante scriviamo il codice per decomprimere.
VB.Net
Private Sub BtnDecomprimere_Click(sender
As Object, e As EventArgs) Handles
BtnDecomprimere.Click
Using fileZip As ZipFile = ZipFile.Read("E:\FileCompresso.zip")
For Each
DecomprimiZip As ZipEntry In fileZip
DecomprimiZip.Extract("E:\CartellaFileDecompressi")
Next
End Using
End Sub
C#
private void
BtnDecomprimere_Click(object sender, EventArgs e)
{
using (ZipFile fileZip
= ZipFile.Read("E:\\FileCompresso.zip"))
{
foreach (ZipEntry
DecomprimiZip in fileZip)
{
DecomprimiZip.Extract("E:\\CartellaFileDecompressi");
}
}
}
Come si è visto dal precedente codice, tramite il metodo “Read” passando come paramentro, il percorso e nome del file compresso della classe ZipFile, andiamo a rilevare i file e cartelle contenuti al suo interno, tramite la classe ZipEntry, con il metodo “Extract” passando come parametro il pecorso e cartella in cui estrae tutti i file presenti nel file compresso.
Vediamo come utilizzare la libreria anche in ambiente web, in particolare tramite pagina asp.Net.
Dopo aver creato un nuovo progetto Asp.net ed aggiunto ad una pagina un pulsante, aggiungiamo nel progetto web, il riferimento alla libreria DotNetZip, a questo punto, inseriamo lo spazio dei nomi che abbiamo visto in precedenza.
Nell’evento click del pulsante web, dobbiamo prima di tutto creare un file compresso, tramite la classe Zipfile, e tramite il metodo save, passare la classe response, in particolare la proprietà “outputstream”.
Qui di seguito il frammento di codice per entrambi i linguaggi.
VB.Net
Using fileZip As New ZipFile()
fileZip.AddDirectory("E:\TestCartellaDaZippare")
Response.Clear()
Response.AddHeader("Content-Disposition", "attachment;
filename=DownloadedFile.zip")
Response.ContentType = "application/zip"
fileZip.Save(Response.OutputStream)
Response.End()
End Using
C#
protected void
BtnDownloadZip_Click(object sender, EventArgs e)
{
using (ZipFile fileZip
= new ZipFile())
{
fileZip.AddDirectory("E:\\TestCartellaDaZippare");
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment;
filename=DownloadedFile.zip");
Response.ContentType = "application/zip";
fileZip.Save(Response.OutputStream);
Response.End();
}
}
Conclusioni
In questo articolo, abbiamo visto come tramite la libreria gratuita DotnetZip possiamo creare applicazioni, anche di una certa complessità, che con poche righe di codice, ci permettono di comprimere file e cartelle.
L’utilizzo delle classi messe a disposizione da questa libreria è molto semplice ed i vari metodi permettono di scrivere con poche righe di codice, operazioni anche complesse.
Nell’articolo sono state affrontate in maniera basilare, come comprimere e decomprimere file sia in ambiente Windows Application e sia in ambiente Web, naturalmente il lettore potrà approfondire tale funzionalità ed eventualmente condividere la sua esperienza, inserendo i commenti in questo articolo.