Страницы

Поиск по вопросам

вторник, 27 ноября 2018 г.

Как упаковать несколько файлов в zip,которые лежат в разных папках?

Есть List в котором содержатся пути(Path) всех файлов, которые я хочу упаковать.
Проблема в том что эти файлы в разных папках. Можно как то скопировать их в новую папку, а потом их упаковать, но количество этих файлов очень велико, так неудобно.
Есть ли какой нибудь способ?
Код создания архива:
using (ZipFile zip = new ZipFile()) { zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression; zip.AddDirectory(@"C:\project\"); zip.AddFile(@"c:\Temp\Import.csv"); zip.Save(@"C:\Temp\PackedProject.zip"); }


Ответ

Приведенный вами код, к сожалению, не работоспособен. Класс ZipFile есть в библиотеке классов, но он статический и не рекомендован Microsoft для использования в приложениях для Windows Store, там же рекомендовано использовать класс ZipArchive. MSDN
Если полные имена (путь+имя) файлов уже содержатся в List fileNames, то не важно в каких папках они находятся, главное чтобы были права на чтение этих файлов. Если все условия выполнены, то дальше все довольно просто:
using System; using System.IO; using System.IO.Compression;
using (FileStream zipToOpen = new FileStream(@"newArchive.zip", FileMode.OpenOrCreate)) { using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update)) { foreach (string fileName in fileNames) { FileInfo fi = new FileInfo(fileName) ZipArchiveEntry fileEntry = archive.CreateEntryFromFile(fi.FullName,fi.Name,CompressionLevel.Optimal); } } }
как-то так. Более подробно читать в MSDN
Можно улучшить результат если собирать файлы не в string, а сразу в FileInfo и List соответственно. Преимущество использования 'FileInfo' для хранения информации о файлах заключается в том, что есть ряд методов получения уже готовых коллекций этих объектов, например как дочерние узлы DirectoryInfo, и "из коробки" получаем легкие манипуляции с именами файлов. как то выделение пути из полного имени, получение только имени без пути плюс дополнительная функциональность, которая может внезапно понадобиться при работе с файлом. например уточнить права доступа.

Комментариев нет:

Отправить комментарий