C++ 将std::filebuf限制为(归档)文件中的文件

C++ 将std::filebuf限制为(归档)文件中的文件,c++,iostream,streambuf,C++,Iostream,Streambuf,我目前正在实现一个自定义的std::filebuf,它从未压缩的.zip档案中读取文件。对于归档文件中的每个文件,我都有归档文件的偏移量和大小。现在我想将filebuf限制为间隔[offset,offset+size],这样我就可以像打开普通文件一样使用pubsekoff()之类的函数。例如,当我使用pubsekoff时(5,std::ios::beg,std::ios::in)filebuf实际上应该将它的底层get指针设置为归档文件中的offset+5 实现这一点的最佳方式是什么?我尝试从s

我目前正在实现一个自定义的
std::filebuf
,它从未压缩的.zip档案中读取文件。对于归档文件中的每个文件,我都有归档文件的偏移量和大小。现在我想将filebuf限制为间隔
[offset,offset+size]
,这样我就可以像打开普通文件一样使用
pubsekoff()
之类的函数。例如,当我使用pubsekoff时(5,std::ios::beg,std::ios::in)filebuf实际上应该将它的底层get指针设置为归档文件中的
offset+5


实现这一点的最佳方式是什么?我尝试从
std::filebuf
派生并重写函数,如
seekoff()
,以进行本地文件偏移量->存档文件偏移量转换,但这不起作用,因为底层filebuf(它不知道我的存档偏移量)调用这些函数并抛出eof错误等。我还尝试从
std::streambuf
派生,并在我的streambuf中使用
std::filebuf
,但这也不起作用,因为
std::streambuf
中的大多数成员都受到保护。我可以在streambuf中使用
std::ifstream
,但这似乎很麻烦。

我最终从头开始重写了streambuf。它使用C风格的fopen()、fread()等函数。代码没有经过很好的测试(无论是正确性还是性能),但它对我来说很有用: