Заархивируйте или разархивируйте файлы в .NET.

Обзор

В этой статье вы узнаете, как программно сжимать Zip-файлы с помощью различных методов с использованием C# или .NET API и примера кода. Вы узнаете, как архивировать или сжимать один или несколько файлов, а также как архивировать файлы одновременно. Вы также узнаете, как распаковывать или разархивировать файлы.

Архивируйте или сжимайте файлы в C# и распаковывайте или разархивируйте файлы в C#.

API Aspose.ZIP позволяет сжимать и распаковывать файлы, не беспокоясь о базовой файловой структуре. В этой статье показана работа со сжатием одного и нескольких файлов.

Сжатие файлов

Сжатие одного файла

Шаги: Сжатие одного файла в C#

  1. Создайте поток файлов с нужным именем выходного zip-файла.
  2. Создайте файловый поток файла данных, который необходимо сжать.
  3. Создайте экземпляр класса Archive и передайте ему экземпляр класса ArchiveEntrySettings.
  4. Добавьте файл данных, созданный на шаге 2, используя метод Archive.CreateEntry.
  5. Заархивируйте файл данных с помощью метода Archive.Save и передайте ему поток файлов, созданный на шаге 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    }

Сжатие нескольких файлов

Шаги: Сжатие нескольких файлов в C#

  1. Создайте поток файлов с нужным именем выходного zip-файла.
  2. Создайте файловый поток для первого файла данных, который необходимо сжать.
  3. Создайте файловый поток второго файла данных, который необходимо сжать.
  4. Создайте экземпляр класса Архив.
  5. Добавьте файлы данных, созданные на шагах 2 и 3, используя метод Archive.CreateEntry.
  6. Создайте экземпляр класса ArchiveSaveOptions.
  7. Заархивируйте файлы данных с помощью метода Archive.Save и передайте ему поток файлов, созданный на шаге 1, и экземпляр ArchiveSaveOptions, созданный на предыдущем шаге.
 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    

Сжатие файлов по информации о файле

Шаги: Сжатие файлов по информации о файле на C#

  1. Откройте поток файлов с помощью FileMode.Create с нужным именем выходного zip-файла.
  2. Создайте объект FileInfo вашего первого файла данных, который нужно сжать.
  3. Создайте объект FileInfo второго файла данных, который необходимо сжать.
  4. Создайте экземпляр класса Архив.
  5. Добавьте файлы данных, созданные на шагах 2 и 3, используя метод Archive.CreateEntry.
  6. Создайте экземпляр класса ArchiveSaveOptions.
  7. Заархивируйте файлы данных с помощью метода Archive.Save и передайте ему поток файлов, созданный на шаге 1, и экземпляр ArchiveSaveOptions, созданный на предыдущем шаге.
 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    

Хранение файлов в архивах без сжатия

Шаги: Хранение Файлы в архивы без сжатия с использованием C#1. Откройте поток файлов с помощью FileMode.Create с нужным именем выходного zip-файла. 2. Создайте объекты FileInfo для файлов данных, которые будут храниться в архиве. 3. Создайте экземпляр класса ArchiveEntrySettings и передайте ему экземпляр класса StoreCompressionSettings. 4. Создайте экземпляр класса Archive и передайте ему экземпляр класса ArchiveEntrySettings, созданный на предыдущем шаге. 5. Добавьте объекты FileInfo, созданные на шаге 2, с помощью метода Archive.CreateEntry. 6. Создайте экземпляр ArchiveSaveOptions и установите Кодировка = Encoding.ASCII. 7. Заархивируйте файлы данных с помощью метода Archive.Save и передайте ему поток файлов, созданный на шаге 1, и экземпляр ArchiveSaveOptions, созданный на предыдущем шаге.

 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    

Использование параллелизма для сжатия файлов

Шаги: Использование параллелизма для сжатия файлов с использованием C#

  1. Откройте поток файлов с помощью FileMode.Create с нужным именем выходного zip-файла.
  2. Откройте потоки файлов с помощью FileMode.Open и FileAccess.Read для сжатия первого и второго файлов данных.
  3. Создайте экземпляр класса Архив.
  4. Добавьте файлы данных, созданные на шаге 2, используя метод Archive.CreateEntry.
  5. Создайте экземпляр ParallelOptions и установите ParallelCompressInMemory = ParallelCompressionMode.Always.
  6. Создайте экземпляр ArchiveSaveOptions и установите для его свойства ParallelOptions указанный выше экземпляр.
  7. Заархивируйте файлы данных с помощью метода Archive.Save и передайте ему поток файлов, созданный на шаге 1, и экземпляр ArchiveSaveOptions, созданный на предыдущем шаге.
 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    

