Compresser ou d�compresser des fichiers dans .NET
Aper�u
Cet article vous apprendra comment compresser par programme des fichiers Zip � l’aide de diverses m�thodes utilisant C# ou l’API .NET et un exemple de code. Vous apprendrez � compresser ou compresser un ou plusieurs fichiers, ainsi qu’� compresser des fichiers simultan�ment. Vous apprendrez �galement � d�compresser ou d�compresser des fichiers.
Zipper ou compresser des fichiers en C# et d�compresser ou d�compresser des fichiers en C#
L’API Aspose.ZIP vous permet de compresser et d�compresser des fichiers sans vous soucier de la structure des fichiers sous-jacents. Cet article montre l’utilisation de la compression de fichiers uniques ou multiples.
Compression de fichiers
Compression d’un seul fichier
�tapes�: Compression d’un seul fichier en C#
- Cr�ez un file stream avec le nom souhait� de votre fichier zip de sortie.
- Cr�ez un flux de fichiers du fichier de donn�es � compresser.
- Cr�ez une instance de la classe Archive et transmettez-la � l’instance de la classe ArchiveEntrySettings.
- Ajoutez le fichier de donn�es cr�� � l’�tape 2 � l’aide de la m�thode Archive.CreateEntry.
- Compressez le fichier de donn�es � l’aide de la m�thode Archive.Save et transmettez-lui le flux de fichiers cr�� � l’�tape 1.
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream zipFile = File.Open(dataDir + "CompressSingleFile_out.zip", FileMode.Create))
3 {
4 //File to be added to archive
5 using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
6 {
7 using (var archive = new Archive(new ArchiveEntrySettings()))
8 {
9 archive.CreateEntry("alice29.txt", source1);
10
11 archive.Save(zipFile);
12 }
13 }
14 }Compression de plusieurs fichiers
�tapes�: Compresser plusieurs fichiers en C#
- Cr�ez un flux de fichiers avec le nom souhait� de votre fichier zip de sortie.
- Cr�ez un flux de fichiers du premier fichier de donn�es � compresser.
- Cr�ez un flux de fichiers du deuxi�me fichier de donn�es � compresser.
- Cr�ez une instance de la classe Archive.
- Ajoutez les fichiers de donn�es cr��s aux �tapes 2 et 3 � l’aide de la m�thode Archive.CreateEntry.
- Cr�ez une instance de la classe ArchiveSaveOptions.
- Compressez les fichiers de donn�es � l’aide de la m�thode Archive.Save et transmettez-lui le flux de fichiers cr�� � l’�tape 1 et l’instance de ArchiveSaveOptions cr��e � l’�tape ci-dessus.
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream zipFile = File.Open(dataDir + "CompressMultipleFiles_out.zip", FileMode.Create))
3 {
4 using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
5 {
6 using (FileStream source2 = File.Open(dataDir + "asyoulik.txt", FileMode.Open, FileAccess.Read))
7 {
8 using (var archive = new Archive())
9 {
10 archive.CreateEntry("alice29.txt", source1);
11 archive.CreateEntry("asyoulik.txt", source2);
12 archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "There are two poems from Canterbury corpus" });
13 }
14 }
15 }
16 }
17 Compresser les fichiers par informations sur le fichier
�tapes�: Compresser les fichiers par informations de fichier en C#
- Ouvrez un flux de fichiers avec FileMode.Create avec le nom souhait� de votre fichier zip de sortie.
- Cr�ez l’objet FileInfo de votre premier fichier de donn�es � compresser.
- Cr�ez l’objet FileInfo de votre deuxi�me fichier de donn�es � compresser.
- Cr�ez une instance de la classe Archive.
- Ajoutez les fichiers de donn�es cr��s aux �tapes 2 et 3 � l’aide de la m�thode Archive.CreateEntry.
- Cr�ez une instance de la classe ArchiveSaveOptions.
- Compressez les fichiers de donn�es � l’aide de la m�thode Archive.Save et transmettez-lui le flux de fichiers cr�� � l’�tape 1 et l’instance de ArchiveSaveOptions cr��e � l’�tape ci-dessus.
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream zipFile = File.Open(dataDir + "CompressFilesByFileInfo_out.zip", FileMode.Create))
3 {
4 FileInfo fi1 = new FileInfo(dataDir + "alice29.txt");
5 FileInfo fi2 = new FileInfo(dataDir + "fields.c");
6
7 using (var archive = new Archive())
8 {
9 archive.CreateEntry("alice29.txt", fi1);
10 archive.CreateEntry("fields.c", fi2);
11 archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
12 }
13 }
14 Stockage de fichiers dans des archives sans compression
�tapes�: Stockage Fichiers vers des archives sans compression en utilisant C#1. Ouvrez un flux de fichiers avec FileMode.Create avec le nom souhait� de votre fichier zip de sortie. 2. Cr�ez des objets FileInfo pour que vos fichiers de donn�es soient stock�s dans les archives. 3. Cr�ez une instance de la classe ArchiveEntrySettings et transmettez-la � l’instance de la classe StoreCompressionSettings. 4. Cr�ez une instance de la classe Archive et transmettez-la � l’instance de la classe ArchiveEntrySettings cr��e � l’�tape ci-dessus. 5. Ajoutez les objets FileInfo cr��s � l’�tape 2 � l’aide de la m�thode Archive.CreateEntry. 6. Cr�ez une instance de ArchiveSaveOptions et d�finissez Encoding = Encoding.ASCII. 7. Compressez les fichiers de donn�es � l’aide de la m�thode Archive.Save et transmettez-lui le flux de fichiers cr�� � l’�tape 1 et l’instance de ArchiveSaveOptions cr��e � l’�tape ci-dessus.
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 //Creates zip archive without compressing files
3 using (FileStream zipFile = File.Open(dataDir + "StoreMultipleFilesWithoutCompression_out.zip", FileMode.Create))
4 {
5 FileInfo fi1 = new FileInfo(dataDir + "alice29.txt");
6 FileInfo fi2 = new FileInfo(dataDir + "lcet10.txt");
7
8 using (Archive archive = new Archive(new ArchiveEntrySettings(new StoreCompressionSettings())))
9 {
10 archive.CreateEntry("alice29.txt", fi1);
11 archive.CreateEntry("lcet10.txt", fi2);
12 archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
13 }
14
15 }
16 Utiliser le parall�lisme pour compresser des fichiers
�tapes�: Utiliser le parall�lisme pour compresser des fichiers en utilisant C#
- Ouvrez un flux de fichiers avec FileMode.Create avec le nom souhait� de votre fichier zip de sortie.
- Ouvrez les flux de fichiers avec FileMode.Open et FileAccess.Read pour que vos premier et deuxi�me fichiers de donn�es soient compress�s.
- Cr�ez une instance de la classe Archive.
- Ajoutez les fichiers de donn�es cr��s � l’�tape 2 � l’aide de la m�thode Archive.CreateEntry.
- Cr�ez une instance de ParallelOptions et d�finissez ParallelCompressInMemory = ParallelCompressionMode.Always.
- Cr�ez une instance de ArchiveSaveOptions et d�finissez sa propri�t� ParallelOptions avec l’instance ci-dessus.
- Compressez les fichiers de donn�es � l’aide de la m�thode Archive.Save et transmettez-lui le flux de fichiers cr�� � l’�tape 1 et l’instance de ArchiveSaveOptions cr��e � l’�tape ci-dessus.
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream zipFile = File.Open(dataDir + "UsingParallelismToCompressFiles_out.zip", FileMode.Create))
3 {
4 using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
5 {
6 using (FileStream source2 = File.Open(dataDir + "asyoulik.txt", FileMode.Open, FileAccess.Read))
7 {
8 using (var archive = new Archive())
9 {
10 archive.CreateEntry("alice29.txt", source1);
11 archive.CreateEntry("asyoulik.txt", source2);
12 //Define the parallelism criterion
13 var parallelOptions = new ParallelOptions
14 {
15 ParallelCompressInMemory = ParallelCompressionMode.Always
16 };
17 archive.Save(zipFile,
18 new ArchiveSaveOptions()
19 {
20 ParallelOptions = parallelOptions,
21 Encoding = Encoding.ASCII,
22 ArchiveComment = "There are two poems from Canterbury corpus"
23 });
24 }
25 }
26 }
27 }
28 Compression LZMA dans l’archive ZIP
L’algorithme de cha�ne de Lempel-Ziv-Markov�(LZMA) est un�algorithme�utilis� pour effectuer�une compression de donn�es sans perte.�LZMA utilise un algorithme de compression par dictionnaire, le flux compress� est un flux de bits. La compression LZMA au sein de l’archive ZIP permet aux conteneurs ZIP de contenir des entr�es compress�es LZMA. L’exemple de code suivant montre l’impl�mentation de la compression LZMA � l’aide de l’API Aspose.ZIP.
�tapes�: Compression LZMA dans l’archive ZIP en utilisant C#
- Ouvrez un flux de fichiers avec FileMode.Create avec le nom souhait� de votre fichier zip de sortie.
- Cr�ez une instance de ArchiveEntrySettings et transmettez-lui l’instance de la classe LzmaCompressionSettings.
- Cr�ez une instance de la classe Archive et transmettez-lui l’instance de ArchiveEntrySettings cr��e ci-dessus.
- Ajoutez les fichiers de donn�es � compresser via les chemins de fichiers � l’aide de la m�thode Archive.CreateEntry.
- Compressez les fichiers de donn�es � l’aide de la m�thode Archive.Save.
1 using (FileStream zipFile = File.Open(dataDir + "LZMACompression_out.zip", FileMode.Create))
2 {
3 using (Archive archive = new Archive(new ArchiveEntrySettings(new LzmaCompressionSettings())))
4 {
5 archive.CreateEntry("sample.txt", dataDir + "sample.txt");
6 archive.Save(zipFile);
7 }
8 }Compression BZip2 dans l’archive ZIP
Les param�tres de compression BZip2 permettent au conteneur ZIP de contenir des entr�es compress�es BZip2.�L’exemple de code suivant montre l’impl�mentation de la compression BZip2 � l’aide de l’API Aspose.ZIP.
�tapes�: Compression BZip2 dans l’archive ZIP en utilisant C#
- Ouvrez un flux de fichiers avec FileMode.Create avec le nom souhait� de votre fichier zip de sortie.
- Cr�ez une instance de ArchiveEntrySettings et transmettez-lui l’instance de la classe Bzip2CompressionSettings.
- Cr�ez une instance de la classe Archive et transmettez-lui l’instance de ArchiveEntrySettings cr��e ci-dessus.
- Ajoutez les fichiers de donn�es � compresser via les chemins de fichiers � l’aide de la m�thode Archive.CreateEntry.
- Compressez les fichiers de donn�es � l’aide de la m�thode Archive.Save.
1 using (FileStream zipFile = File.Open(dataDir + "Bzip2Compression_out.zip", FileMode.Create))
2 {
3 using (Archive archive = new Archive(new ArchiveEntrySettings(new Bzip2CompressionSettings())))
4 {
5 archive.CreateEntry("sample.txt", dataDir + "sample.txt");
6 archive.Save(zipFile);
7 }
8 }
9 Compression PPMd dans l’archive ZIP
Les param�tres de compression PPMd permettent au conteneur ZIP de contenir des entr�es compress�es PPMd.�L’exemple de code suivant a d�montr� l’impl�mentation de la compression PPMd � l’aide de l’API Aspose.ZIP.
�tapes�: Compression PPMd dans l’archive ZIP en utilisant C#
- Ouvrez un flux de fichiers avec FileMode.Create avec le nom souhait� de votre fichier zip de sortie.
- Cr�ez une instance de ArchiveEntrySettings et transmettez-lui l’instance de la classe PPMdCompressionSettings.
- Cr�ez une instance de la classe Archive et transmettez-lui l’instance de ArchiveEntrySettings cr��e ci-dessus.
- Ajoutez les fichiers de donn�es � compresser via les chemins de fichiers � l’aide de la m�thode Archive.CreateEntry.
- Compressez les fichiers de donn�es � l’aide de la m�thode Archive.Save.
1 using (FileStream zipFile = File.Open(dataDir + "PPMdCompression_out.zip", FileMode.Create))
2 {
3 using (Archive archive = new Archive(new ArchiveEntrySettings(new PPMdCompressionSettings())))
4 {
5 archive.CreateEntry("sample.txt", dataDir + "sample.txt");
6 archive.Save(zipFile);
7 }
8 }
9 D�compression des archives
** D�compresser l’archive ayant un seul fichier **
�tapes�: D�compresser un seul fichier d’une archive � l’aide de C#
- Ouvrez un flux de fichiers pour le fichier ZIP d’entr�e � l’aide de FileMode.OpenRead.
- Cr�ez une instance de la classe Archive en transmettant le flux de fichiers au constructeur.
- Surveillez la progression de la d�compression � l’aide de l’�v�nement ExtractionProgressed de l’entr�e d’archive.
- Extrayez le fichier unique de l’archive � l’aide de la m�thode Extract, en sp�cifiant le chemin du fichier de sortie.
- Affichez la progression de la d�compression en pourcentage dans la console
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream fs = File.OpenRead(dataDir + "CompressSingleFile_out.zip"))
3 {
4 using (Archive archive = new Archive(fs))
5 {
6 int percentReady = 0;
7 archive.Entries[0].ExtractionProgressed += (s, e) =>
8 {
9 int percent = (int)((100 * e.ProceededBytes) / ((ArchiveEntry)s).UncompressedSize);
10 if (percent > percentReady)
11 {
12 Console.WriteLine(string.Format("{0}% decompressed", percent));
13 percentReady = percent;
14 }
15 };
16 archive.Entries[0].Extract(dataDir + "alice_extracted_out.txt");
17 }
18 }
19 ** D�compresser l’archive contenant plusieurs fichiers **
�tapes�: D�compressez plusieurs fichiers d’une archive � l’aide de C#< /fort>
- Ouvrez un flux de fichiers pour le fichier ZIP d’entr�e � l’aide de FileMode.Open.
- Cr�ez une instance de la classe Archive avec des options de chargement personnalis�es pour r�pertorier les entr�es et suivre la progression de la d�compression.
- Affichez les noms de toutes les entr�es d’archive � l’aide de l’�v�nement EntryListed.
- Surveillez la progression de la d�compression avec l’�v�nement EntryExtractionProgressed, affichant la progression dans la console.
- Extrayez plusieurs fichiers de l’archive, en utilisant la m�thode Extract et en lisant les donn�es dans les fichiers de sortie.
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream zipFile = File.Open(dataDir + "CompressMultipleFiles_out.zip", FileMode.Open))
3 {
4 StringBuilder sb = new StringBuilder("Entries are: ");
5 int percentReady = 0;
6 using (Archive archive = new Archive(zipFile,
7 new ArchiveLoadOptions()
8 {
9 EntryListed = (s, e) => { sb.AppendFormat("{0}, ", e.Entry.Name); },
10 EntryExtractionProgressed = (s, e) =>
11 {
12 int percent = (int)((100 * e.ProceededBytes) / ((ArchiveEntry)s).UncompressedSize);
13 if (percent > percentReady)
14 {
15 Console.WriteLine(string.Format("{0}% compressed", percent)); percentReady = percent;
16 }
17 }
18 }))
19 {
20 Console.WriteLine(sb.ToString(0, sb.Length - 2));
21 using (var extracted = File.Create(dataDir + "alice_extracted_out.txt"))
22 {
23 using (var decompressed = archive.Entries[0].Open())
24 {
25 byte[] buffer = new byte[8192];
26 int bytesRead;
27 while (0 < (bytesRead = decompressed.Read(buffer, 0, buffer.Length)))
28 {
29 extracted.Write(buffer, 0, bytesRead);
30 }
31 // Read from decompressed stream to extracting file.
32 }
33 }
34 percentReady = 0;
35 archive.Entries[1].Extract(dataDir + "asyoulik_extracted_out.txt");
36 }
37 }
38 Extraire les archives stock�es sans compression
�tapes�: Extraire les fichiers d’une archive et les enregistrer sur le disque en utilisant C#
- Ouvrez le fichier ZIP et cr�ez une instance de la classe Archive.
- Extrayez le premier fichier de l’archive en ouvrant le flux de l’entr�e et en �crivant son contenu dans un nouveau fichier.
- Utilisez un tampon pour lire les donn�es du flux d�compress� et enregistrez-les dans le fichier de sortie.
- R�p�tez le processus pour le deuxi�me fichier de l’archive, en �crivant son contenu dans un fichier de sortie distinct.
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream zipFile = File.Open(dataDir + "StoreMultipleFilesWithoutCompression_out.zip", FileMode.Open))
3 {
4 using (Archive archive = new Archive(zipFile))
5 {
6 using (var extracted = File.Create(dataDir + "alice_extracted_store_out.txt"))
7 {
8 using (var decompressed = archive.Entries[0].Open())
9 {
10 byte[] buffer = new byte[8192];
11 int bytesRead;
12 while (0 < (bytesRead = decompressed.Read(buffer, 0, buffer.Length)))
13 {
14 extracted.Write(buffer, 0, bytesRead);
15 }
16 // Read from decompressed stream to extracting file.
17 }
18 }
19
20 using (var extracted = File.Create(dataDir + "asyoulik_extracted_store_out.txt"))
21 {
22 using (var decompressed = archive.Entries[1].Open())
23 {
24 byte[] buffer = new byte[8192];
25 int bytesRead;
26 while (0 < (bytesRead = decompressed.Read(buffer, 0, buffer.Length)))
27 {
28 extracted.Write(buffer, 0, bytesRead);
29 }
30 // Read from decompressed stream to extracting file.
31 }
32 }
33 }
34 }
35