Архивы Objective Zip не открываются ArchiveUtility.app
Я использую ObjectiveZip
библиотека (которая является оберткой для MiniZip
) в моем приложении для iOS. Мое приложение отправляет архивы.zip на сервер, где они обрабатываются модератором вручную. Вот мой код для создания архива:
NSString * zipfile = [Result zipfilePathWithResult:self];
ZipFile * zf = [[ZipFile alloc] initWithFileName:zipfile mode:ZipFileModeCreate];
ZipWriteStream * zws = [zf writeFileInZipWithName:@"report.xml" compressionLevel:ZipCompressionLevelNone];
[zws writeData:[xml dataUsingEncoding:NSUTF8StringEncoding]];
[zws finishedWriting];
for (NSString * name in mediaFiles)
{
ZipWriteStream * zws = [zf writeFileInZipWithName:name compressionLevel:ZipCompressionLevelNone];
[zws writeData:[files objectForKey:name]];
[zws finishedWriting];
}
[zf close];
К сожалению, эти архивы неправильно обрабатываются по умолчанию в OS X ArchiveUtility: он всегда разархивирует мои файлы в zip.cpgz, независимо от фактического содержимого архива (обычно это файл.xml и несколько файлов.jpg).
Тем не менее, некоторые другие приложения в OS X, а также в Windows могут правильно открывать мои архивы, поэтому архив на самом деле не сломан.
Есть ли способ заставить ObjectiveZip работать с ArchiveUtility? Или, может быть, вы можете предложить любую другую библиотеку target-c для создания.zip-файлов, которая может это сделать. Заранее спасибо!
2 ответа
Отредактируйте zip.c, изменив параметры, передаваемые в каждый вызов, на zipOpenNewFileInZip3_64. Последний параметр, передаваемый каждому методу, равен 1. Измените его на 0, и он будет работать
Изменение последнего параметра на функцию zipOpenNewFileInZipX_64 - один из способов исправить это, но изменение этого параметра на 0 означает установку zip64, то есть возможности архивирования больших файлов, на false.
Мне удалось это исправить, установив второй параметр вызова zip64local_putValue в (uLong) 20(который в настоящее время составляет 45 в одном случае) внутри функции Write_LocalFileHeader независимо от значения zi-> ci.zip64.