使用libzip从.zip获取文件(文本除外)

Get files (other than text) from .zip with libzip

本文关键字:文本 文件 libzip zip 获取 使用      更新时间:2023-10-16

我正在学习C++,并决定通过制作一个小程序来训练我,该程序可以使用libzip库从zip中提取文件,如文本文件、图像,甚至其他zip文件(但我不想直接提取它们,一次提取一件事)。所以我制作了我的程序,但现在我遇到了一个问题。它可以很好地提取文本文件,但不能提取图像或zip等文件。它检测它们,给我确切的名称和大小,但一旦提取出来,它们只有几个字节。(但它们位于它们应该位于的位置)。

这是我的代码:http://pastie.org/6221955

所以,如果有人能帮我从zip中提取不是文本的文件,那就太好了!非常感谢。

您正在以文本字符串的形式读取和写入二进制数据。问题是字符串使用NULL字符(0字节)来表示字符串的末尾。二进制数据可以(而且肯定会)到处都包含零,而不仅仅是在末尾。

您需要使用ofstream.write (buffer, <size in bytes>)来写入磁盘;通过手动指定以字节为单位的大小,可以强制它读取那么多字节,而不是在NULL字符的第一个实例处停止。

问题在于<lt;操作人员您输出一个字符数组/字符串。C中的字符串以null结尾。因此,第一个二进制0将终止您的输出。