Créer un ZIP en C#

Les archives ZIP sont utilisées pour compresser et conserver un ou plusieurs fichiers ou dossiers dans un seul conteneur. Une archive ZIP encapsule les fichiers et les dossiers ainsi que leurs informations de métadonnées. L’utilisation la plus courante de l’archivage consiste à réduire la taille des fichiers pour le stockage ou la transmission et à appliquer le cryptage pour la sécurité. Outre les outils de compression de fichiers, les fonctionnalités de compression/extraction automatisées sont également utilisées dans diverses applications de bureau et Web pour le téléchargement, le téléchargement, le partage ou le cryptage des fichiers. Cet article cible également des scénarios similaires et présente des moyens simples de compresser des fichiers ou des dossiers et de créer des archives ZIP par programmation à l’aide de C#.

Dans cet article, vous apprendrez à effectuer les opérations d’archivage ZIP suivantes :

Bibliothèque ZIP C#

Aspose.ZIP for .NET est une API puissante et facile à utiliser pour compresser ou décompresser des fichiers et des dossiers dans les applications .NET. Il fournit également des techniques de chiffrement AES pour chiffrer les fichiers au format ZIP en C#. Vous pouvez installer l’API à partir de NuGet ou télécharger ses fichiers binaires à partir de la section Téléchargements.

Créer une archive ZIP en C#

Voici les étapes pour compresser un fichier en l’ajoutant dans une archive ZIP :

L’exemple de code suivant montre comment ajouter un fichier dans une archive ZIP à l’aide de C#.

// Créer FileStream pour l'archive ZIP de sortie
using (FileStream zipFile = File.Open("compressed_file.zip", FileMode.Create))
{
	// Fichier à ajouter à l'archive
	using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	{
		using (var archive = new Archive(new ArchiveEntrySettings()))
		{
			// Ajouter le fichier à l'archive
			archive.CreateEntry("alice29.txt", source1);
			// fichier zip
			archive.Save(zipFile);
		}
	}
}

Ajouter plusieurs fichiers dans l’archive ZIP en C#

Si vous souhaitez ajouter plusieurs fichiers dans une archive ZIP, vous pouvez le faire en utilisant l’une des méthodes suivantes.

C# ZIP plusieurs fichiers à l’aide de FileStream

Dans cette méthode, la classe FileStream est utilisée pour ajouter des fichiers à l’archive ZIP à l’aide de la méthode Archive.CreateEntry(String, FileStream). L’exemple de code suivant montre comment ajouter plusieurs fichiers dans un ZIP en C#.

// Créer FileStream pour l'archive ZIP de sortie
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
	// Fichier à ajouter à l'archive
	using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	{
		// Fichier à ajouter à l'archive
		using (FileStream source2 = File.Open("asyoulike.txt", FileMode.Open, FileAccess.Read))
		{
			using (var archive = new Archive())
			{
				// Ajouter des fichiers à l'archive
				archive.CreateEntry("alice29.txt", source1);
				archive.CreateEntry("asyoulik3.txt", source2);
				// ZIP les fichiers
				archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "two files are compressed in this archive" });
			}
		}
	}
}

C# ZIP plusieurs fichiers à l’aide de FileInfo

Vous pouvez également utiliser la classe FileInfo pour ajouter plusieurs fichiers dans une archive ZIP. Dans cette méthode, les fichiers seront chargés à l’aide de la classe FileInfo et ajoutés à l’archive ZIP à l’aide de la méthode Archive.CreateEntry(String, FileInfo). L’exemple de code suivant montre comment compresser plusieurs fichiers à l’aide de la classe FileInfo en C#.

// Créer FileStream pour l'archive ZIP de sortie
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
	// Fichiers à ajouter à l'archive
	FileInfo fi1 = new FileInfo("alice29.txt");
	FileInfo fi2 = new FileInfo("fields.c");

	using (var archive = new Archive())
	{
		// Ajouter des fichiers à l'archive
		archive.CreateEntry("alice29.txt", fi1);
		archive.CreateEntry("fields.c", fi2);
		// Créer une archive ZIP
		archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
	}
}

Fichiers ZIP utilisant le chemin

