ios 修改SSZipArchive 增加解压前获取zip文件中文件列表能力

SSZipArchive 作为开源解压压缩库,虽然非常好,用但是没有做解压前,获取zip文件中文件列表的函数。本文通过修改开源库中的SSZipArchived.h 和 SSZipArchived.m, 在这个文件里面加一个函数实现获取zip文件中文件列表的函数。

SSZipArchived.h中增加函数:

+ (NSArray<NSString *> *)geteZipFileList:(NSString *)zipPath;

SSZipArchived.m文件中增加函数:

+ (NSArray<NSString *> *)geteZipFileList:(NSString *)zipPath {
    NSMutableArray *results = [NSMutableArray new];


    unzFile uf = unzOpen(zipPath.UTF8String);

    //如果为空则文件不存在
    if (NULL == uf) {
        printf("unzOpen failed...\n");
        return results;
    }

    int ret = unzGoToFirstFile(uf);

    if (UNZ_OK != ret) {
        printf("GetFileInZip unzLocateFile failed... error:%d\n", ret);
        return results;
    }

    unz_file_info file_info;
    char filename_inzip[256];
    //获取当前项的文件信息
    ret = unzGetCurrentFileInfo(uf, &file_info, filename_inzip, sizeof(filename_inzip), NULL, 0, NULL, 0);

    if (UNZ_OK != ret) {
        printf("unzGetCurrentFileInfo failed... error:%d\n", ret);
        return results;
    }

    NSString *fileName = [NSString stringWithFormat:@"%s", filename_inzip];
    if (![fileName hasPrefix:@"__MACOSX/"]) {
        [results addObject:fileName];
    }
    

    ret = unzGoToNextFile(uf);

    while (ret != MZ_END_OF_LIST) {
        if (UNZ_OK != ret) {
            printf("GetFileInZip unzLocateFile failed... error:%d\n", ret);
            break;
        }

        unz_file_info second_file_info;
        char second_filename_inzip[256];
        //获取当前项的文件信息
        ret = unzGetCurrentFileInfo(uf, &second_file_info, second_filename_inzip, sizeof(second_filename_inzip), NULL, 0, NULL, 0);

        if (UNZ_OK != ret) {
            printf("unzGetCurrentFileInfo failed... error:%d\n", ret);
            break;
        }

        //得到文件名(这样可以避免中文乱码)
        NSString *second_fileName = [NSString stringWithUTF8String:second_filename_inzip];
       
        if (![second_fileName hasPrefix:@"__MACOSX/"]) {
            [results addObject:second_fileName];
        }

        ret = unzGoToNextFile(uf);
    }


    return results;
}

你可能感兴趣的:(ios,objective-c,xcode)