2013-10-22 36 views
0

我目前正在實現一個自定義的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,但這似乎很麻煩。

回答

0

我最終從頭開始重寫了一個streambuf。它使用C型fopen(),fread()等函數。該代碼是不能很好地測試(既不正確,也不是性能),但它爲我工作:

http://pastebin.com/Bt4rh0mu