Страницы

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

вторник, 24 декабря 2019 г.

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

#c_sharp #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");
}

    


Ответы

Ответ 1



Приведенный вами код, к сожалению, не работоспособен. Класс 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, и "из коробки" получаем легкие манипуляции с именами файлов. как то выделение пути из полного имени, получение только имени без пути плюс дополнительная функциональность, которая может внезапно понадобиться при работе с файлом. например уточнить права доступа.

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

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