我目前正在实现一个自定义std::filebuf
,它从未压缩的 .zip 档案中读取文件。对于存档中的每个文件,我都有存档文件的偏移量和大小。现在我想将 filebuf 限制在间隔内[offset, offset+size]
,这样我就可以像pubseekoff()
打开普通文件一样使用函数。例如,当我执行pubseekoff(5, std::ios::beg, std::ios::in);
filebuf 时,实际上应该将它的底层 get-pointer 设置offset+5
为归档文件中。
实现这一点的最佳方法是什么?我试图派生std::filebuf
并覆盖诸如seekoff()
执行本地文件偏移量的函数 - >存档文件偏移量转换,但这不起作用,因为底层的filebuf(至尊对我的存档偏移量一无所知)调用这些函数并抛出eof错误之类的。我还尝试从我的streambuf 中派生std::streambuf
并使用a std::filebuf
,但这也不起作用,因为其中的大多数成员std::streambuf
都受到保护。我可以在我的 streambuf 中使用 a std::ifstream
,但这似乎很麻烦。