Ну если в проекте будет предусмотрена работа только с .zip без .z, то действительно может обойдется :)25.06.03 14:54 Число просмотров: 1062 Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
Подробнее: требуется программа, работающая в командной строке, на C/C++ (Perl, Python и прочая не предлагать), которая умеет переименовывать файлы внутри архива .zip. Желательна, но не обязательна поддержка расширенного формата Zip64.
Если кто-то что-нибудь подобное видел, откликнитесь. Как ни странно, найти такую в сущности простую вещь оказалось проблемой. Да, важно: лицензия должна разрешать использование в коммерческих проектах (внимание тем, кто в танке: GPL подходит).
Нашел - не программу, библиотеку, но тоже хорошо.25.06.03 15:31 Автор: Ktirf <Æ Rusakov> Статус: Elderman Отредактировано 25.06.03 15:32 Количество правок: 1
Даже две: zziplib и zipios++. Обе имеют лицензию LGPL, первая - C интерфейс, вторая - C++. В общем, если кому еще пригодится, оставляю здесь линки. Всем спасибо за поддержку и обсуждение.
распаковать файл, удалить его из архива и добавить под другим именем? как это к примеру делает FAR manager
тем более что именно то что ты хочешь вряди найдешь
В том-то все и дело, что23.06.03 15:49 Автор: Ktirf <Æ Rusakov> Статус: Elderman
если не дай Бог непожатый текстовый файл окажется размером в несколько гигабайт (в моей задаче может такое произойти), то слишком много места и времени потребуется для перепаковки. А самое главное - это и не нужно.
Думаю zlib должен уметь такое делать21.06.03 22:15 Автор: amirul <Serge> Статус: The Elderman
> Подробнее: требуется программа, работающая в командной > строке, на C/C++ (Perl, Python и прочая не предлагать), Для того чтоб сделать программу для командной строки, придется написать небольшую обертку - вызов функций zlib-ы.
Уже смотрел. zlib вообще не знает о файловой системе внутри архива.21.06.03 23:47 Автор: Ktirf <Æ Rusakov> Статус: Elderman
> > Подробнее: требуется программа, работающая в командной > > строке, на C/C++ (Perl, Python и прочая не > предлагать), > Для того чтоб сделать программу для командной строки, > придется написать небольшую обертку - вызов функций zlib-ы. Обертка выйдет, увы, не небольшая, и самое смешное, что как раз возможностей zlib там и не понадобится. Потому что все дерево файлов лежит отнюдь неупакованным, упаковывается только их содержимое.
В общем, я уже сходил на сайт PKWare и взял там описание формата ZIP... Теперь пишу прогу, которая аккуратно хакает архивы, чтобы переименовать содержащиеся там файлы и не повредить всего остального. Похоже это проще всего.
это подходит только в том случае если по длине новое имя меньше или равно длине старого23.06.03 15:22 Автор: ZaDNiCa <indeed ZaDNiCa> Статус: Elderman
Я успешно сменил имя из одного символа на имя из семнадцати - слегка подкорректировав некоторые поля, конечно. UNIXовый zip подлога не заметил. Осталось реализовать алгоритм.
Не понял немного21.06.03 20:31 Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
> Подробнее: требуется программа, работающая в командной > строке, на C/C++ (Perl, Python и прочая не предлагать), > которая умеет переименовывать файлы внутри архива .zip. > Желательна, но не обязательна поддержка расширенного > формата Zip64. По поводу С/С++ - она тебе в сорцах что-ли нужна?
> Если кто-то что-нибудь подобное видел, откликнитесь. Как ни > странно, найти такую в сущности простую вещь оказалось > проблемой. А заказать? Вон есть job - запости там.
Хотя может я чего не понял...
Не понял немного21.06.03 23:44 Автор: Ktirf <Æ Rusakov> Статус: Elderman
> По поводу С/С++ - она тебе в сорцах что-ли нужна? Эту прогу нужно включить в проект, который будет собираться на пяти платформах. Можно, конечно, держать пять бинарников, но некрасиво это как-то.
> А заказать? Вон есть job - запости там. > Хотя может я чего не понял... Заказать я сам себе могу :) Уже писать начал даже :) Просто надеялся, что до меня такую софтину уже придумали. Ну что ж, одним проектом на SourceForge станет больше...
А что за проект (извиняюсь за любопытство), если не секрет?24.06.03 10:31 Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
На самом деле задача выросла очень неожиданно. У UNIX zip'а есть возможность в качестве упаковываемого файла принимать стандартный вход. Все бы ничего, вот только внутри архива этот файл оказывается с именем "-". Естественно, когда всякие виндузятники начинают смотреть это WinZIPом или даже просто хревым проводником, этот факт вылезает на поверхность. Вот и пришлось придумывать, как с этим справиться. Создание временного файла в общем случае нерационально, проще слегка подпортить тот архив, который потоком же выходит из zip'а.
Только свой упаковщик писать придется.25.06.03 10:23 Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman Отредактировано 25.06.03 10:26 Количество правок: 1
> На самом деле задача выросла очень неожиданно. У UNIX zip'а > есть возможность в качестве упаковываемого файла принимать > стандартный вход. Все бы ничего, вот только внутри архива > этот файл оказывается с именем "-". Естественно, когда > всякие виндузятники начинают смотреть это WinZIPом или даже > просто хревым проводником, этот факт вылезает на > поверхность. Вот и пришлось придумывать, как с этим > справиться. Создание временного файла в общем случае > нерационально, проще слегка подпортить тот архив, который > потоком же выходит из zip'а.
используя ZIP алгоритм, но формат свой. Глупо вставлять поддержку разных версий программ зип-упаковщиков, особенно версии, которые появятся в будущем.
А с Юниксом своя песня: на сколько я знаю, упаковщики на большинстве платформ создают архив структуры типа [имя файла, зазипованные данные]. Когда я начал знакомится с юниксами, я сначала был удивлен, что zip не может зазиповать несколько файлов, как в ДОСе. Зипует он один файл дописывая расширение (.z) или в новый файл, если в командной строке указать. При зиповке нескольких файлов их надо сначала затарить, а чтобы обработать дерево каталогов и файлы с нужным типом/атрибутами, их нужно было find'ом найти. получается один файл, он-то и зипуется, и в зип-файле название файла в явном виде не найти, и переименовать его не раззиповывая тоже.
Я думаю, что обойдется :)25.06.03 14:30 Автор: Ktirf <Æ Rusakov> Статус: Elderman
> используя ZIP алгоритм, но формат свой. Глупо вставлять > поддержку разных версий программ зип-упаковщиков, особенно > версии, которые появятся в будущем. Дело в том, что на все зип-упаковщики (не путать с z-упаковщиками) существует, как ни удивительно, ровно один формат, который описан на сайте PKWare. Именно этот формат используется и в чистом zip (который по умолчанию есть на большинстве Унихов и который есть практически для всего, для чего есть компилятор C). и в pkzip (народ, помнящий DOS, прекрасно знает этот архиватор - курилка жив и здравствует, причем уже и под Windows с Linux'ом), и в WinZip, и во многих других. Этот формат используется WinRARом и проводником WindowsXP для работы с zip-файлами. Короче говоря, это стандарт де-факто.
> А с Юниксом своя песня: на сколько я знаю, упаковщики на > большинстве платформ создают архив структуры типа [имя > файла, зазипованные данные]. Когда я начал знакомится с > юниксами, я сначала был удивлен, что zip не может > зазиповать несколько файлов, как в ДОСе. Зипует он один > файл дописывая расширение (.z) или в новый файл, если в > командной строке указать. файлы .Z делает другая команда, которая называется compress. Она, как и gzip и compact, действительно способна упаковывать лишь ровно один файл, без хранения дерева каталогов и даже имени файла. zip и его ближайшие родственники (к коим gzip не относится), хранит внутри архива некую упрощенную файловую систему. Вообще со стороны его авторов это героизм, потому что zip переносим между платформами, в частности, мне ничто не мешает упаковать дерево на Unix, а потом перенести его на Амигу или на Windows.
> получается один файл, он-то и зипуется, и в > зип-файле название файла в явном виде не найти, и > переименовать его не раззиповывая тоже. Опять-таки не путаем .z/.Z/.gz файлы и .zip-файлы. В них используются разные алгоритмы упаковки и формат у них отличается.
Ну если в проекте будет предусмотрена работа только с .zip без .z, то действительно может обойдется :)25.06.03 14:54 Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
Пока еще не открыл, но может быть открою скоро-недолго. Надо только с лицензиями разобраться...
А в целом да, проект будет посвящен для начала одной ма-аленькой утилитке на Си, которая только и умеет что файлы внутри зипа переименовывать :) Ну а дальше время покажет. То же, что я сказал - это сугубо коммерческий закрытый проект, в котором эта утилитка может быть будет использоваться.