seek for bzip2, zip
От: srmxx  
Дата: 04.08.11 11:08
Оценка:
Здравствуйте. В своём проекте я использую библиотеки bzlib и unzip для работы с архивами. Проблема в том, что для нормальной работы с данными необходима функция seek. В бусте, вроде, такая функция имеется. Но у меня проект на С и буст я использовать не могу. Может есть какие-то библиотеки для работы с bzip и zip архивами, умеющие перемещать файловый указатель на нужную позицию? Важна даже не столько позиция, сколько возможеность начать читать файл с началаи сохранить/восстановить позицию чтения (когда читаем архив за несколько проходов).

06.08.11 02:08: Перенесено из 'C/C++'
Re: seek for bzip2, zip
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 04.08.11 11:25
Оценка:
Здравствуйте, srmxx, Вы писали:

S>Здравствуйте. В своём проекте я использую библиотеки bzlib и unzip для работы с архивами. Проблема в том, что для нормальной работы с данными необходима функция seek. В бусте, вроде, такая функция имеется. Но у меня проект на С и буст я использовать не могу. Может есть какие-то библиотеки для работы с bzip и zip архивами, умеющие перемещать файловый указатель на нужную позицию? Важна даже не столько позиция, сколько возможеность начать читать файл с началаи сохранить/восстановить позицию чтения (когда читаем архив за несколько проходов).

А причём тут буст?
Sic luceat lux!
Re[2]: seek for bzip2, zip
От: srmxx  
Дата: 04.08.11 11:35
Оценка:
Здравствуйте, Kernan, Вы писали:

K>Здравствуйте, srmxx, Вы писали:


S>>Здравствуйте. В своём проекте я использую библиотеки bzlib и unzip для работы с архивами. Проблема в том, что для нормальной работы с данными необходима функция seek. В бусте, вроде, такая функция имеется. Но у меня проект на С и буст я использовать не могу. Может есть какие-то библиотеки для работы с bzip и zip архивами, умеющие перемещать файловый указатель на нужную позицию? Важна даже не столько позиция, сколько возможеность начать читать файл с началаи сохранить/восстановить позицию чтения (когда читаем архив за несколько проходов).

K>А причём тут буст?

Просто привёл пример. Мне нужна библиотека для работы с bzip2, умеющая делать seek, или хотя бы сохранять/восстанавливать/сбрасывать позицию чтения.
Re: seek for bzip2, zip
От: gegMOPO4  
Дата: 04.08.11 12:49
Оценка:
Здравствуйте, srmxx, Вы писали:
S>Может есть какие-то библиотеки для работы с bzip и zip архивами, умеющие перемещать файловый указатель на нужную позицию? Важна даже не столько позиция, сколько возможеность начать читать файл с началаи сохранить/восстановить позицию чтения (когда читаем архив за несколько проходов).

Хотя в принципе это возможно (за O(1)), но никому (из тех, кто понимает, о чём речь) не нужно. Можете сами разобраться с алгоритмами сжатия и написать свою реализацию. Но, скорее всего, надобность в этом отпадёт на полпути.

Почитайте-ка какую-нибудь популярную литературу о сжатии.
Re[2]: seek for bzip2, zip
От: srmxx  
Дата: 04.08.11 13:07
Оценка:
Здравствуйте, gegMOPO4, Вы писали:

MOP>Здравствуйте, srmxx, Вы писали:

S>>Может есть какие-то библиотеки для работы с bzip и zip архивами, умеющие перемещать файловый указатель на нужную позицию? Важна даже не столько позиция, сколько возможеность начать читать файл с началаи сохранить/восстановить позицию чтения (когда читаем архив за несколько проходов).

MOP>Хотя в принципе это возможно (за O(1)), но никому (из тех, кто понимает, о чём речь) не нужно. Можете сами разобраться с алгоритмами сжатия и написать свою реализацию. Но, скорее всего, надобность в этом отпадёт на полпути.


