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

4

1 に答える 1

1

streambuf を最初から書き直しました。C スタイルの fopen()、fread() などの関数を使用します。コードは十分にテストされていません (正確性もパフォーマンスも) が、私にとっては機能します。

http://pastebin.com/Bt4rh0mu

于 2013-10-24T08:58:55.027 に答える