Все в той, или иной форме, сталкивались с архиваторами. Будь то скачивание файлов в архивах в интернете, или же создание бэкапов проекта, возможно установка приложения, которое хранит свои ресурсы в архиве.
Но пробовали ли вы посмотреть на обратную сторону медали архивов? Пробовали ли вы создавать программно архивы?
Это намного проще, чем кажется на первый взгляд. Для этого нам понадобятся две библиотеки. Основная библиотека 7-Zip, которую можно найти в папке с самим архиватором, а также дополнительная библиотека, которая будет служить .net-прослойкой между вашей программой и 7-zip библиотекой (которую нельзя добавить в references):
Оба файла необходимо положить в папку с вашей программой и добавить в references библиотеку SevenZipSharp.dll. Только эту библиотеку — вторая будет подключаться автоматически средствами первой, но об этом дальше.
Для начала — using. Прописываем библиотеку и не забываем про IO.
1 2 |
using SevenZip; using System.IO; |
А теперь непосредственно процесс архивации папки с файлами.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
string source_folder = @"C:\Users\User\Documents\Мои записи"; //путь к папке, которую нужно поместить в архив string archive_name = "qwerty.zip"; //имя архива string library_source = "7z.dll"; //Путь к файлу 7zip.dll if (File.Exists(library_source))//Если библиотека 7zip существует { SevenZipExtractor.SetLibraryPath(library_source); //Подгружаем библиотеку 7zip SevenZipCompressor compressor = new SevenZipCompressor(); //Объявляем переменную архиватора compressor.ArchiveFormat = OutArchiveFormat.Zip; //Выбираем формат архива. Вместо "Zip" можно поставить "SevenZip". compressor.CompressionLevel = CompressionLevel.Ultra; // ультра режим сжатия compressor.CompressionMode = CompressionMode.Create; //подтверждаются настройки compressor.TempFolderPath = System.IO.Path.GetTempPath(); //объявляется временная папка compressor.CompressDirectory(source_folder, archive_name,false); //сам процесс сжатия } |
Учтите, что библиотека 7zip.dll привязана к битности вашей операционной системе! А это значит, что в свойствах проекта нужно выставлять битность вашей операционной системы, а также использовать библиотеку 7zip.dll с той же битностью.