Заархівуйте або розархівуйте файли в .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 = 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. Заархівуйте файли даних за допомогою методу Архівувати.Зберегти.
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. Відобразіть прогрес декомпресії у відсотках на консолі
 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        

Розпакуйте архів із кількома файлами

Кроки: Розпакуйте кілька файлів з архіву за допомогою C#< /strong>

  1. Відкрийте файловий потік для вхідного ZIP-файлу за допомогою FileMode.Open.
  2. Створіть екземпляр класу Archive із користувальницькими параметрами завантаження для списку записів і відстеження прогресу декомпресії.
  3. Виведіть назви всіх записів архіву за допомогою події EntryListed.
  4. Відстежуйте прогрес декомпресії за допомогою події EntryExtractionProgressed, відображаючи прогрес у консолі.
  5. Розпакуйте кілька файлів з архіву, використовуючи метод Extract і зчитуючи дані у вихідні файли.
 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        

Розпакуйте збережений архів без стиснення

Кроки: видобути файли з архіву та зберегти на диску за допомогою 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.