news 2026/4/20 8:42:20

c++如何读取并展示ZIP压缩包内的目录结构树_minizip集成【附源码】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
c++如何读取并展示ZIP压缩包内的目录结构树_minizip集成【附源码】

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 打开文件后立即检查返回值是否非 NULL,NULL 表示打开失败(常因路径不存在、权限不足或文件损坏)若 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文章。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 8:34:17

STM32的Flash读写,远比你想象的要“娇气”:我的数据丢失排查血泪史

STM32的Flash读写&#xff0c;远比你想象的要“娇气”&#xff1a;我的数据丢失排查血泪史 那是一个周五的深夜&#xff0c;生产线上的最后一批设备刚刚完成固件升级。正当我准备收拾东西回家时&#xff0c;测试工程师急匆匆跑过来&#xff1a;"所有设备的用户配置全丢了&…

作者头像 李华
网站建设 2026/4/20 8:32:17

终极Windows驱动清理指南:简单三步释放20GB磁盘空间

终极Windows驱动清理指南&#xff1a;简单三步释放20GB磁盘空间 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否发现C盘空间越来越少&#xff0c;系统运行越来越慢&#xff1f;这…

作者头像 李华
网站建设 2026/4/20 8:31:44

WindowTop 窗口管理工具 窗口管理器专治桌面杂乱

我用夸克网盘给你分享了「WindowTo...5.31」&#xff0c;点击链接或复制整段内容&#xff0c;打开「夸克APP」即可获取。亝并另七另并页第二普目忛/~dde53YD2c9~:/链接&#xff1a;https://pan.quark.cn/s/37c69e00e737WindowTop 拿捏电脑上的各种软件窗口那是一绝&#xff0c;…

作者头像 李华
网站建设 2026/4/20 8:22:16

新人自学python记录

这里写一些我遇到的一些有意思的代码题目。后续会持续更新。#打印水仙花数 sum 0 for i in range(100, 1000):bai i // 100shi (i // 10) % 10ge i % 10if bai ** 3 shi ** 3 ge ** 3 i:sum 1print(f水仙花数有{i}) print(f水仙花个数为{sum})这个数字金字塔的题目蛮有…

作者头像 李华