我正在学习 C++,并决定用libzip 库。所以我做了我的程序,但现在我有一个问题。它可以很好地提取文本文件,但不能提取图像或 zip 等文件。它会检测到它们,给我确切的名称和大小,但是一旦提取出来,它们就只有几个字节。(但它们位于应有的位置)。
这是我的代码: http: //pastie.org/6221955
因此,如果有人可以帮助我从 zip 中提取不是文本的文件,那就太好了!谢谢!
我正在学习 C++,并决定用libzip 库。所以我做了我的程序,但现在我有一个问题。它可以很好地提取文本文件,但不能提取图像或 zip 等文件。它会检测到它们,给我确切的名称和大小,但是一旦提取出来,它们就只有几个字节。(但它们位于应有的位置)。
这是我的代码: http: //pastie.org/6221955
因此,如果有人可以帮助我从 zip 中提取不是文本的文件,那就太好了!谢谢!
您正在以文本字符串的形式读取和写入二进制数据。问题是字符串使用 NULL 字符(0 字节)的存在来指示字符串的结尾。二进制数据可以(并且肯定会)在所有地方都包含零,而不仅仅是在最后。
您需要使用ofstream
's.write (buffer, <size in bytes>)
写入磁盘;通过手动指定字节大小,您可以强制它读取那么多字节,而不是在 NULL 字符的第一个实例处停止。
问题在于 << 运算符。你输出一个字符数组/字符串。C 中的字符串以空值结尾。因此,第一个二进制 0 将终止您的输出。