Au lieu d’utiliser les classes FileInfo ou FileStream pour les entrées ZIP, vous pouvez fournir le chemin du fichier directement à la méthode Archive.CreateEntry(String name, String path, Boolean openImmediately, ArchiveEntrySettings newEntrySettings). L’exemple de code suivant montre comment compresser des fichiers en utilisant leur chemin.

// Créer FileStream pour l'archive ZIP de sortie
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
    // Créer une archive
    using (var archive = new Archive())
    {
        // Ajouter le fichier à l'archive ZIP
        archive.CreateEntry("data.bin", "file.dat");
        archive.Save(zipFile);
    }
}

Ajouter des dossiers à une archive ZIP en C#

Vous pouvez compresser un dossier avec la bibliothèque C# ZIP, ce qui pourrait être une autre alternative pour ajouter plusieurs fichiers à une archive ZIP. Placez simplement les fichiers source dans un dossier et ajoutez ce dossier à l’archive ZIP. Voici les étapes pour compresser un dossier en C# :

L’exemple de code suivant montre comment ajouter un dossier à ZIP en C#.

// Créer FileStream pour l'archive ZIP de sortie
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive())
	{
		// Dossier à compresser
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// Créer une archive ZIP
		archive.Save(zipFile);
	}
}

Créer un ZIP protégé par mot de passe à l’aide de ZipCrypto en C#

Vous pouvez protéger les archives ZIP à l’aide de mots de passe et appliquer le cryptage ZipCrypto. Pour cela, la classe ArchiveEntrySettings est utilisée dans le constructeur de l’Archive qui accepte le type de chiffrement comme deuxième paramètre.

L’exemple de code suivant montre comment créer une archive ZIP protégée par mot de passe à l’aide de ZipCrypto en C#.

// Créer FileStream pour l'archive ZIP de sortie
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$"))))
	{
		// Ajouter un dossier à l'archive
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// Créer une archive ZIP
		archive.Save(zipFile);
	}
}

C# Créer un ZIP protégé par mot de passe avec le cryptage AES

Aspose.ZIP for .NET vous permet également d’appliquer le cryptage AES pour protéger les archives ZIP. Vous pouvez utiliser les méthodes de chiffrement AES suivantes :

  • AES128
  • AES192
  • AES256

Afin d’appliquer le chiffrement AES, l’API propose la classe AesEcryptionSettings. L’exemple de code suivant montre comment créer un ZIP protégé par mot de passe avec chiffrement AES en C#.

// Créer FileStream pour l'archive ZIP de sortie
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES128))))
	{
		// Ajouter un dossier à archiver
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// Créer une archive ZIP
		archive.Save(zipFile);
	}
}

Définir le mode de compression parallèle

Vous pouvez également configurer l’API pour une compression parallèle en cas d’entrées multiples. Pour cela, vous pouvez spécifier le mode de compression parallèle à l’aide de la classe ParallelOptions. Aspose.ZIP for .NET fournit les modes de compression parallèle suivants.

  • Never - Ne pas compresser en parallèle.
  • Always - Compressez en parallèle (attention au manque de mémoire).
  • Auto - Décidez d’utiliser ou non la compression parallèle sur les entrées. Cette option peut compresser certaines entrées en parallèle uniquement.

L’exemple de code suivant montre comment définir le mode de compression parallèle lors de la compression de plusieurs fichiers avec la bibliothèque C# ZIP d’Aspose.

// Pour des exemples complets et des fichiers de données, rendez-vous sur 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);
                //Définir le critère de parallélisme
                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"
                    });
            }
        }
    }
}

En savoir plus sur la bibliothèque ZIP C# .NET

Découvrez-en plus sur notre API C# ZIP en utilisant les ressources suivantes :

Conclusion

Dans cet article, vous avez appris à créer des archives ZIP par programmation en C#. Les exemples de code ont montré comment ajouter des fichiers et des dossiers dans les archives ZIP. En outre, nous avons également expliqué comment créer des archives ZIP protégées par mot de passe avec les méthodes de cryptage ZipCrypto et AES à l’aide de la bibliothèque ZIP de C# Aspose. Parallèlement, la compression parallèle d’entrées multiples est également abordée à la fin. Si vous avez des questions ou des questions, vous pouvez nous les poser via notre forum.

Voir également