Ограничить std :: filebuf файлом внутри (архивом) файла

Я в настоящее время внедряю кастом 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 ошибки и тому подобное. Я также пытался извлечь из std::streambuf а также использование std::filebuf внутри моего streambuf, но это также не сработало, так как большинство членов std::streambuf защищены я мог использовать std::ifstream в моем потоке, но это кажется громоздким.

0

Решение

Я закончил тем, что переписал streambuf с нуля. Он использует функции C-Style fopen (), fread () и т. Д. Код не очень хорошо протестирован (ни на корректность, ни на производительность), но он работает для меня:

http://pastebin.com/Bt4rh0mu

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]