0

我目前正在实现一个自定义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,但这似乎很麻烦。

4

1 回答 1

1

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

http://pastebin.com/Bt4rh0mu

于 2013-10-24T08:58:55.027 回答