Я знаю, что вы спрашивали о Java, но просто для архивных целей я решил добавить заметку о .NET.
DotNetZip – это библиотека .NET для zip-файлов, позволяющая переименовывать записи. Как говорится в ответе Тома Хотина, каталоги не являются первоклассными сущностями в метаданных zip-файла, и, как следствие, никакие zip-библиотеки, о которых я знаю, не предоставляют глагол «переименовать каталог». Но некоторые библиотеки позволяют вам переименовывать все записи, имена которых указывают на определенный каталог, что дает вам желаемый результат.
В DotNetZip это будет выглядеть так:
var regex = new Regex("/OldDirName/.*$");
int renameCount= 0;
using (ZipFile zip = ZipFile.Read(ExistingZipFile))
{
foreach (ZipEntry e in zip)
{
if (regex.IsMatch(e.FileName))
{
// rename here
e.FileName = e.FileName.Replace("/OldDirName/", "/NewDirName/");
renameCount++;
}
}
if (renameCount > 0)
{
zip.Comment = String.Format("This archive has been modified. {0} entries have been renamed.", renameCount);
// any changes to the entries are made permanent by Save()
zip.Save(); // could also save to a new zip file here
}
}
Вы также можете добавлять или удалять записи внутри предложения using.
Если вы сохраняете в тот же файл, то DotNetZip перезаписывает только измененные метаданные — заголовки записей и записи центрального каталога для переименованных записей, что экономит время при работе с большими архивами. Если вы сохраните в новый файл или поток, все данные zip будут записаны.
person
Cheeso
schedule
11.05.2009