简体   繁体   中英

Objective Zip not working with iOS5.1 devices, not properly unzipping

I am using objective zip in a project to unzip and store files to documents directory. Its working fine with iOS 5.0 and below versions. Working fine with 5.1 Simulator. But when working on 5.1 device, only a few files are unzipped. Nothing else is shown in the folder. below is the code used for unzipping and storage.

for (NSString *file in fileArray) {

        // Get the file info/name, prepare the target name/path
        ZipReadStream *readStream = [unzipFile readCurrentFileInZip];
        FileInZipInfo *fileInfo = [unzipFile getCurrentFileInZipInfo];
        fileNameString = [NSString stringWithFormat:@"%@",[fileInfo name]];

        NSLog(@"fileNameString %@",fileNameString);

        NSString *DirName = [targetFolder stringByAppendingPathComponent:moduleName];
        NSLog(@"targetFolder %@",targetFolder);
        NSLog(@"DirName %@",DirName);

        NSLog(@"fileNameString %@",fileNameString);

        if (![fileManager fileExistsAtPath:DirName isDirectory:nil]) {
            [fileManager createDirectoryAtPath:DirName attributes:nil];
            NSLog(@"created directory %@", DirName);
        }

        NSLog(@"fileNameString %@",fileNameString);

        NSString *unzipFilePath = [DirName stringByAppendingPathComponent:fileNameString];

        NSLog(@"unzipFilePath-- %@",unzipFilePath);

        // Create a file handle for writing the unzipped file contents
        if (![fileManager fileExistsAtPath:unzipFilePath]) {

            NSString *dir = unzipFilePath;//[unzipFilePath stringByDeletingLastPathComponent];
            if ([[fileNameString pathExtension] isEqualToString:@""]) {
                [fileManager createDirectoryAtPath:dir attributes:nil];
                NSLog(@"created directory %@", dir);
            }
            [fileManager createFileAtPath:unzipFilePath contents:nil attributes:nil];
        }

        fileHandle = [NSFileHandle fileHandleForWritingAtPath:unzipFilePath];
        // Read-then-write buffered loop to conserve memory
        do {
            // Reset buffer length
            [unzipBuffer setLength:BUFFER_SIZE];
            // Expand next chunk of bytes
            int bytesRead = [readStream readDataWithBuffer:unzipBuffer];
            if (bytesRead > 0) {
                // Write what we have read
                [unzipBuffer setLength:bytesRead];
                [fileHandle writeData:unzipBuffer];
            } else
                break;
        } while (YES);

        [readStream finishedReading];

        // NOTE: Disable iCloud backup for unzipped file if applicable here!
        /*...*/


        //[fileHandle writeData:unZipped];

        [fileHandle closeFile];

        [unzipFile goToNextFileInZip];
    }

    [unzipFile close]; // Be sure to also manage your memory manually if not using ARC!

    // Also delete the zip file here to conserve disk space if applicable!
    [recievedData release];

    NSLog(@"Delete -- %@", documentsDirectory);
    [fileManager removeItemAtPath:documentsDirectory error:nil];

    return YES;

}

Please help ! ! !

thanks in Advance

Use have the following method for unzipping a zip file using Objective-zip. This works fine under iOS 4.3 through 6.0 (and probably earlier and later too). The 'filename' parameter is the full path to the zip file.

- (BOOL)unzipPath:(NSString *)filename toDirectory:(NSString *)directory error:(NSError **)error {
    if (error) {
        *error = nil;
    }

    ZipFile *unzipFile = [[ZipFile alloc] initWithFileName:filename mode:ZipFileModeUnzip];
    int cnt = [unzipFile numFilesInZip];
    [unzipFile goToFirstFileInZip];
    for (int i = 0; i < cnt; i++) {
        FileInZipInfo *info = [unzipFile getCurrentFileInZipInfo];
        NSString *name = info.name;
        if (![name hasSuffix:@"/"]) {
            NSString *filePath = [directory stringByAppendingPathComponent:name];
            NSString *basePath = [filePath stringByDeletingLastPathComponent];
            if (![[NSFileManager defaultManager] createDirectoryAtPath:basePath withIntermediateDirectories:YES attributes:nil error:error]) {
                [unzipFile close];

                return NO;
            }

            [[NSData data] writeToFile:filePath options:0 error:nil];

            NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:filePath];
            ZipReadStream *read = [unzipFile readCurrentFileInZip];
            NSUInteger count;
            NSMutableData *data = [NSMutableData dataWithLength:2048];
            while ((count = [read readDataWithBuffer:data])) {
                data.length = count;
                [handle writeData:data];
                data.length = 2048;
            }
            [read finishedReading];
            [handle closeFile];
        }

        [unzipFile goToNextFileInZip];
    }

    [unzipFile close];

    return YES;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM