Gestire archivi ZIP con C#
Precedentemente alla versione 4.5 del .NET Framework, la creazione / gestione degli archivi ZIP richiedeva delle librerie esterne.
Con l'ultima versione invece possiamo usare direttamente l'oggetto ZipFile.
Questa classe statica ha già tutti i metodi che ci servono.
Ad esempio per creare un archivio con dati presi da una directory:
ZipFile.CreateFromDirectory(@"C:\Source", @"C:\Archivio.zip");
Il metodo CreateFromDirectory richiede almeno due parametri: la directory con i dati da archiviare, e il percorso di creazione dell'archivio.
Volendo possiamo impostare anche il livello di compressione e se includere la directory di base:
ZipFile.CreateFromDirectory(@"C:\Cartella_da_comprimere", @"C:\Archivio.zip", CompressionLevel.Optimal, false);
Per estrarre un archivio possiamo usare il metodo ExtractToDirectory, che richiede almeno due parametri: l'archivio ZIP e dove estrarre i file:
ZipFile.ExtractToDirectory(@"C:\Archivio.zip", @"C:\Cartella_estrazione");
Volendo possiamo passare un terzo parametro per l'Eoncoding.
In questi esempi, però, abbiamo dato per scontato che i file esistano.
Vediamo, quindi, un esempio di base per i file creati a runtime:
using (MemoryStream ms = new MemoryStream())
{
using (ZipArchive zip = new ZipArchive(ms, ZipArchiveMode.Create, true))
{
ZipArchiveEntry zipEntry = zip.CreateEntry("file.txt");
using (StreamWriter sw = new StreamWriter(zipEntry.Open()))
{
sw.WriteLine("FILE CREATO.");
}
}
using (Stream file = File.Create(@"C:\Archivio.zip"))
{
ms.Position = 0;
ms.CopyTo(file);
}
}
L'esempio è da adattare, in quanto si occupa anche di creare un file, che magari al programma arriva da un'altra parte.
Qui abbiamo usato le classi ZipArchive e ZipArchiveEntry.
Ciao!!
c# zip ziparchive ziparchiveentry memorystream
Commentami!