Сжатие LZMA в ZIP-архиве

Алгоритм цепочки Лемпеля-Зива-Маркова (LZMA) – это алгоритм, используемый для сжатия данных без потерь. LZMA использует алгоритм словарного сжатия, сжатый поток представляет собой поток битов. Сжатие LZMA в ZIP-архиве позволяет ZIP-контейнерам содержать записи, сжатые LZMA. В следующем примере кода показана реализация сжатия LZMA с использованием API Aspose.ZIP.

Шаги: LZMA-сжатие в ZIP-архиве с использованием C#

  1. Откройте поток файлов с помощью FileMode.Create с нужным именем выходного zip-файла.
  2. Создайте экземпляр ArchiveEntrySettings и передайте ему экземпляр класса LzmaCompressionSettings.
  3. Создайте экземпляр класса Archive и передайте ему экземпляр ArchiveEntrySettings, созданный выше.
  4. Добавьте файлы данных для сжатия по путям к файлам, используя метод Archive.CreateEntry.
  5. Заархивируйте файлы данных методом 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    }

Сжатие BZip2 в ZIP-архиве

Настройки сжатия BZip2 позволяют ZIP-контейнеру содержать записи, сжатые BZip2. В следующем примере кода показана реализация сжатия BZip2 с использованием API Aspose.ZIP.

Шаги: Сжатие BZip2 в ZIP-архиве с использованием C#

  1. Откройте поток файлов с помощью FileMode.Create с нужным именем выходного zip-файла.
  2. Создайте экземпляр ArchiveEntrySettings и передайте ему экземпляр класса Bzip2CompressionSettings.
  3. Создайте экземпляр класса Archive и передайте ему экземпляр ArchiveEntrySettings, созданный выше.
  4. Добавьте файлы данных для сжатия по путям к файлам, используя метод Archive.CreateEntry.
  5. Заархивируйте файлы данных методом 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        

Сжатие PPMd в ZIP-архиве

Настройки сжатия PPMd позволяют ZIP-контейнеру содержать сжатые записи PPMd. В следующем примере кода продемонстрирована реализация сжатия PPMd с использованием API Aspose.ZIP.

Шаги: Сжатие PPMd в ZIP-архиве с использованием C#

  1. Откройте поток файлов с помощью FileMode.Create с нужным именем выходного zip-файла.
  2. Создайте экземпляр ArchiveEntrySettings и передайте ему экземпляр класса PPMdCompressionSettings.
  3. Создайте экземпляр класса Archive и передайте ему экземпляр ArchiveEntrySettings, созданный выше.
  4. Добавьте файлы данных для сжатия по путям к файлам, используя метод Archive.CreateEntry.
  5. Заархивируйте файлы данных методом 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        

Распаковка архивов

Распаковка архива, состоящего из одного файла

Шаги: Распакуйте один файл из архива с помощью C# </а>

  1. Откройте поток файлов для входного ZIP-файла с помощью FileMode.OpenRead.
  2. Создайте экземпляр класса Archive, передав файловый поток конструктору.
  3. Отслеживайте ход распаковки с помощью события ExtractionProgressed записи архива.
  4. Извлеките один файл из архива с помощью метода Extract, указав путь к выходному файлу.
  5. Отображение прогресса декомпрессии в процентах в консоли.

Распаковать архив, содержащий несколько файлов

Шаги: Распакуйте несколько файлов из архива с помощью C#< /strong></а>

  1. Откройте поток файлов для входного ZIP-файла с помощью FileMode.Open.
  2. Создайте экземпляр класса Archive с настраиваемыми параметрами загрузки для вывода списка записей и отслеживания хода распаковки.
  3. Отобразите имена всех записей архива с помощью события EntryListed.
  4. Отслеживайте ход распаковки с помощью события EntryExtractionProgressed, отображая прогресс в консоли.
  5. Извлеките несколько файлов из архива, используя метод Extract и считывая данные в выходные файлы.

Извлечение сохраненного архива без сжатия

Шаги: Извлеките файлы из архива и сохраните на диск с использованием C#

  1. Откройте ZIP-файл и создайте экземпляр класса Archive.
  2. Извлеките первый файл из архива, открыв поток записи и записав его содержимое в новый файл.
  3. Используйте буфер для чтения данных из распакованного потока и сохранения их в выходной файл.
  4. Повторите процедуру для второго файла в архиве, записав его содержимое в отдельный выходной файл.
 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.