目标Zip问题入门

时间:2012-06-21 11:57:13

标签: objective-c ios zip

我正在尝试在IOS4应用程序中使用目标zip(v1.01e),因为我希望能够通过电子邮件发送受密码保护的zip文件。

我的应用程序中有目标zip源代码文件,但在本入门指南后遇到了一些问题。 http://code.google.com/p/objective-zip/wiki/GettingStarted

我使用以下命令

ZipFile *zipFile= [[ZipFile alloc] initWithFileName:@"yourFiles.zip" mode:ZipFileModeCreate];

但总是无法通过方法zipOpen2(第507行)中显示的代码返回null。这里:

if (ziinit.filestream == NULL)
        return NULL;

在堆栈跟踪之后,它通过以下方法:

//First
- (id) initWithFileName:(NSString *)fileName mode:(ZipFileMode)mode 

//Second
extern zipFile ZEXPORT zipOpen (pathname, append)

//Third
extern zipFile ZEXPORT zipOpen2 (pathname, append, globalcomment, pzlib_filefunc_def)

但是,我注意到第二种方法有这个代码。

extern zipFile ZEXPORT zipOpen (pathname, append)
    const char *pathname;
    int append;
{
    return zipOpen2(pathname,append,NULL,NULL);
}

当我从这个方法查询字符串路径名(在GDB中)的值时,我得到:

0x1b7f30似乎没有指向有效对象。

所以我的问题:

  1. 什么是const char *pathname,它做了什么,是否弄乱了路径名? AFAIK char是一个单个字符,不能表示文件名??
  2. 显示的代码来自目标zip项目的源代码而不是我自己的代码,所以我认为它的工作原理。这可能是我对它的误解。那么其他可能的原因可能导致这个问题呢?
  3. 有关更多信息initWithFileName:获取参数,文件名并通过创建指向文件名的指针将其传递给zipOpen(),如下所示。

    _fileName = [fileName retain];
    

2 个答案:

答案 0 :(得分:0)

traced the file opening back to fopen,这是个好消息,因为现在你可以find out what the error is using errno。在你告诉我们你得到的errno之前,我只能猜出问题是什么。但是,如果我猜测我说它失败了,因为你没有正确的权限来写入该文件。

答案 1 :(得分:0)

最终我设法解决了这个问题。问题是因为我没有将应用程序的文档目录位置附加到文件名的开头。

一旦我这样做,一切都很好。