如何获得大文件的 zip_stat_t
How can I get zip_stat_t for large files
对于小文件,我可以获得 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 的文件将毫无问题地打开。我怎样才能获得 info.name
的大小,例如,因为信息结构似乎没有正确存储在 RAM 中?
如果我这样做 printf(strlen(info.name))
会导致分段错误。
您遇到的可能是 info 检索失败,导致 name
字段无效导致段错误。该文档没有提到您遇到的大小限制。
为避免此行为,建议检查 zip_stat_index()
的 return 值:
Upon successful completion 0 is returned. Otherwise, -1 is returned and the error information in archive is set to indicate the error.
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);
其中 return 是 archive
中 fname
的索引,如果未找到文件,则为 -1
。
或者,您可以只使用 zip_stat()
而不是 zip_stat_index()
,这样可以节省一步,因为它允许请求文件名作为参数:
int zip_stat(struct zip *archive, const char *fname, int flags, struct zip_stat *sb);
对于小文件,我可以获得 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 的文件将毫无问题地打开。我怎样才能获得 info.name
的大小,例如,因为信息结构似乎没有正确存储在 RAM 中?
如果我这样做 printf(strlen(info.name))
会导致分段错误。
您遇到的可能是 info 检索失败,导致 name
字段无效导致段错误。该文档没有提到您遇到的大小限制。
为避免此行为,建议检查 zip_stat_index()
的 return 值:
Upon successful completion 0 is returned. Otherwise, -1 is returned and the error information in archive is set to indicate the error.
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);
其中 return 是 archive
中 fname
的索引,如果未找到文件,则为 -1
。
或者,您可以只使用 zip_stat()
而不是 zip_stat_index()
,这样可以节省一步,因为它允许请求文件名作为参数:
int zip_stat(struct zip *archive, const char *fname, int flags, struct zip_stat *sb);