我在我的iOS应用中使用ObjectiveZip
库(MiniZip
的包装器)。我的应用程序将.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一起使用?或者也许您可以建议任何其他objective-c库来创建可以执行此操作的.zip文件。提前谢谢!
答案 0 :(得分:0)
编辑zip.c更改传递给zipOpenNewFileInZip3_64的每次调用的参数。传递给每个方法的最后一个参数是1.将其更改为0并且它将起作用
答案 1 :(得分:0)
将最后一个参数更改为zipOpenNewFileInZipX_64函数是解决此问题的一种方法,但将此参数更改为0意味着将zip64(即大文件压缩功能)设置为false。
我能够通过在功能中设置 zip64local_putValue 的第二个参数(uLong)20 (目前在一个案例中为45)来解决这个问题。 Write_LocalFileHeader ,无论 zi-> ci.zip64 的值如何。