只读二进制zip文件的一部分

时间:2017-02-01 17:55:08

标签: c++ zip

我正在寻找一种方法来读取二进制zip文件的一部分(起始位置和要读取的字节数)。目前我正在Windows上对此进行调查,但最佳的是它将与平台无关。对于普通的二进制文件(解压缩),可以通过以下方式实现:

//Open the file
std::ifstream file (path, std::ios::in | std::ios::binary | std::ios::ate);

//Move to the position to start reading
file.seekg(64); 

//Read 128 bytes of the file
std::vector<unsigned char> mDataBuffer;
mDataBuffer.resize( 128 ) ;
file.read( (char*)( &mDataBuffer[0]), 128 ) ;

//Read as string
std::string s_data( mDataBuffer.begin(), mDataBuffer.end());

file.close()

此示例是this one的略微修改版本。

还有许多可用的解压缩包(例如zlib或minizip)。每个覆盖功能都可以解压缩文件。我可以简单地解压缩我的压缩文件,将其保存在磁盘上并使用上面的方法读取它。

不幸的是,我没有找到一个示例来直接从压缩文件中读取二进制zip文件的一部分(如果可能的话)。因为我的文件非常大,我不想将它完全解压缩到硬盘驱动器上 。此外,我想要读取的部分非常小,因此完全解压缩文件会浪费cpu时间。出于同样的原因,我也不想将完整的文件解压缩到我的内存中。我正在寻找一种真正的方法来只读取压缩文件的部分

如何在c ++中完成?

1 个答案:

答案 0 :(得分:1)

显然,在zip文件中没有通用的方法。这是根据:

  • @πάνταῥεῖ的评论。
  • 搜索压缩文件here
  • 的一般线索
  • 类似的问题here(虽然问题本身是关于Python)。