Здравствуйте. В своём проекте я использую библиотеки bzlib и unzip для работы с архивами. Проблема в том, что для нормальной работы с данными необходима функция seek. В бусте, вроде, такая функция имеется. Но у меня проект на С и буст я использовать не могу. Может есть какие-то библиотеки для работы с bzip и zip архивами, умеющие перемещать файловый указатель на нужную позицию? Важна даже не столько позиция, сколько возможеность начать читать файл с началаи сохранить/восстановить позицию чтения (когда читаем архив за несколько проходов).
Здравствуйте, srmxx, Вы писали:
S>Здравствуйте. В своём проекте я использую библиотеки bzlib и unzip для работы с архивами. Проблема в том, что для нормальной работы с данными необходима функция seek. В бусте, вроде, такая функция имеется. Но у меня проект на С и буст я использовать не могу. Может есть какие-то библиотеки для работы с bzip и zip архивами, умеющие перемещать файловый указатель на нужную позицию? Важна даже не столько позиция, сколько возможеность начать читать файл с началаи сохранить/восстановить позицию чтения (когда читаем архив за несколько проходов).
А причём тут буст?
Здравствуйте, Kernan, Вы писали:
K>Здравствуйте, srmxx, Вы писали:
S>>Здравствуйте. В своём проекте я использую библиотеки bzlib и unzip для работы с архивами. Проблема в том, что для нормальной работы с данными необходима функция seek. В бусте, вроде, такая функция имеется. Но у меня проект на С и буст я использовать не могу. Может есть какие-то библиотеки для работы с bzip и zip архивами, умеющие перемещать файловый указатель на нужную позицию? Важна даже не столько позиция, сколько возможеность начать читать файл с началаи сохранить/восстановить позицию чтения (когда читаем архив за несколько проходов). K>А причём тут буст?
Просто привёл пример. Мне нужна библиотека для работы с bzip2, умеющая делать seek, или хотя бы сохранять/восстанавливать/сбрасывать позицию чтения.
Здравствуйте, srmxx, Вы писали: S>Может есть какие-то библиотеки для работы с bzip и zip архивами, умеющие перемещать файловый указатель на нужную позицию? Важна даже не столько позиция, сколько возможеность начать читать файл с началаи сохранить/восстановить позицию чтения (когда читаем архив за несколько проходов).
Хотя в принципе это возможно (за O(1)), но никому (из тех, кто понимает, о чём речь) не нужно. Можете сами разобраться с алгоритмами сжатия и написать свою реализацию. Но, скорее всего, надобность в этом отпадёт на полпути.
Почитайте-ка какую-нибудь популярную литературу о сжатии.
Здравствуйте, gegMOPO4, Вы писали:
MOP>Здравствуйте, srmxx, Вы писали: S>>Может есть какие-то библиотеки для работы с bzip и zip архивами, умеющие перемещать файловый указатель на нужную позицию? Важна даже не столько позиция, сколько возможеность начать читать файл с началаи сохранить/восстановить позицию чтения (когда читаем архив за несколько проходов).
MOP>Хотя в принципе это возможно (за O(1)), но никому (из тех, кто понимает, о чём речь) не нужно. Можете сами разобраться с алгоритмами сжатия и написать свою реализацию. Но, скорее всего, надобность в этом отпадёт на полпути.
MOP>Почитайте-ка какую-нибудь популярную литературу о сжатии.
Я знаком с алгоритмом, проблема в другом. Допиливать bzlib — не вариант, т.к. нужно в случае апдейта придётся мерджить изменения и пр. гемор. с поддержкой своего кода.
Программа у меня такая: есть список сжатых файлов. Я из них по кускам читаю данные. Чтение может прерваться и в следующий раз мне нужно начинать оттуда, где оно прервалось в прошлый раз.
Здравствуйте, srmxx, Вы писали:
S>Здравствуйте, gegMOPO4, Вы писали:
MOP>>Здравствуйте, srmxx, Вы писали: S>>>Может есть какие-то библиотеки для работы с bzip и zip архивами, умеющие перемещать файловый указатель на нужную позицию? Важна даже не столько позиция, сколько возможеность начать читать файл с началаи сохранить/восстановить позицию чтения (когда читаем архив за несколько проходов).
MOP>>Хотя в принципе это возможно (за O(1)), но никому (из тех, кто понимает, о чём речь) не нужно. Можете сами разобраться с алгоритмами сжатия и написать свою реализацию. Но, скорее всего, надобность в этом отпадёт на полпути.
MOP>>Почитайте-ка какую-нибудь популярную литературу о сжатии.
S>Я знаком с алгоритмом, проблема в другом. Допиливать bzlib — не вариант, т.к. нужно в случае апдейта придётся мерджить изменения и пр. гемор. с поддержкой своего кода. S>Программа у меня такая: есть список сжатых файлов. Я из них по кускам читаю данные. Чтение может прерваться и в следующий раз мне нужно начинать оттуда, где оно прервалось в прошлый раз.
Дык распакуй всё сразу в tmp файл и читай кусками из распакованных или это не возможно?
Здравствуйте, srmxx, Вы писали:
S>Здравствуйте. В своём проекте я использую библиотеки bzlib и unzip для работы с архивами. Проблема в том, что для нормальной работы с данными необходима функция seek. В бусте, вроде, такая функция имеется. Но у меня проект на С и буст я использовать не могу. Может есть какие-то библиотеки для работы с bzip и zip архивами, умеющие перемещать файловый указатель на нужную позицию? Важна даже не столько позиция, сколько возможеность начать читать файл с началаи сохранить/восстановить позицию чтения (когда читаем архив за несколько проходов).
у нас в проекте делали иначе: вместо сжатия файла целиком, сжимали логические блоки отдельно. И соответственно seek можно было делать только на 1 блок. Но идея простая и понятная. На эффективность сжатия оно влияет весьма отрицательно если много блоков получается очень маленьких. Но общий объем данных при этом маленький так что по сравнению с нагруженными случаями это не заметно.
Здравствуйте, srmxx, Вы писали: S>Программа у меня такая: есть список сжатых файлов. Я из них по кускам читаю данные. Чтение может прерваться и в следующий раз мне нужно начинать оттуда, где оно прервалось в прошлый раз.
А, ну так в этом случае проще, и доделывать ничего не надо. Просто для каждого файла отдельно вызываете BZ2_bzReadOpen и запоминаете возвращаемый BZFILE *. И читаете откуда нужно. Или аналогично для низкоуровневых функций — для каждого файла отдельные буфера и структуры состояния.