sabato 15 luglio 2017

.Net comprimere i file tramite la libreria DotNetZip in VB.net e C#

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.

Nessun commento: