【问题标题】:Read only a part of a binary zip file只读二进制 zip 文件的一部分
【发布时间】:2017-06-18 14:16:24
【问题描述】:

我正在寻找一种方法来读取二进制 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时间。出于同样的原因,我也不想将 complete 文件解压缩到我的内存中。我正在寻找一种仅读取压缩文件的部分的真正方法。

如何在 C++ 中实现这一点?

【问题讨论】:

  • 什么是压缩文件的部分
  • 普通二进制文件中seek的开始和结束位置(有问题修改)
  • 您是否应该从存档中提取单个文件?没关系,我仍然建议您找到一个便携式库来为您处理它。
  • 不,目前我的存档包含多个文件,但我只想从其中一个文件中读取几个字节。
  • @takje 应该在哪里存储和检索特别压缩文件的开始/结束位置? zip 格式不支持该 IIRC。除此之外,您的问题是 OT,因为它要求推荐 3rd 方资源。

标签: c++ zip


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 2011-05-02
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    相关资源
    最近更新 更多