ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
23 апреля
776789
Николай Коровин (29.08.2017 13:43 - 21:16, просмотров: 3718)
Библиотеки для прозрачной работы со сжатыми архивами (от tar.xz до rar). Статические, динамические, под мастдай, под линь. Обсуждаем, делимся, высказываем пожелания. Сейчас пользуюсь велосипедом, написанным стопиццот лет назад на основе опенсорсного unrar'а (собственно, ради этого его аффтары и открывали) склероз, враппером вокруг готового unrar.dll. Готовые либы на остальные форматы, перебранные в количестве, все были с гнильцой, кто-то не умел в солидовые архивы, кто-то тупо распаковывал в темп, кто-то не давал нормального интерфейса типа "открыл файл, последовательно прочитал нужными порциями, закрыл файл", а эпиком была либа, которая аллокатила оперативу под всё содержимое архива и работала уже оттуда. Попробовав открыть матстат ксенического типа суммарным объёмом в пару десятков гиг, я всплакнул и написал по-быстрому веловраппер. Сейчас или ситуация изменилась без нас, или изменится. Как я это себе вижу: есть либа с функциями, ей передаётся имя либо хэндлер архива, она возвращает внутренний хэндлер либо ошибку. По этому хэндлеру можно сделать следующее: 1) конечно же, закрыть архив на фиг. 2) вызвать аналог FindNext, чтобы посмотреть имя следующего файла. 3) гарантированно можно пропустить тело файла или открыть его для последовательного чтения. Это доступно при всех типах архивов, включая солиды и файлы со сжатыми/запароленными именами, т. к. после (2) запакованный файл готов как раз к этой операции. 4) можно открыть для последовательного чтения любой файл, имя которого известно. Но в некоторых случаях этого делать не захочется, потому что это вызовет чтение архива с самого начала и пропуск всех лишних файлов, и если его там не оказалось, только после этого мы получим ошибку. 4а) Для солидов можно переложить на юзера оптимизацию поиска, сделав две функции -- "автопропуск всех файлов с начала архива, пока не дойдём до нужного" и "автопропуск всех файлов с текущей позиции, пока не дойдём до нужного". А можно и самим помнить все файлы, которые нам попадались с момента открытия. 5) Если имена лежат кучно, можно как-то уведомить юзера, что он может сначала FindNext'ом получить полный список, а уже потом выбирать любой файл. Если они лежат перед телами, то намекнуть ему флагом, чтобы он так не делал, ибо это приведёт к полному пробеганию по всему архиву. 6) Формат архива должен быть прозрачен и никого не волновать. Открыли .zip, .7z, .tar.xz, .tar.gz, .rar -- всё равно, мы просто получаем хэндлер и пару флагов, что с этим архивом можно сделать быстро, а что отнимет кучу времени для полного чтения его тела. Кто-то такие либы а) видел? б) пользовался? в) хотел бы пользоваться? г) писал? д) готов приложить руку?