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

最後のパラメーターを zipOpenNewFileInZipX_64 関数に変更することは、これを修正する 1 つの方法ですが、このパラメーターを 0 に変更することは、zip64、つまり大きなファイルの圧縮機能を false に設定することを意味します。

zi->ci.zip64の値に関係なく、関数Write_LocalFileHeader内でzip64local_putValue呼び出しの 2 番目のパラメーターを(uLong)20 (あるケースでは現在 45 )に設定することで、これを修正できました。

于 2016-07-25T04:56:38.693 に答える