我的程序使用minizip(zlib-版本1.2.3)来压缩xml文件。当xml文件大小大于4GB时(实际上 int 32 - 4294967295的最大值)然后我发现当我尝试提取压缩文件时它给了我一个意外的错误0x80004005(能够通过7zip提取)。 我相信拉链没有正常工作。 如果我检查 xml 文件的大小,则大小 =(文件中的总字节数)-(int32 的最大值)。请看截图。 压缩文件的大小,即减少 4 GB 后剩余的大小
现在介绍文件的压缩方式,我正在使用以下带有这些参数的 minizip 功能。如果你们知道大文件的 minizip 压缩出了什么问题,请给我建议
int returnVal = zipOpenNewFileInZip4(reinterpret_cast(m_pzipFile), 文件名, NULL, NULL, 0, NULL, 0, NULL, Z_DEFLATED, Z_DEFAULT_COMPRESSION, 0, -MAX_WBITS、DEF_MEM_LEVEL、Z_DEFAULT_STRATEGY、 NULL, 0, m_uGeneralflag);//Z_DEFLATED-0,Z_DEFAULT_COMPRESSION=-1,MAX_WBITS=15,DEF_MEM_LEVEL=8,Z_DEFAULT_STRATEGY=0
zipWriteInFileInZip(reinterpret_cast(m_pzipFile)// pBuffer,actualBufferSize)===>m-pzipFile void*,正在写入压缩文件的char*类型的pBuffer,actualBufferSize --int值,即pBuffer的大小 zipCloseFileInZip(reinterpret_cast(m_pzipFile))
可能的修复或问题意识,如何解决
您使用的是 13 年前的 zlib 版本。从 http://zlib.net/ 或 https://github.com/madler/zlib 获取当前版本(后者是您自己发布相同问题的地方!)并编译它。它有一个
zipOpenNewFileInZip4_64()
功能。