【问题标题】:How to zip folders in iPhone SDK?如何在 iPhone SDK 中压缩文件夹?
【发布时间】:2011-12-30 07:32:31
【问题描述】:

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

感谢任何帮助!

【问题讨论】:

标签: iphone objective-c ipad zip mfmailcomposeviewcontroller


【解决方案1】:

我已使用此代码为我的应用程序的文档目录创建了一个 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");

【讨论】:

  • 我无法从 iphone 设备中压缩文件,我不知道为什么会这样,相同的编码在 iphone 模拟器中运行良好,但在 iphone 设备中运行良好,请指导我
  • 模拟器和设备最大的区别在于设备中所有路径都区分大小写,模拟器中没有。也许这就是为什么它在一个中起作用而不在另一个中起作用的原因。
  • 谢谢..它对我有用..但是如果我在压缩之前用 RNEncryptor 加密我的 Xml 文件,这不起作用..任何解决方案.???
【解决方案2】:

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

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

看到这个:http://code.google.com/p/ziparchive/downloads/list

【讨论】:

    【解决方案3】:

    要创建 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];
    

    【讨论】:

    • 它只会将所有文档包含在一个 zip 格式文件中,但不会减小 zip 文件的大小。我们如何减小 zip 文件的大小?请指导。提前致谢。
    【解决方案4】:

    我过去曾成功使用过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];
    

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

               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

    【讨论】:

    • 感谢您的回复。我知道如何解压缩 Zip 文件的内容,并阅读了 google 上的文档。但我不知道如何创建新的 zip 文件并将项目添加到其中。
    • 谢谢...我们可以在同一个 zip 文件中添加两个文件吗?即我们可以调用 [zip addFileToZip:l_photo newname:@"photo.jpg"];对于多个文件?当我尝试它最终只有一个 zip 文件。
    • 而不是每次都给出一个文件。将所有文件放在一个文件夹中并提供目录路径,以便压缩包含图像的整个目录。
    • 我认为它不适用于文件夹。是吗?我在文件夹上尝试过但没有运气。真的需要帮助...
    【解决方案5】:

    简单模式:然后将ZipArchive 添加到您的项目中:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多