1

我在我的 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 一起工作?或者,也许您可​​以建议任何其他用于创建可以执行此操作的 .zip 文件的 Objective-c 库。提前致谢!

4

2 回答 2

0

编辑 zip.c,更改传递给每个 zipOpenNewFileInZip3_64 调用的参数。传递给每个方法的最后一个参数是 1。将其更改为 0,它将起作用

于 2015-06-04T21:09:08.227 回答
0

将最后一个参数更改为 zipOpenNewFileInZipX_64 函数是解决此问题的一种方法,但将此参数更改为 0 意味着将 zip64(即大文件压缩能力)设置为 false。

我可以通过在函数Write_LocalFileHeader中将 zip64local_putValue调用的第二个参数设置为(uLong)20(在一种情况下当前为 45 )来解决此问题,而不管zi->ci.zip64的值如何。

于 2016-07-25T04:56:38.693 回答