如何在 Objective C 中压缩、解压缩文件(arm64 支持)

Posted

技术标签:

【中文标题】如何在 Objective C 中压缩、解压缩文件(arm64 支持)【英文标题】:How to zip, unzip files in Objective C (arm64 support) 【发布时间】:2014-01-07 17:02:29 【问题描述】:

我正在寻找一种在支持 arm64 的 ios 上压缩和解压缩文件的方法。我在看 Github,但没有一个支持 arm64。是否已经有用于压缩和解压缩文件的现成库。 (如果您知道如何集成 7zip、bzip2、gzip、rar 的方法,我会很高兴的)

我现在正在使用 SSZipArchive,但它不起作用:

#import "SSZipArchive.h"

NSArray *nameWithoutExtention = [[[[self files] objectAtIndex:indexPath.row] lastPathComponent] componentsSeparatedByString:@"."];
NSString *fileName = [nameWithoutExtention objectAtIndex:0];
NSString *destPath = [NSString stringWithFormat:@"%@/%@", self.directory, fileName];
[fileManager createDirectoryAtPath:destPath withIntermediateDirectories:YES attributes:nil error:nil];
[SSZipArchive unzipFileAtPath:[[self files] objectAtIndex:indexPath.row] toDestination:destPath];

【问题讨论】:

这有什么关系?如果它们是开源的,您可以自己编译为 64 位。 但是当我添加 github.com/dive/ALZipArchive 时,我收到很多错误消息,我无法修复,所以我认为必须已经有一个固定的项目/库 我使用 GTMNSData+zlib。它是为我所要求的一切而编译的。 有哪些错误? 你为什么不使用 zlib 并且你可以制作静态库,或者只是将所有 .c 文件也添加到你的项目中 【参考方案1】:

您可以查看official SSZipArchive Objective-C example(适用于纯arm64的iOS11)。

压缩包:

NSString *sampleDataPath = [[NSBundle mainBundle].bundleURL
                            URLByAppendingPathComponent:@"Sample Data"
                            isDirectory:YES].path;
NSString *zipPath = [self tempZipPath];
BOOL success = [SSZipArchive createZipFileAtPath:zipPath
                         withContentsOfDirectory:sampleDataPath];

解压:

NSString *unzipPath = [self tempUnzipPath];
BOOL success = [SSZipArchive unzipFileAtPath:zipPath
                               toDestination:unzipPath];

tempZipPathtempUnzipPath 被声明为:

- (NSString *)tempZipPath 
  NSString *path = [NSString stringWithFormat:@"%@/\%@.zip",
                    NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0],
                    [NSUUID UUID].UUIDString];
  return path;


- (NSString *)tempUnzipPath 
  NSString *path = [NSString stringWithFormat:@"%@/\%@",
                    NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0],
                    [NSUUID UUID].UUIDString];
  NSURL *url = [NSURL fileURLWithPath:path];
  NSError *error = nil;
  [[NSFileManager defaultManager] createDirectoryAtURL:url
                           withIntermediateDirectories:YES
                                            attributes:nil
                                                 error:&error];
  if (error) 
    return nil;
  
  return url.path;

【讨论】:

以上是关于如何在 Objective C 中压缩、解压缩文件(arm64 支持)的主要内容,如果未能解决你的问题,请参考以下文章

Linux中压缩与解压缩:

如何在Android中压缩下载的图像并在需要时解压缩?

如何使用Windows的内置功能从脚本中压缩或解压缩?

如何在android中压缩和解压缩png图像

如何在Mac中压缩文件

如何在 Java 中压缩 JSON 并在 Javascript 中解压缩 [关闭]