Home / Programmazione / C# - Asp.NET / Gestire archivi ZIP con C#
Mattepuffo

Gestire archivi ZIP con C#

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!!