我目前正在实现一个自定义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
,但这似乎很麻烦。
答案 0 :(得分:0)
我最终从头开始重写一个streambuf。它使用C-Style fopen(),fread()等函数。代码没有经过良好测试(无论是正确性还是性能),但它对我有用: