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#

  1. Cr�ez un file stream avec le nom souhait� de votre fichier zip de sortie.
  2. Cr�ez un flux de fichiers du fichier de donn�es � compresser.
  3. Cr�ez une instance de la classe Archive et transmettez-la � l’instance de la classe ArchiveEntrySettings.
  4. Ajoutez le fichier de donn�es cr�� � l’�tape 2 � l’aide de la m�thode Archive.CreateEntry.
  5. 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#

  1. Cr�ez un flux de fichiers avec le nom souhait� de votre fichier zip de sortie.
  2. Cr�ez un flux de fichiers du premier fichier de donn�es � compresser.
  3. Cr�ez un flux de fichiers du deuxi�me fichier de donn�es � compresser.
  4. Cr�ez une instance de la classe Archive.
  5. Ajoutez les fichiers de donn�es cr��s aux �tapes 2 et 3 � l’aide de la m�thode Archive.CreateEntry.
  6. Cr�ez une instance de la classe ArchiveSaveOptions.
  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    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#

  1. Ouvrez un flux de fichiers avec FileMode.Create avec le nom souhait� de votre fichier zip de sortie.
  2. Cr�ez l’objet FileInfo de votre premier fichier de donn�es � compresser.
  3. Cr�ez l’objet FileInfo de votre deuxi�me fichier de donn�es � compresser.
  4. Cr�ez une instance de la classe Archive.
  5. Ajoutez les fichiers de donn�es cr��s aux �tapes 2 et 3 � l’aide de la m�thode Archive.CreateEntry.
  6. Cr�ez une instance de la classe ArchiveSaveOptions.
  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    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#

  1. Ouvrez un flux de fichiers avec FileMode.Create avec le nom souhait� de votre fichier zip de sortie.
  2. 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.
  3. Cr�ez une instance de la classe Archive.
  4. Ajoutez les fichiers de donn�es cr��s � l’�tape 2 � l’aide de la m�thode Archive.CreateEntry.
  5. Cr�ez une instance de ParallelOptions et d�finissez ParallelCompressInMemory = ParallelCompressionMode.Always.
  6. Cr�ez une instance de ArchiveSaveOptions et d�finissez sa propri�t� ParallelOptions avec l’instance ci-dessus.
  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    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#

  1. Ouvrez un flux de fichiers avec FileMode.Create avec le nom souhait� de votre fichier zip de sortie.
  2. Cr�ez une instance de ArchiveEntrySettings et transmettez-lui l’instance de la classe LzmaCompressionSettings.
  3. Cr�ez une instance de la classe Archive et transmettez-lui l’instance de ArchiveEntrySettings cr��e ci-dessus.
  4. Ajoutez les fichiers de donn�es � compresser via les chemins de fichiers � l’aide de la m�thode Archive.CreateEntry.
  5. 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#

  1. Ouvrez un flux de fichiers avec FileMode.Create avec le nom souhait� de votre fichier zip de sortie.
  2. Cr�ez une instance de ArchiveEntrySettings et transmettez-lui l’instance de la classe Bzip2CompressionSettings.
  3. Cr�ez une instance de la classe Archive et transmettez-lui l’instance de ArchiveEntrySettings cr��e ci-dessus.
  4. Ajoutez les fichiers de donn�es � compresser via les chemins de fichiers � l’aide de la m�thode Archive.CreateEntry.
  5. 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#

  1. Ouvrez un flux de fichiers avec FileMode.Create avec le nom souhait� de votre fichier zip de sortie.
  2. Cr�ez une instance de ArchiveEntrySettings et transmettez-lui l’instance de la classe PPMdCompressionSettings.
  3. Cr�ez une instance de la classe Archive et transmettez-lui l’instance de ArchiveEntrySettings cr��e ci-dessus.
  4. Ajoutez les fichiers de donn�es � compresser via les chemins de fichiers � l’aide de la m�thode Archive.CreateEntry.
  5. 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#

  1. Ouvrez un flux de fichiers pour le fichier ZIP d’entr�e � l’aide de FileMode.OpenRead.
  2. Cr�ez une instance de la classe Archive en transmettant le flux de fichiers au constructeur.
  3. Surveillez la progression de la d�compression � l’aide de l’�v�nement ExtractionProgressed de l’entr�e d’archive.
  4. Extrayez le fichier unique de l’archive � l’aide de la m�thode Extract, en sp�cifiant le chemin du fichier de sortie.
  5. 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>

  1. Ouvrez un flux de fichiers pour le fichier ZIP d’entr�e � l’aide de FileMode.Open.
  2. 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.
  3. Affichez les noms de toutes les entr�es d’archive � l’aide de l’�v�nement EntryListed.
  4. Surveillez la progression de la d�compression avec l’�v�nement EntryExtractionProgressed, affichant la progression dans la console.
  5. 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#

  1. Ouvrez le fichier ZIP et cr�ez une instance de la classe Archive.
  2. Extrayez le premier fichier de l’archive en ouvrant le flux de l’entr�e et en �crivant son contenu dans un nouveau fichier.
  3. Utilisez un tampon pour lire les donn�es du flux d�compress� et enregistrez-les dans le fichier de sortie.
  4. 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        
Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.