#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 Если полные имена (путь+имя) файлов уже содержатся в ListfileNames, то не важно в каких папках они находятся, главное чтобы были права на чтение этих файлов. Если все условия выполнены, то дальше все довольно просто: 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, и "из коробки" получаем легкие манипуляции с именами файлов. как то выделение пути из полного имени, получение только имени без пути плюс дополнительная функциональность, которая может внезапно понадобиться при работе с файлом. например уточнить права доступа.
Комментариев нет:
Отправить комментарий