我正在寻找一种方法来读取二进制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 ++中完成?