将std :: filebuf限制为文件内(存档)文件

时间:2013-10-22 08:16:59

标签: c++ iostream streambuf

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

实施此操作的最佳方法是什么?我试图从std::filebuf派生并覆盖像seekoff()这样的函数来执行本地文件偏移 - >归档文件偏移量转换,但由于底层filebuf(我对归档偏移一无所知)调用这些函数并抛出eof错误等,因此无效。我还尝试从我的streambuf中的std::streambuf使用一个std::filebuf派生,但由于std::streambuf中的大多数成员都受到保护,因此也无效。我可以在我的streambuf中使用std::ifstream,但这似乎很麻烦。

1 个答案:

答案 0 :(得分:0)

我最终从头开始重写一个streambuf。它使用C-Style fopen(),fread()等函数。代码没有经过良好测试(无论是正确性还是性能),但它对我有用:

http://pastebin.com/Bt4rh0mu