Створення ZIP в C#

Архіви ZIP використовуються для стиснення та зберігання одного або кількох файлів або папок в одному контейнері. Архів ZIP інкапсулює файли та папки, а також зберігає їх метадані. Найпоширенішим використанням архівування є зменшення розміру файлів для зберігання або передачі та застосування шифрування для безпеки. Крім інструментів стиснення файлів, функції автоматичного стиснення/видобування також використовуються в різних настільних і веб-додатках для завантаження, завантаження, спільного використання або шифрування файлів. Ця стаття також стосується подібних сценаріїв і представляє кілька простих способів стиснення файлів або папок і програмного створення ZIP-архівів за допомогою C#.

У цій статті ви дізнаєтесь, як виконувати такі операції архівування ZIP:

Бібліотека C# ZIP

Aspose.ZIP for .NET — це потужний і простий у використанні API для архівування та розпакування файлів і папок у програмах .NET. Він також надає методи шифрування AES для шифрування файлів у ZIP на C#. Ви можете встановити API з NuGet або завантажити його двійкові файли з розділу Завантаження.

Створення ZIP-архіву на C#

Нижче наведено кроки, щоб стиснути файл, додавши його до архіву ZIP:

  • Створіть об’єкт FileStream для вихідного архіву ZIP.
  • Відкрийте вихідний файл в об’єкт FileStream.
  • Створіть об’єкт класу Архів.
  • Додайте файл в архів за допомогою методу Archive.CreateEntry(string, FileStream).
  • Створіть ZIP-архів за допомогою методу Archive.Save(FileStream).

У наведеному нижче прикладі коду показано, як додати файл до ZIP-архіву за допомогою C#.

// Створіть FileStream для вихідного архіву ZIP
using (FileStream zipFile = File.Open("compressed_file.zip", FileMode.Create))
{
	// Файл для додавання в архів
	using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	{
		using (var archive = new Archive(new ArchiveEntrySettings()))
		{
			// Додати файл в архів
			archive.CreateEntry("alice29.txt", source1);
			// ZIP-файл
			archive.Save(zipFile);
		}
	}
}

Додавання кількох файлів до архіву ZIP у C#

Якщо ви хочете додати декілька файлів до ZIP-архіву, ви можете зробити це одним із наведених нижче способів.

C# ZIP Кілька файлів за допомогою FileStream

У цьому методі клас FileStream використовується для додавання файлів до ZIP-архіву за допомогою методу Archive.CreateEntry(String, FileStream). У наведеному нижче прикладі коду показано, як додати кілька файлів у ZIP на C#.

// Створіть FileStream для вихідного архіву ZIP
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
	// Файл для додавання в архів
	using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	{
		// Файл для додавання в архів
		using (FileStream source2 = File.Open("asyoulike.txt", FileMode.Open, FileAccess.Read))
		{
			using (var archive = new Archive())
			{
				// Додайте файли в архів
				archive.CreateEntry("alice29.txt", source1);
				archive.CreateEntry("asyoulik3.txt", source2);
				// ZIP файли
				archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "two files are compressed in this archive" });
			}
		}
	}
}

C# ZIP Кілька файлів за допомогою FileInfo

Ви також можете використовувати клас FileInfo для додавання кількох файлів до ZIP-архіву. У цьому методі файли будуть завантажені за допомогою класу FileInfo та додані до ZIP-архіву за допомогою методу Archive.CreateEntry(String, FileInfo). У наведеному нижче прикладі коду показано, як архівувати кілька файлів за допомогою класу FileInfo у C#.

// Створіть FileStream для вихідного архіву ZIP
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
	// Файли для додавання в архів
	FileInfo fi1 = new FileInfo("alice29.txt");
	FileInfo fi2 = new FileInfo("fields.c");

	using (var archive = new Archive())
	{
		// Додайте файли в архів
		archive.CreateEntry("alice29.txt", fi1);
		archive.CreateEntry("fields.c", fi2);
		// Створити ZIP-архів
		archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
	}
}

Файли ZIP за допомогою шляху

Замість використання класів FileInfo або FileStream для записів ZIP ви можете надати шлях до файлу безпосередньо до методу Archive.CreateEntry(String name, String path, Boolean openImmediately, ArchiveEntrySettings newEntrySettings). Наведений нижче зразок коду показує, як ZIP-файли, використовуючи їх шлях.

// Створіть FileStream для вихідного архіву ZIP
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
    // Створити архів
    using (var archive = new Archive())
    {
        // Додати файл до архіву ZIP
        archive.CreateEntry("data.bin", "file.dat");
        archive.Save(zipFile);
    }
}

Додавання папок до ZIP-архіву в C#

Ви можете заархівувати папку за допомогою бібліотеки C# ZIP, що може бути ще однією альтернативою додавання кількох файлів до архіву ZIP. Просто помістіть вихідні файли в папку та додайте цю папку до архіву ZIP. Нижче наведено кроки для ZIP-архіву папки в C#:

  • Створіть об’єкт класу FileStream для вихідного ZIP-архіву.
  • Створіть екземпляр класу Архів.
  • Використовуйте клас DirectoryInfo, щоб вказати папку для архівування.
  • Використовуйте метод Archive.CreateEntries(DirectoryInfo), щоб додати папку в ZIP.
  • Створіть ZIP-архів за допомогою методу Archive.Save(FileStream).

