我尝试使用Lucian Wischik的Zip Utils将二进制文件解压缩到zip存档中的membuf:
http://www.wischik.com/lu/programmer/zip_utils.html
http://www.codeproject.com/KB/files/zip_utils.aspx
FindZipItem(hz, filename.c_str(), true, &j, &ze);
char *content = new char[ze.unc_size];
UnzipItem(hz, j, content, ze.unc_size);
delete[] content;
但它没有正确解压缩文件。它停在文件的第一个0x00
处。
例如,当我在ZIP存档中解压缩MP3文件时,它只会解压缩前4个字节:0x49443303
(ID3 \ 0),因为第5到第8个字节是0x00
。
我还尝试捕获ZR_RESULT
,并始终返回ZR_OK
(这意味着已完成且没有错误)。
我觉得这个家伙也有同样的问题,但是没有人回答他的问题:
http://www.codeproject.com/KB/files/zip_utils.aspx?msg=2876222#xx2876222xx
任何形式的帮助将不胜感激:)
答案 0 :(得分:1)
可能解压缩就好了。请记住,许多面向字符串的 display 函数将停止在第一个'\0'
输出字符。即使您的调试器也会显示char*
,就好像它是监视窗口中的字符串一样。它只能猜出字符数组中的数据是什么......你如何测试解压缩的字节数?
你可能想尝试这样的事情:
FindZipItem(hz, filename.c_str(), true, &j, &ze);
char *content = new char[ze.unc_size];
memset(content, 0, ze.unc_size); // added so we can say that if it has a bunch of 0 bytes, then the unzip stopped early.
UnzipItem(hz, j, content, ze.unc_size);
// will print in hex all of the bytes in the array
for(int i = 0; i < ze.unc_size; ++i) {
printf("%02x ", content[i]);
}
delete[] content;
答案 1 :(得分:0)
我有两个答案。
首先,如果您尝试解压缩MP3文件。你错了。 MP3文件是压缩的,但不使用zip格式。
其次,你怎么知道该库只解压缩前4个字节。您是否尝试printf()
内容?或strcpy()
它?在这种情况下,行为是正常的,因为这些函数用于处理文本,文本被定义为all-until-the-first-char-0。