Comprimere e decomprimere file in C#
Dopo aver creato il file zip si possono aggiungere tutti i file al suo interno tramite il metodo CreateEntryFromFile. Questo metodo richiede tre parametri: nome del file, percorso del file e livello di compressione (CompressionLevel). Il livello di compressione stabilisce se il tipo di compressione debba essere ottimizzata per velocità o dimensioni. I valori possibili sono Optimal, Fastest e NoCompression. Nel nostro caso ho selezionato il valore Optimal che significa compressione massima possibile, ma in maggior tempo. Il valore Fastest indica una compressione veloce ma non molto efficiente, mentre il valore NoCompression significa che sui file di origine non viene effettuata alcuna compressione. Ricordiamoci sempre di chiamare il metodo Dispose per gli oggetti ZipArchive.Andiamo adesso a vedere il codice da inserire all'interno del gestore dell'evento click del pulsante Apri (apriBtn_Click) per fare in modo che l'utente possa selezionare un file zip e visualizzare i file contenuti al suo interno
private void apriBtn_Click(object sender, EventArgs e)
{
DialogResult result = openFileDialog1.ShowDialog();
if (result == DialogResult.OK)
{
ZipArchive zip = ZipFile.OpenRead(openFileDialog1.FileName);
listaFileLb.Items.Clear();
foreach (ZipArchiveEntry entry in zip.Entries)
{
listaFileLb.Items.Add(entry.FullName);
}
}
}
In questo caso utilizziamo il metodo OpenRead della classe ZipFile, che serve per aprire in lettura un file zip esistente. Tale metodo restituisce una collezione di oggetti ZipArchiveEntry, iterando sulla quale (tramite un ciclo foreach) possiamo ottenere il nome dei file contenuti nel file compresso e visualizzarli all'interno della ListBox.
Infine andiamo a vedere il codice da inserire all'interno del gestore dell'evento click del pulsante Estrai (estraiBtn_Click)
private void estraiBtn_Click(object sender, EventArgs e)
{
DialogResult result = openFileDialog1.ShowDialog();
if (result == DialogResult.OK)
{
percorsoEstrazioneTb.Text = openFileDialog1.FileName;
DialogResult result2 = folderBrowserDialog1.ShowDialog();
if (result2 == DialogResult.OK)
{
ZipFile.ExtractToDirectory(openFileDialog1.FileName, folderBrowserDialog1.SelectedPath);
MessageBox.Show("Il file ZIP è stato estratto correttamente.");
}
}
}
Per estrarre il contenuto di un file zip esistente dobbiamo utilizzare il metodo ExtractToDirectory della classe ZipFile. Tale metodo richiede due parametri: il percorso del file compresso e il percorso della cartella di destinazione del contenuto.
Dopo aver implementato i suddetti metodi possiamo avviare e testare la nostra applicazione.