#c# #zip #sharpziplib
#c# #zip #sharpziplib
Вопрос:
Это мой код для обновления существующего ZIP-файла, вызывающие пользователи передают ZIP-файл и имеют блок finally для закрытия zip-файла.
private static void AddFiles(ZipFile zipFile, string path, string filesEntryLocation, string pattern = @"*") {
zipFile.BeginUpdate();
string[] files = Directory.GetFiles(path, pattern);
foreach (string filename in files) {
zipFile.Add(filename, (filesEntryLocation filename.Split(new[] { '\' }).Last()).Replace('\','/'));
}
zipFile.CommitUpdate();
}
Как вы можете видеть, я добавляю записи в zip и устанавливаю имя записи в определенной части иерархии папок zip.
Мы делаем это, чтобы внедрить продукт в веб-пакет «framework» — платформа поддерживает слабо связанные продукты.
Результирующий ZIP-файл в порядке, я могу перемещаться по нему в Windows, я могу его извлечь… НО появляется MSDeploy, и где бы новая запись ни приводила к добавлению в иерархию папок zip, я получаю ошибки от msdeploy, в которых говорится, что не удалось открыть zip-файл, НО только в этом конкретном месте, т. Е. zip не поврежден полностью, только там, где msdeploy начинает навигацию по «новой» папке.
Теперь, если я извлеку измененный zip, а затем повторно заархивирую его (используя 7zip) и попрошу msdeploy выполнить для этого — без проблем, это работает.
ИТАК, это SharpZipLib, или я делаю что-то неправильно при добавлении в иерархию папок zip?
Ответ №1:
Вы также должны добавить записи папки в архив (если они не существовали ранее).