我正在尝试在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似乎没有指向有效对象。
所以我的问题:
const char *pathname
,它做了什么,是否弄乱了路径名? AFAIK char是一个单个字符,不能表示文件名?? 有关更多信息initWithFileName:
获取参数,文件名并通过创建指向文件名的指针将其传递给zipOpen()
,如下所示。
_fileName = [fileName retain];
答案 0 :(得分:0)
我traced the file opening back to fopen,这是个好消息,因为现在你可以find out what the error is using errno
。在你告诉我们你得到的errno
之前,我只能猜出问题是什么。但是,如果我猜测我说它失败了,因为你没有正确的权限来写入该文件。
答案 1 :(得分:0)
最终我设法解决了这个问题。问题是因为我没有将应用程序的文档目录位置附加到文件名的开头。
一旦我这样做,一切都很好。