unzGoToFirstFile 返回 -1 主因是路径错误、文件不存在、权限不足或 ZIP 格式不兼容(如 ZIP64 未启用支持);unzOpen 成功不保证结构合法,需逐函数校验返回值。

minizip 读取 ZIP 文件列表时为何 unzGoToFirstFile 返回 -1
常见错误是 ZIP 文件路径不对、文件不存在、权限不足,或 ZIP 格式不兼容(比如含 ZIP64 扩展但未启用支持)。unzOpen 成功不代表 ZIP 结构合法——它只检查魔数和基础结构,后续遍历才暴露真实问题。
实操建议:
立即学习“C++免费学习笔记(深入)”;
-
unzOpen后立刻检查返回值是否为NULL,不是就直接失败,别跳过 - 确保 ZIP 文件是普通 ZIP(非分卷、非加密、不含 ZIP64 头),否则需在编译 minizip 时定义
UNZIP_SUPPORT_ZIP64 - Windows 下注意路径用正斜杠或双反斜杠:
"data/archive.zip"或"data\archive.zip",单反斜杠会触发转义 - Linux/macOS 上确认文件可读:
ls -l data/archive.zip,避免静默失败
如何用 unzGoToFirstFile + unzGoToNextFile 安全遍历文件名
这两个函数不是“自动迭代器”,每次调用都依赖前一次状态。跳过 unzGoToFirstFile 直接调 unzGoToNextFile 必然失败;中间任何一步出错(如文件名超长、编码异常)都可能导致指针错乱。
实操建议:
立即学习“C++免费学习笔记(深入)”;
- 必须先调
unzGoToFirstFile,成功后再进循环,不能假设它总成功 - 每次
unzGetCurrentFileInfo前,用unz_file_info结构体清零,避免旧数据干扰szFileName长度判断 - 文件名缓冲区至少分配
MAXFILENAME + 1字节(MAXFILENAME通常为 256),并手动置末尾为