读取Zip文件会给iphone中的objectice-zip库带来错误

时间:2011-07-07 10:18:25

标签: iphone

unzOpen()函数在使用objective-zip库打开zip文件时出现“无法打开”错误

我尝试了以下操作: - 其中路径是具有读/写多余的zip文件的有效路径

  • (id)initWithFileName:(NSString *)fileName mode:(ZipFileMode)mode { if(self = [super init]) {     _fileName = [fileName retain];     _mode = mode;

    switch (mode) {
        case ZipFileModeUnzip:
    
            _unzFile = unzOpen( (const char*)[_fileName UTF8String] );
            if (_unzFile == NULL) {
                NSString *reason= [NSString stringWithFormat:@"Can't open '%@'", _fileName];
                @throw [[[ZipException alloc] initWithReason:reason] autorelease];
            }
            break;
    
        case ZipFileModeCreate:
            _zipFile= zipOpen([_fileName cStringUsingEncoding:NSUTF8StringEncoding], APPEND_STATUS_CREATE);
            if (_zipFile == NULL) {
                NSString *reason= [NSString stringWithFormat:@"Can't open '%@'", _fileName];
                @throw [[[ZipException alloc] initWithReason:reason] autorelease];
            }
            break;
    
        case ZipFileModeAppend:
            _zipFile= zipOpen([_fileName cStringUsingEncoding:NSUTF8StringEncoding], APPEND_STATUS_ADDINZIP);
            if (_zipFile == NULL) {
                NSString *reason= [NSString stringWithFormat:@"Can't open '%@'", _fileName];
                @throw [[[ZipException alloc] initWithReason:reason] autorelease];
            }
            break;
    
        default: {
            NSString *reason= [NSString stringWithFormat:@"Unknown mode %d", _mode];
            @throw [[[ZipException alloc] initWithReason:reason] autorelease];
        }
    }
    

    }

    回归自我; }

它给出错误无法打开文件 任何可以提供帮助请提前致谢

其中mode是ZipFileModeUnzip

2 个答案:

答案 0 :(得分:1)

我在我的一个应用程序中遇到了同样的问题,经过长时间的研究,花了几天时间才知道问题出在服务器端,而zip文件在服务器端没有正确存档。所以我建议你先检查一下zip文件是否合适。尝试首先从Mac解压缩本地zip文件,并确保zip文件格式已正确存档。

希望得到这个帮助。

答案 1 :(得分:1)

我知道这个话题超过3年,但也许我的回答对其他人有用。

我有同样的问题。 问题出在iOS 7.1上的64位架构上

首先,检查你有1.1版MiniZip。 不要使用adler32.c,compress.c ..等文件复制Zlib目录。 使用Xcode libs.1.2.5.dylib提供的库。

ZipFile *unzipFile= [[ZipFile alloc] initWithFileName:zipFilePath mode:ZipFileModeUnzip];




[unzipFile locateFileInZip:fileName];
FileInZipInfo *fileInfo = [unzipFile getCurrentFileInZipInfo];

ZipReadStream *read;

if(password){

    read = [unzipFile readCurrentFileInZipWithPassword:password];
} else {

    read = [unzipFile readCurrentFileInZip];
}

NSMutableData *data= [[NSMutableData alloc] initWithLength:[fileInfo length]];

[read readDataWithBuffer:data];
[read finishedReading];
[unzipFile close];