如何获取大文件的zip_stat_t

问题描述

对于小文件,我可以获得zip_stat_t信息,但是如果文件大40Mb,我就不能。

zip_stat_t info;
zip_stat_index(zipfile,544,ZIP_FL_ENC_GUESS,&info);
printf("%s\n",info.name);

例如打印info.name对大型文件(例如40mb文件)进行段错误处理。 2Mb文件将打开,没有问题。例如,由于似乎信息结构未正确存储在RAM中,如何获得info.name的大小?

如果我执行printf(strlen(info.name)),则会导致分割错误。

解决方法

您遇到的情况可能是 info 检索失败的原因,因此name字段无效,导致了段错误。该文档没有提及您遇到的尺寸限制。

为避免这种情况,建议检查zip_stat_index()的返回值:

成功完成后返回0。否则,将返回-1并设置 archive 中的错误信息以指示错误。

if (zip_stat_index(zipfile,544,ZIP_FL_ENC_GUESS,&info) == 0 )
{
    printf("%s\n",info.name);
}

为什么索引检索失败?归档中不存在提供给函数的index(在您的情况下为544)。为了防止出现这种“找不到索引” 问题,您可以使用zip_name_locate ()函数获取给定文件的索引:

int zip_name_locate(struct zip *archive,const char *fname,int flags);

返回fnamearchive的索引,如果找不到该文件,则返回-1

或者,您可以只使用zip_stat()代替zip_stat_index(),这样可以节省一个步骤,因为它允许以文件名作为参数:

int zip_stat(struct zip *archive,int flags,struct zip_stat *sb);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...