Заархівуйте або розархівуйте файли в .NET
Огляд
Ця стаття навчить вас, як програмно стискати Zip-файли за допомогою різноманітних методів із використанням C# або .NET API та приклад коду. Ви дізнаєтеся, як заархівувати або стиснути один або кілька файлів, а також як заархівувати файли одночасно. Ви також дізнаєтесь, як розпакувати або розархівувати файли.
Заархівуйте або стисніть файли в C# та розпакуйте або розпакуйте файли в C#
API Aspose.ZIP дозволяє стискати та розпаковувати файли, не турбуючись про базову файлову структуру. У цій статті показано роботу як із стисненням одного, так і кількох файлів.
Стиснення файлів
Стиснення одного файлу
Кроки: Стиснення одного файлу в C#
- Створіть файловий потік із потрібною назвою вихідного zip-файлу.
- Створіть потік файлу даних, який потрібно стиснути.
- Створіть екземпляр класу Archive і передайте йому екземпляр класу ArchiveEntrySettings.
- Додайте файл даних, створений на кроці 2 за допомогою методу Archive.CreateEntry.
- Заархівуйте файл даних за допомогою методу 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#
- Створіть потік файлів із бажаною назвою вихідного zip-файлу.
- Створіть файловий потік першого файлу даних для стиснення.
- Створіть потік другого файлу даних для стиснення.
- Створіть екземпляр класу Архів.
- Додайте файли даних, створені на кроці 2 і 3 за допомогою методу Archive.CreateEntry.
- Створіть екземпляр класу ArchiveSaveOptions.
- Заархівуйте файли даних за допомогою методу 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#
- Відкрийте потік файлів за допомогою FileMode.Create з потрібною назвою вихідного zip-файлу.
- Створіть об’єкт FileInfo вашого першого файлу даних, який потрібно стиснути.
- Створіть об’єкт FileInfo для другого файлу даних, який потрібно стиснути.
- Створіть екземпляр класу Архів.
- Додайте файли даних, створені на кроці 2 і 3 за допомогою методу Archive.CreateEntry.
- Створіть екземпляр класу ArchiveSaveOptions.
- Запакуйте файли даних за допомогою методу 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#
- Відкрийте потік файлів за допомогою FileMode.Create з потрібною назвою вихідного zip-файлу.
- Відкрийте потоки файлів за допомогою FileMode.Open і FileAccess.Read для першого та другого файлів даних, які потрібно стиснути.
- Створіть екземпляр класу Архів.
- Додайте файли даних, створені на кроці 2 за допомогою методу Archive.CreateEntry.
- Створіть екземпляр ParallelOptions і встановіть ParallelCompressInMemory = ParallelCompressionMode.Always.
- Створіть екземпляр ArchiveSaveOptions і встановіть його властивість ParallelOptions із зазначеним вище екземпляром.
- Заархівуйте файли даних за допомогою методу 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#
- Відкрийте потік файлів за допомогою FileMode.Create з потрібною назвою вихідного zip-файлу.
- Створіть екземпляр ArchiveEntrySettings і передайте йому екземпляр класу LzmaCompressionSettings.
- Створіть екземпляр класу Archive і передайте йому створений вище екземпляр ArchiveEntrySettings.
- Додайте файли даних для стиснення через шляхи файлів за допомогою методу Archive.CreateEntry.
- Заархівуйте файли даних за допомогою методу 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#
- Відкрийте потік файлів за допомогою FileMode.Create з потрібною назвою вихідного zip-файлу.
- Створіть екземпляр ArchiveEntrySettings і передайте йому екземпляр класу Bzip2CompressionSettings.
- Створіть екземпляр класу Archive і передайте йому екземпляр ArchiveEntrySettings, створений вище.
- Додайте файли даних для стиснення через шляхи файлів за допомогою методу Archive.CreateEntry.
- Заархівуйте файли даних за допомогою методу Архівувати.Зберегти.
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#
- Відкрийте потік файлів за допомогою FileMode.Create з потрібною назвою вихідного zip-файлу.
- Створіть екземпляр ArchiveEntrySettings і передайте йому екземпляр класу PPMdCompressionSettings.
- Створіть екземпляр класу Archive і передайте йому створений вище екземпляр ArchiveEntrySettings.
- Додайте файли даних для стиснення через шляхи файлів за допомогою методу Archive.CreateEntry.
- Заархівуйте файли даних за допомогою методу 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#
- Відкрийте потік файлів для вхідного ZIP-файлу за допомогою FileMode.OpenRead.
- Створіть екземпляр класу Archive, передавши файловий потік у конструктор.
- Відстежуйте хід декомпресії за допомогою події ExtractionProgressed запису архіву.
- Розпакуйте один файл з архіву за допомогою методу Extract, вказавши шлях до вихідного файлу.
- Відобразіть прогрес декомпресії у відсотках на консолі
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>
- Відкрийте файловий потік для вхідного ZIP-файлу за допомогою FileMode.Open.
- Створіть екземпляр класу Archive із користувальницькими параметрами завантаження для списку записів і відстеження прогресу декомпресії.
- Виведіть назви всіх записів архіву за допомогою події EntryListed.
- Відстежуйте прогрес декомпресії за допомогою події EntryExtractionProgressed, відображаючи прогрес у консолі.
- Розпакуйте кілька файлів з архіву, використовуючи метод 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#
- Відкрийте ZIP-файл і створіть екземпляр класу Archive.
- Витягніть перший файл з архіву, відкривши потік запису та записавши його вміст у новий файл.
- Використовуйте буфер для читання даних із розпакованого потоку та збереження їх у вихідний файл.
- Повторіть процес для другого файлу в архіві, записавши його вміст в окремий вихідний файл.
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