Crea ZIP in C#

Gli archivi ZIP vengono utilizzati per comprimere e conservare uno o più file o cartelle in un unico contenitore. Un archivio ZIP incapsula i file e le cartelle e conserva le informazioni sui metadati. L’uso più comune dell’archiviazione è la riduzione delle dimensioni dei file per l’archiviazione o la trasmissione e l’applicazione della crittografia per la sicurezza. Oltre agli strumenti di compressione dei file, le funzionalità di compressione/estrazione automatizzate vengono utilizzate anche all’interno di varie applicazioni desktop e Web per caricare, scaricare, condividere o crittografare i file. Questo articolo si rivolge anche a scenari simili e presenta alcuni semplici modi per comprimere file o cartelle e creare archivi ZIP a livello di codice usando C#.

In questo articolo imparerai come eseguire le seguenti operazioni di archiviazione ZIP:

Libreria ZIP C#

Aspose.ZIP for .NET è un’API potente e facile da usare per comprimere o decomprimere file e cartelle all’interno di applicazioni .NET. Fornisce inoltre tecniche di crittografia AES per crittografare i file in ZIP in C#. Puoi installare l’API da NuGet o scaricarne i binari dalla sezione Download.

Crea un archivio ZIP in C#

Di seguito sono riportati i passaggi per comprimere un file aggiungendolo a un archivio ZIP:

L’esempio di codice seguente mostra come aggiungere un file in un archivio ZIP usando C#.

// Crea FileStream per l'archivio ZIP di output
using (FileStream zipFile = File.Open("compressed_file.zip", FileMode.Create))
{
	// File da aggiungere all'archivio
	using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	{
		using (var archive = new Archive(new ArchiveEntrySettings()))
		{
			// Aggiungi file all'archivio
			archive.CreateEntry("alice29.txt", source1);
			// file zip
			archive.Save(zipFile);
		}
	}
}

Aggiungi più file nell’archivio ZIP in C#

Nel caso in cui desideri aggiungere più file in un archivio ZIP, puoi farlo utilizzando uno dei seguenti modi.

C# ZIP più file utilizzando FileStream

In questo metodo, la classe FileStream viene utilizzata per aggiungere file all’archivio ZIP utilizzando il metodo Archive.CreateEntry(String, FileStream). L’esempio di codice seguente mostra come aggiungere più file in un ZIP in C#.

// Crea FileStream per l'archivio ZIP di output
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
	// File da aggiungere all'archivio
	using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	{
		// File da aggiungere all'archivio
		using (FileStream source2 = File.Open("asyoulike.txt", FileMode.Open, FileAccess.Read))
		{
			using (var archive = new Archive())
			{
				// Aggiungi file all'archivio
				archive.CreateEntry("alice29.txt", source1);
				archive.CreateEntry("asyoulik3.txt", source2);
				// ZIP i file
				archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "two files are compressed in this archive" });
			}
		}
	}
}

C# ZIP più file utilizzando FileInfo

Puoi anche utilizzare la classe FileInfo per aggiungere più file in un archivio ZIP. In questo metodo, i file verranno caricati utilizzando la classe FileInfo e aggiunti all’archivio ZIP utilizzando il metodo Archive.CreateEntry(String, FileInfo). L’esempio di codice seguente mostra come ZIP più file usando la classe FileInfo in C#.

// Crea FileStream per l'archivio ZIP di output
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
	// File da aggiungere all'archivio
	FileInfo fi1 = new FileInfo("alice29.txt");
	FileInfo fi2 = new FileInfo("fields.c");

	using (var archive = new Archive())
	{
		// Aggiungi file all'archivio
		archive.CreateEntry("alice29.txt", fi1);
		archive.CreateEntry("fields.c", fi2);
		// Crea archivio ZIP
		archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
	}
}

ZIP file utilizzando Path

Invece di utilizzare le classi FileInfo o FileStream per le voci ZIP, puoi fornire il percorso del file direttamente al metodo Archive.CreateEntry(String name, String path, Boolean openImmediately, ArchiveEntrySettings newEntrySettings). L’esempio di codice seguente mostra come ZIP file usando il loro percorso.

// Crea FileStream per l'archivio ZIP di output
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
    // Crea archivio
    using (var archive = new Archive())
    {
        // Aggiungi file all'archivio ZIP
        archive.CreateEntry("data.bin", "file.dat");
        archive.Save(zipFile);
    }
}

