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 をスローするため、機能しませんでしたエラーなど。また、ストリームバッファ内でaから派生しstd::streambuf
て使用しようとしましたが、ほとんどのメンバーが保護されているstd::filebuf
ため、これも機能しませんでした。streambuf 内でa を使用std::streambuf
できますが、それは面倒なようです。std::ifstream