0

我正在尝试在 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 项目的源代码,而不是我自己的,所以我假设它可以工作。这可能是我对它的误解。那么还有哪些其他可能的原因会导致这个问题呢?

有关更多信息initWithFileName:,请获取参数文件名并通过zipOpen()创建指向文件名的指针将其传递给,如下所示。

_fileName = [fileName retain];
4

2 回答 2

0

我已经将打开的文件追溯到 fopen,这是个好消息,因为现在您可以找出错误使用的是什么errno。在你告诉我们errno你得到了什么之前,我只能猜测问题出在哪里。但是,如果我猜的话,我会说它失败了,因为您没有正确的权限来写入该文件。

于 2012-06-21T14:06:16.257 回答
0

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

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

于 2012-10-26T09:54:35.320 回答