У наведеному нижче прикладі коду показано, як додати папку до ZIP у C#.

// Створіть FileStream для вихідного архіву ZIP
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive())
	{
		// Папка для архівування
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// Створити ZIP-архів
		archive.Save(zipFile);
	}
}

Створіть захищений паролем ZIP за допомогою ZipCrypto на C#

Ви можете захистити ZIP-архіви за допомогою паролів і застосувати шифрування ZipCrypto. Для цього в конструкторі Archive використовується клас ArchiveEntrySettings, який приймає тип шифрування як другий параметр.

У наведеному нижче прикладі коду показано, як створити ZIP-архів, захищений паролем, за допомогою ZipCrypto на C#.

// Створіть FileStream для вихідного архіву ZIP
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$"))))
	{
		// Додати папку до архіву
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// Створити ZIP-архів
		archive.Save(zipFile);
	}
}

C# Створіть захищений паролем ZIP із шифруванням AES

Aspose.ZIP for .NET також дозволяє застосовувати шифрування AES для захисту ZIP-архівів. Ви можете використовувати такі методи шифрування AES:

  • AES128
  • AES192
  • AES256

Щоб застосувати шифрування AES, API пропонує клас AesEcryptionSettings. У наведеному нижче прикладі коду показано, як створити захищений паролем ZIP із шифруванням AES у C#.

// Створіть FileStream для вихідного архіву ZIP
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES128))))
	{
		// Додати папку до архіву
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// Створити ZIP-архів
		archive.Save(zipFile);
	}
}

Встановіть режим паралельного стиснення

Ви також можете налаштувати API для паралельного стиснення у випадку кількох записів. Для цього ви можете вказати режим паралельного стиснення за допомогою класу ParallelOptions. Aspose.ZIP for .NET забезпечує наступні режими паралельного стиснення.

  • Ніколи - Не стискайте паралельно.
  • Завжди - Стискайте паралельно (остерігайтеся браку пам’яті).
  • Автоматично – вирішуйте, використовувати чи ні паралельне стиснення записів. Цей параметр може стискати деякі записи лише паралельно.

У наведеному нижче прикладі коду показано, як встановити режим паралельного стиснення під час архівування кількох файлів за допомогою бібліотеки C# ZIP Aspose.

// Щоб отримати повні приклади та файли даних, перейдіть на сторінку https://github.com/aspose-zip/Aspose.ZIP-for-.NET
using (FileStream zipFile = File.Open(dataDir + "UsingParallelismToCompressFiles_out.zip", FileMode.Create))
{
    using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
    {
        using (FileStream source2 = File.Open(dataDir + "asyoulik.txt", FileMode.Open, FileAccess.Read))
        {
            using (var archive = new Archive())
            {
                archive.CreateEntry("alice29.txt", source1);
                archive.CreateEntry("asyoulik.txt", source2);
                //Дайте визначення критерію паралельності
                var parallelOptions = new ParallelOptions
                {
                    ParallelCompressInMemory = ParallelCompressionMode.Always
                };
                archive.Save(zipFile,
                    new ArchiveSaveOptions()
                    {
                        ParallelOptions = parallelOptions,
                        Encoding = Encoding.ASCII,
                        ArchiveComment = "There are two poems from Canterbury corpus"
                    });
            }
        }
    }
}

Дізнайтеся більше про бібліотеку C# .NET ZIP

Дізнайтеся більше про наш C# ZIP API за допомогою таких ресурсів:

Зробіть ZIP-архів онлайн

Ви також можете спробувати нашу безкоштовну онлайн-програму, яка базується на Aspose.ZIP for .NET, щоб стискати файли в архіви ZIP.

Висновок

У цій статті ви дізналися, як програмно створювати ZIP-архіви на C#. Зразки коду продемонстрували, як додавати файли та папки в ZIP-архіви. Крім того, ми також розглянули, як створити захищені паролем архіви ZIP за допомогою методів шифрування ZipCrypto та AES за допомогою бібліотеки ZIP C# Aspose. Крім того, наприкінці також обговорюється паралельне стиснення кількох записів. Якщо у вас виникнуть будь-які запитання чи запити, ви можете поставити нам це через наш форум.

Дивись також

Розархівуйте або витягніть файли за допомогою C#Розпакуйте файли в архівах ZIP за допомогою C#Створення архівів 7z (7-Zip) у C# .NET
Відкрийте або розпакуйте файл 7z (7zip) у C# .NETСтворюйте та розпакуйте архіви GZip за допомогою C#Перетворення файлів RAR на ZIP-архів на C#
Перетворення архівів ZIP на TAR на C#Створіть плоский ZIP-архів у C#Створити виконуваний архів, що саморозпаковується на C#
Створення файлів TAR.GZ і TAR.XZ на C#Видалити файли в архіві ZIP у C#Видобути вкладені ZIP-архіви на C#
Об’єднання кількох архівів ZIP або TAR у C#