在我的代码中,为了在将.zip重命名为.docx之前创建DOCX文件的zip存档,我使用了第一种方法,即使用SSZipArchive工具包:
[SSZipArchive createZipFileAtPath:zipPath withContentsOfDirectory:dirPath keepParentDirectory:YES withPassword:nil];
大多数时候,最终文档需要使用Word进行修复(成功完成)。在极少数情况下,文档会正常打开,而在另一些情况下,则无法修复。我验证了不同资源中的所有XML代码,它们严格相同。而且所有文件权限都相同...
然后,在咨询了许多在线资源之后,我读到了用SSZipArchive压缩DOCX文件的好方法有点不同:
NSArray *paths = [[NSFileManager defaultManager] subpathsAtPath:dirPath];
NSMutableArray *fullPaths = [[NSMutableArray alloc] init];
for (int i = 0; i < paths.count; i++) {
if ([[[paths objectAtIndex:i] lastPathComponent] hasPrefix:@".DS"])
continue;
[fullPaths addObject:[dirPath stringByAppendingPathComponent:[paths objectAtIndex:i]]];
}
[SSZipArchive createZipFileAtPath:zipPath withFilesAtPaths:fullPaths];
但是在这种情况下,最终的文件层次结构一片混乱:文件未保存在适当的目录中!
要了解第一种方法的操作,我有一个有趣的经验:如果我只是使用StuffIt Expander解压缩DOCX文件,然后再次将其压缩(使用StuffIt或MacOS zip应用程序),而无需进行更改软件包中的任何内容,Word都无法打开生成的DOCX文档……它试图修复,但警告它是不可能的。压缩/解压缩我错过的DOCX文件有什么特别之处吗?