如何在iPhone SDK中压缩文件夹?

时间:2011-11-16 10:32:03

标签: iphone objective-c ipad zip mfmailcomposeviewcontroller

在我的应用程序中,我正在截取图像视图的屏幕截图,然后我将这些屏幕截图保存在应用程序的文档文件夹中。现在我想通过电子邮件发送所有这些图像与它们所在的文件夹结构相同。压缩所有文件夹包含图像,然后将zip文件附加到邮件将解决问题,但我如何压缩这些文件夹,然后将它们附加到邮件?

感谢任何帮助!

5 个答案:

答案 0 :(得分:18)

我已经使用此代码创建了我的应用程序的文档目录的zip文件,并且它正常工作

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDirectory = [paths objectAtIndex:0];
BOOL isDir=NO;
NSArray *subpaths;
NSString *exportPath = docDirectory;
NSFileManager *fileManager = [NSFileManager defaultManager];    
if ([fileManager fileExistsAtPath:exportPath isDirectory:&isDir] && isDir){
    subpaths = [fileManager subpathsAtPath:exportPath];
}

NSString *archivePath = [docDirectory stringByAppendingString:@"/test.zip"];

ZipArchive *archiver = [[ZipArchive alloc] init];
[archiver CreateZipFile2:archivePath];
for(NSString *path in subpaths)
{
    NSString *longPath = [exportPath stringByAppendingPathComponent:path];
    if([fileManager fileExistsAtPath:longPath isDirectory:&isDir] && !isDir)
    {
        [archiver addFileToZip:longPath newname:path];      
    }
}

if([archiver CloseZipFile2])
    NSLog(@"Success");
else
    NSLog(@"Fail");

答案 1 :(得分:2)

ZipArchive是一个压缩或解压缩zip文件的Objective-C类,它基于开源代码“MiniZip”。

它可用于iPhone应用程序开发,也可用于Mac OSX上的cocoa。

请参阅:http://code.google.com/p/ziparchive/downloads/list

答案 2 :(得分:2)

要创建zip文件,您可以使用ZipArchive 下载源代码并将其添加到项目中,同时添加libz.x.dylib(查看wiki)。

然后在您的标题文件中添加:#import "ZipArchive/ZipArchive.h"

要创建zip文件很简单,只需使用以下代码:

BOOL ret = [zip CreateZipFile2:l_zipfile];
// OR
BOOL ret = [zip CreateZipFile2:l_zipfile Password:@"your password"]; //
//if the Password is empty, will get the same effect as [zip CreateZipFile2:l_zipfile];
ret = [zip addFileToZip:l_photo newname:@"photo.jpg"];
      if( ![zip CloseZipFile2] )
      {
      // error handler here
      }
      [zip release];

答案 3 :(得分:1)

我过去曾使用ZipArchive取得成功。

它非常轻巧,使用简单,支持密码保护,ZIP内的多个文件,以及压缩和放大解压缩。

基本用法是:

NSString *filepath = [[NSBundle mainBundle] pathForResource:@"ZipFileName" ofType:@"zip"];
ZipArchive *zipArchive = [[ZipArchive alloc] init];
[zipArchive UnzipOpenFile:filepath Password:@"xxxxxx"];
[zipArchive UnzipFileTo:{pathToDirectory} overWrite:YES];
[zipArchive UnzipCloseFile];
[zipArchive release];

这是用于解压缩文件夹/文件。压缩文件夹同样容易。压缩文件(或fodler)

           BOOL ret = [zip CreateZipFile2:l_zipfile];
            // OR
            BOOL ret = [zip CreateZipFile2:l_zipfile Password:@"your password"]; //
            //if the Password is empty, will get the same effect as [zip CreateZipFile2:l_zipfile];

            ret = [zip addFileToZip:l_photo newname:@"photo.jpg"];
            if( ![zip CloseZipFile2] )
            {
                    // error handler here
            }
            [zip release];

我也听说过ObjectiveC-Zip

答案 4 :(得分:1)

简易模式:将ZipArchive添加到您的项目中:

NSString* zip = ...;
NSString* dir = ...;
[SSZipArchive createZipFileAtPath: zip withContentsOfDirectory: dir];