Aggiungi cartelle a un archivio ZIP in C#

Puoi ZIP una cartella con la libreria ZIP C#, che potrebbe essere un’altra alternativa all’aggiunta di più file a un archivio ZIP. Basta inserire i file di origine in una cartella e aggiungere quella cartella all’archivio ZIP. Di seguito sono riportati i passaggi per ZIP una cartella in C#:

L’esempio di codice seguente mostra come aggiungere una cartella a ZIP in C#.

// Crea FileStream per l'archivio ZIP di output
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive())
	{
		// Cartella da zippare
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// Crea archivio ZIP
		archive.Save(zipFile);
	}
}

Crea un ZIP protetto da password usando ZipCrypto in C#

Puoi proteggere gli archivi ZIP utilizzando password e applicare la crittografia ZipCrypto. Per questo, la classe ArchiveEntrySettings viene utilizzata nel costruttore di Archive che accetta il tipo di crittografia come secondo parametro.

L’esempio di codice seguente mostra come creare un archivio ZIP protetto da password usando ZipCrypto in C#.

// Crea FileStream per l'archivio ZIP di output
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$"))))
	{
		// Aggiungi cartella all'archivio
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// Crea archivio ZIP
		archive.Save(zipFile);
	}
}

C# Crea ZIP protetto da password con crittografia AES

Aspose.ZIP per .NET consente inoltre di applicare la crittografia AES per proteggere gli archivi ZIP. È possibile utilizzare i seguenti metodi di crittografia AES:

  • AES128
  • AES192
  • AES256

Per applicare la crittografia AES, API offre la classe AesEcryptionSettings. L’esempio di codice seguente mostra come creare un ZIP protetto da password con crittografia AES in C#.

// Crea FileStream per l'archivio ZIP di output
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES128))))
	{
		// Aggiungi cartella all'archivio
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// Crea archivio ZIP
		archive.Save(zipFile);
	}
}

Imposta la modalità di compressione parallela

Puoi anche configurare l’API per la compressione parallela in caso di voci multiple. Per questo, puoi specificare la modalità di compressione parallela usando la classe ParallelOptions. Aspose.ZIP per .NET fornisce le seguenti modalità di compressione parallela.

  • Mai - Non comprimere in parallelo.
  • Sempre: comprimi in parallelo (attenzione alla memoria insufficiente).
  • Auto - Decidere se utilizzare la compressione parallela o meno sulle voci. Questa opzione può comprimere alcune voci solo in parallelo.

L’esempio di codice seguente mostra come impostare la modalità di compressione parallela durante la compressione di più file con la libreria ZIP C# di Aspose.

// Per esempi completi e file di dati, vai a https://github.com/aspose-zip/Aspose.ZIP-for-.NET
using (FileStream zipFile = File.Open(dataDir + "UsingParallelismToCompressFiles_out.zip", FileMode.Create))
{
    using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
    {
        using (FileStream source2 = File.Open(dataDir + "asyoulik.txt", FileMode.Open, FileAccess.Read))
        {
            using (var archive = new Archive())
            {
                archive.CreateEntry("alice29.txt", source1);
                archive.CreateEntry("asyoulik.txt", source2);
                //Definire il criterio di parallelismo
                var parallelOptions = new ParallelOptions
                {
                    ParallelCompressInMemory = ParallelCompressionMode.Always
                };
                archive.Save(zipFile,
                    new ArchiveSaveOptions()
                    {
                        ParallelOptions = parallelOptions,
                        Encoding = Encoding.ASCII,
                        ArchiveComment = "There are two poems from Canterbury corpus"
                    });
            }
        }
    }
}

Ulteriori informazioni sulla libreria C# .NET ZIP

Scopri di più sulla nostra API C# ZIP utilizzando le seguenti risorse:

Conclusione

In questo articolo, hai imparato come creare archivi ZIP a livello di codice in C#. Gli esempi di codice hanno dimostrato come aggiungere file e cartelle negli archivi ZIP. Inoltre, abbiamo anche spiegato come creare archivi ZIP protetti da password con ZipCrypto e metodi di crittografia AES utilizzando la libreria ZIP di C# Aspose. Inoltre, alla fine viene discussa anche la compressione parallela di più voci. Nel caso avessi domande o domande, puoi chiederci tramite il nostro forum.

Guarda anche