Нет, вы не сможете. Переменные вызовы аргументов решаются во время компиляции, а ваш NSArray имеет содержимое только во время выполнения.
Из файла справки DotNetZip , http://dotnetzip.codeplex.com/releases/
using (ZipFile zip = new ZipFile())
{
zip.UseUnicodeAsNecessary= true; // utf-8
zip.AddDirectory(@"MyDocuments\ProjectX");
zip.Comment = "This zip was created at " + System.DateTime.Now.ToString("G") ;
zip.Save(pathToSaveZipFile);
}
В BCL нет ничего, что могло бы сделать это за вас, но есть две отличные библиотеки для .NET, которые поддерживают эту функциональность.
Я использовал оба и могу сказать, что оба они очень полные и имеют хорошо спроектированные API, так что это в основном вопрос личных предпочтений.
Я не уверен, поддерживают ли они явно добавление папок , а не просто отдельные файлы в zip-файлы, но должно быть довольно легко создать что-то, что рекурсивно повторяется по каталогу и его подкаталогам, используя классы DirectoryInfo
и FileInfo
.
На MSDN есть статья. ], в котором есть образец приложения для архивирования и распаковки файлов и папок исключительно на C #. Некоторые из этих классов я успешно использую уже давно. Код выпущен под лицензией Microsoft Permissive License, если вам нужно знать такие вещи.
EDIT: Спасибо Cheeso за то, что он указал, что я немного отстал от времени. Пример MSDN, на который я указал, на самом деле использует DotNetZip и в наши дни действительно очень полнофункциональный. Основываясь на моем опыте работы с предыдущей версией, я с радостью рекомендую ее.
SharpZipLib также является довольно зрелой библиотекой, высоко оцененной людьми и доступной под лицензией GPL.
«Куда мне скопировать ICSharpCode.SharpZipLib.dll, чтобы увидеть это пространство имен в Visual Studio?»
Вам необходимо добавить файл dll в качестве ссылки в свой проект. Щелкните правой кнопкой мыши ссылки в обозревателе решений-> Добавить ссылку-> Обзор, а затем выберите dll.
Наконец, вам нужно добавить его как оператор using в любые файлы, в которых вы хотите его использовать.
Следующий код использует сторонний ZIP компонент от Rebex:
// add content of the local directory C:\Data\
// to the root directory in the ZIP archive
// (ZIP archive C:\archive.zip doesn't have to exist)
Rebex.IO.Compression.ZipArchive.Add(@"C:\archive.zip", @"C:\Data\*", "");
Или если вы хотите добавить больше папок без необходимости открывать и закрывать архив несколько раз:
using Rebex.IO.Compression;
...
// open the ZIP archive from an existing file
ZipArchive zip = new ZipArchive(@"C:\archive.zip", ArchiveOpenMode.OpenOrCreate);
// add first folder
zip.Add(@"c:\first\folder\*","\first\folder");
// add second folder
zip.Add(@"c:\second\folder\*","\second\folder");
// close the archive
zip.Close(ArchiveSaveAction.Auto);
Вы можете скачать ZIP компонент здесь.
Использование свободного, лицензированного под LGPL SharpZipLib является распространенной альтернативой.
Отказ от ответственности: я работаю в компании Rebex