我正在学习C ++并决定通过制作一个从zip中提取文件的小程序来培训我,比如文本文件,图像甚至其他zip文件(但我不想直接提取它们,一次一件事)使用libzip库。 所以我制作了我的节目,但现在我遇到了问题。 它提取好的文本文件,但不提取图像或zip等文件。它检测到它们,给出了确切的名称和大小,但一旦提取,它们只是几个字节。 (但它们位于应有的位置)。
这是我的代码:http://pastie.org/6221955
因此,如果有人可以帮我提取不是zip文本的文件,那就太棒了!谢谢!
答案 0 :(得分:2)
您正在阅读和编写二进制数据作为文本字符串。问题是字符串使用NULL字符(0字节)的存在来指示字符串结尾。二进制数据可以(并且肯定会)在整个地方包含零,而不仅仅是在最后。
您需要使用ofstream
的{{1}}来写入磁盘;通过手动指定大小(以字节为单位),可以强制它读取多个字节,而不是在NULL字符的第一个实例处停止。
答案 1 :(得分:1)
问题在于<<运营商。您输出一个字符数组/字符串。 C中的字符串为空终止。因此,第一个二进制0将终止输出。