如何解决如何获取大文件的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);
返回fname
中archive
的索引,如果找不到该文件,则返回-1
。
或者,您可以只使用zip_stat()
代替zip_stat_index()
,这样可以节省一个步骤,因为它允许以文件名作为参数:
int zip_stat(struct zip *archive,int flags,struct zip_stat *sb);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。