将 std::filebuf 限制为(存档)文件内的文件
Limit std::filebuf to file inside (archive) file
我目前正在实现一个自定义std::filebuf
,它从未压缩的.zip档案中读取文件。对于存档中的每个文件,我都有存档文件的偏移量和大小。现在我想将 filebuf 限制为间隔[offset, offset+size]
,以便我可以像打开普通文件一样使用pubseekoff()
等函数。例如,当我pubseekoff(5, std::ios::beg, std::ios::in);
filebuf 实际上应该将其底层获取指针设置为存档文件中的offset+5
。
实现这一点的最佳方法是什么?我试图从std::filebuf
派生并覆盖 seekoff()
等函数来执行本地文件偏移量 ->存档文件偏移转换,但这不起作用,因为底层 filebuf(对我的存档偏移一无所知)调用这些函数并抛出 eof 错误等。我还尝试从 std::streambuf
派生并在我的 streambif 中使用std::filebuf
,但这也没有奏效,因为std::streambuf
中的大多数成员都受到保护。我可以在我的 streambuf 中使用std::ifstream
,但这似乎很麻烦。
我最终从头开始重写了一个 streambuf。它使用 C 样式 fopen()、fread() 等函数。该代码没有经过很好的测试(无论是正确性还是性能),但它对我有用:
http://pastebin.com/Bt4rh0mu
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 提示存档文件中的动态库依赖项
- 由 Xcode 生成的存档文件缺少 dylibs
- 如何在单个 (.a) 存档中仅获取所需的对象文件
- GCC链接器 - 将存档中的所有对象文件映射到特定部分
- 与两个符号链接.一个在存档文件中定义
- 使用Qt安装程序框架中的archivegen工具将文件打包为7zip存档
- nm 获取整个存档的未定义符号,而不是单独的目标文件
- 将 std::filebuf 限制为(存档)文件内的文件
- 用于提取存档文件的库
- 在内存中创建文件,然后使用7-zip命令行将它们推入zip存档
- 使用来自存档文件的函数而不使用.cpp
- 如何查看.a(存档)文件的"index"信息?
- 自定义存档格式文件读取
- 如何在链接器脚本中使用存档中的目标文件
- 如何在链接存档文件时将库版本信息添加到elf文件中,所有存档文件都有其版本信息
- 用minizip/zlib从zip存档中加载文本文件,文件末尾有垃圾字符
- QuaZip正在删除存档中的文件
- 将所有文件从一个 ZIP 存档移动到另一个存档