MOP>Почитайте-ка какую-нибудь популярную литературу о сжатии.


Я знаком с алгоритмом, проблема в другом. Допиливать bzlib — не вариант, т.к. нужно в случае апдейта придётся мерджить изменения и пр. гемор. с поддержкой своего кода.
Программа у меня такая: есть список сжатых файлов. Я из них по кускам читаю данные. Чтение может прерваться и в следующий раз мне нужно начинать оттуда, где оно прервалось в прошлый раз.
Re[3]: seek for bzip2, zip
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 04.08.11 13:09
Оценка:
Здравствуйте, srmxx, Вы писали:

S>Здравствуйте, gegMOPO4, Вы писали:


MOP>>Здравствуйте, srmxx, Вы писали:

S>>>Может есть какие-то библиотеки для работы с bzip и zip архивами, умеющие перемещать файловый указатель на нужную позицию? Важна даже не столько позиция, сколько возможеность начать читать файл с началаи сохранить/восстановить позицию чтения (когда читаем архив за несколько проходов).

MOP>>Хотя в принципе это возможно (за O(1)), но никому (из тех, кто понимает, о чём речь) не нужно. Можете сами разобраться с алгоритмами сжатия и написать свою реализацию. Но, скорее всего, надобность в этом отпадёт на полпути.


MOP>>Почитайте-ка какую-нибудь популярную литературу о сжатии.


S>Я знаком с алгоритмом, проблема в другом. Допиливать bzlib — не вариант, т.к. нужно в случае апдейта придётся мерджить изменения и пр. гемор. с поддержкой своего кода.

S>Программа у меня такая: есть список сжатых файлов. Я из них по кускам читаю данные. Чтение может прерваться и в следующий раз мне нужно начинать оттуда, где оно прервалось в прошлый раз.
Дык распакуй всё сразу в tmp файл и читай кусками из распакованных или это не возможно?
Sic luceat lux!
Re[4]: seek for bzip2, zip
От: srmxx  
Дата: 04.08.11 13:25
Оценка:
K>Дык распакуй всё сразу в tmp файл и читай кусками из распакованных или это не возможно?

Файлы могут быть очень большими.
Re: seek for bzip2, zip
От: SleepyDrago Украина  
Дата: 04.08.11 15:53
Оценка:
Здравствуйте, srmxx, Вы писали:

S>Здравствуйте. В своём проекте я использую библиотеки bzlib и unzip для работы с архивами. Проблема в том, что для нормальной работы с данными необходима функция seek. В бусте, вроде, такая функция имеется. Но у меня проект на С и буст я использовать не могу. Может есть какие-то библиотеки для работы с bzip и zip архивами, умеющие перемещать файловый указатель на нужную позицию? Важна даже не столько позиция, сколько возможеность начать читать файл с началаи сохранить/восстановить позицию чтения (когда читаем архив за несколько проходов).


у нас в проекте делали иначе: вместо сжатия файла целиком, сжимали логические блоки отдельно. И соответственно seek можно было делать только на 1 блок. Но идея простая и понятная. На эффективность сжатия оно влияет весьма отрицательно если много блоков получается очень маленьких. Но общий объем данных при этом маленький так что по сравнению с нагруженными случаями это не заметно.
Re[3]: seek for bzip2, zip
От: gegMOPO4  
Дата: 04.08.11 16:38
Оценка:
Здравствуйте, srmxx, Вы писали:
S>Программа у меня такая: есть список сжатых файлов. Я из них по кускам читаю данные. Чтение может прерваться и в следующий раз мне нужно начинать оттуда, где оно прервалось в прошлый раз.

А, ну так в этом случае проще, и доделывать ничего не надо. Просто для каждого файла отдельно вызываете BZ2_bzReadOpen и запоминаете возвращаемый BZFILE *. И читаете откуда нужно. Или аналогично для низкоуровневых функций — для каждого файла отдельные буфера и структуры состояния.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.