unzGoToFirstFile 返回-1主因是ZIP文件未以只读模式打开、路径含中文/空格未UTF-8转义、不支持ZIP64或UTF-8文件名或unzOpen失败路径错/权限不足/文件损坏。minizip 读取 ZIP 目录时为什么 unzGoToFirstFile 返回 -1常见错误是没检查 ZIP 文件是否以只读模式打开或路径含中文/空格但没做 UTF-8 转义。minizip尤其是老版本默认不支持 ZIP64 和 UTF-8 文件名遇到这类 ZIP 会直接跳过所有条目unzGoToFirstFile 返回 UNZ_END_OF_LIST_OF_FILE (-1)。确保用 unzOpen 打开文件后立即检查返回值是否非 NULLNULL 表示打开失败常因路径不存在、权限不足或文件损坏若 ZIP 由 macOS / 新版 Windows 打包大概率含 UTF-8 文件名需在编译 minizip 时定义 UNICODE 并用 unzOpen2 自定义 zlib_filefunc_def 支持宽字符路径不要依赖 unzGetGlobalComment 判断 ZIP 是否有效——它可能成功返回但内部条目为空C 递归打印 ZIP 内部目录树的关键逻辑在哪ZIP 本身没有“目录”概念只有带斜杠的文件路径如 assets/config.json 或 src/main.cpp。所谓“目录树”是你自己按 / 拆分路径、去重、排序后模拟出来的层级结构。遍历每个文件项用 unzGetCurrentFileInfo 获取 szFileName注意该字段结尾不一定有 /即使它是逻辑上的目录ZIP 中目录项只是个末尾带 / 的空文件提取所有唯一前缀对每个 szFileName逐级切掉最后一段如 a/b/c.txt → a/b/ → a/存入 std::set:string/:string 避免重复打印时按长度升序排列前缀再用缩进控制层级每多一级 / 就多两个空格但要过滤掉根路径 /ZIP 中一般不存在用 unzLocateFile 查找特定文件为什么总失败unzLocateFile 对大小写敏感且不自动补 /。比如 ZIP 里实际存的是 README.md你传 readme.md 或 README.md/ 都会失败。 arXiv Xplorer ArXiv 语义搜索引擎帮您快速轻松的查找保存和下载arXiv文章。