如何在iPhone中使用ZipArchive压缩文件夹?

时间:2013-05-07 18:03:17

标签: iphone ios objective-c nsfilemanager ziparchive

我在文件目录中有一个需要压缩的文件夹。我能够压缩常规文件,但我无法压缩文件夹。

我提到了以下链接 How to zip folders in iPhone SDK? 但是这里文件夹中的文件是单独压缩的。我想压缩整个文件夹而不必处理浏览目录中的内容(文件/文件夹)并逐个压缩它们。

是否可以使用ZipArchive库执行此操作。如果可以,可以通过发布必要的代码解释一下吗?

谢谢。

4 个答案:

答案 0 :(得分:4)

您不能使用ZipArchive执行此操作,但请查看SSZipArchive它可以使用+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath; 方法。

答案 1 :(得分:2)

// Path to store Zip    

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* dPath = [paths objectAtIndex:0];

NSString* zipfile = [dPath stringByAppendingPathComponent:@"test.zip"] ;

// File Tobe Added in Zip

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"GetAllCardList" ofType:@"xml"];

NSString *fileName = @"MyFile"; // Your New ZipFile Name

ZipArchive* zip = [[ZipArchive alloc] init];
if([zip CreateZipFile2:zipfile])
{
    NSLog(@"Zip File Created");
    if([zip addFileToZip:filePath newname:[NSString stringWithFormat:@"%@.%@",fileName,[[filePath lastPathComponent] pathExtension]]])
    {
        NSLog(@"File Added to zip");
    }
}

答案 2 :(得分:2)

尝试SSZipArchive

$out = Users::join('images','images.user_id', '=', 'users.id')->selectRaw('users.*, count(images.user_id) as quantity')->groupBy('images.user_id')->get();

我用过

+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath keepParentDirectory:(BOOL)keepParentDirector;

创建zip文件夹。这是有效的。

答案 3 :(得分:0)

您需要在将所有文件添加到zip之前获取dir的内容,如示例中所示。在代码中逐个添加它们是相同的,所以只需获取一个列表然后运行列表。

NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];
NSFileManager *fm = [NSFileManager defaultManager];
NSArray *dirContents = [fm contentsOfDirectoryAtPath:bundleRoot error:nil];

如果您要查找特定文件,还可以使用谓词来过滤结果

NSPredicate *filter = [NSPredicate predicateWithFormat:@"self ENDSWITH '.png'"];
NSArray *pngs = [dirContents filteredArrayUsingPredicate:filter];