我目前正在實現一個自定義的std::filebuf
,它從未壓縮的.zip文件中讀取文件。對於檔案中的每個文件,我都有歸檔文件的偏移量和大小。現在我想限制filebuf的時間間隔爲[offset, offset+size]
,這樣我就可以使用像pubseekoff()
這樣的函數,就好像打開了一個普通文件一樣。例如,當我做pubseekoff(5, std::ios::beg, std::ios::in);
時,filebuf應該在存檔文件中實際設置它的底層get-pointer爲offset+5
。將std :: filebuf限制在文件裏面(存檔)文件
實現此目的的最佳方式是什麼?我試圖從std::filebuf
派生並覆蓋像seekoff()
這樣的函數來執行本地文件偏移量 - >歸檔文件偏移量轉換,但由於底層文件buf(它不知道關於我的歸檔偏移量的任何信息)將這些函數稱爲拋出eof錯誤等。我也嘗試從std::streambuf
和中使用 a std::filebuf
在我的streambuf中,但這也不起作用,因爲std::streambuf
中的大多數成員都受到保護。我可能在我的streambuf中使用std::ifstream
,但這似乎很麻煩。