Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Закладки » FreeArc: бесплатный open-source архиватор - Часть 2

Модерирует : gyra, Maz

Widok (07-09-2009 19:15): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

FreeArc
бесплатный open-source архиватор для Windows и Linux,
сочетающий высокую степень сжатия и большой набор возможностей


Официальный сайт | Скриншоты | Скачать
Документация на консольную версию | Документация на GUI версию
Сообщество пользователей FreeArc | Вики | Трекер (рассылка по ошибкам)
Проект на SourceForge.net | SVN-репозиторий | Поддержка InnoSetup
Обсуждение на encode.ru (англоязычное)

Скачать последний релиз - FreeArc 0.51 от 28 апреля 2009 г. Что нового: GUI с 14 локализациями, SFX/инсталятор, авто-определение типов файлов, очередное увеличение скорости и сжатия, словарь в lzma до 1 гб, исправлено 5 ошибок (рас)паковки (подробнее)
 
Текущая альфа версия: скачать (распаковывать поверх установленного FreeArc 0.51). Список исправлений, блог

MiniFAQ...

Подробное описание используемых алгоритмов
Почему он сжимает лучше и быстрее, чем 7-zip/rar...
Результаты тестов, подтверждающие его крутизну...
Почему для использования 2+ гб памяти желательно установить 64-битную версию Windows
Планы дальнейшего развития
Что подразумевается под "интеграцией с Explorer"
Старая FreeArc wiki (включая описание формата архива)
Логотип - объявляется конкурс на иконки для FreeArc

Сторонние оболочки для работы с FreeArc
wArc - простая и понятная программа управления архивами (требует .NET Framework 2.0)
PeaZip - менеджер архивов с поддержкой большого количества форматов, для Windows и Linux

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 12:02 30-01-2009 | Исправлено: Bulat_Ziganshin, 22:15 30-08-2009
CTACKo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
На Unicode-версии ваши доработки для freearc_example приводят к ошибке, если в архиве есть русские имена, может займётесь?
 
я так понимаю, там не нужно преобразование из ANSI в UTF16, поскольку строки в этой версии уже в UTF-16 и String должен непосредственно преобразовываться в PWideChar  
а я так понимаю что там строки храняццо в Unicode, а не в UTF и потому конвертить нада из юникода в утф. Как это сделать той функцией я пока не знаю. Там как-то нада с флагами играццо...
 
а вообще скажи точно что имел в виду - распак из каталога с кириллицей, в каталог с кириллицей или распак файлов с кириллицей в названиях? Т.к. если последнее, то тут не мое преобразование важно, а то, которое для отображения статуса распака на форме в лейбле, которая ansi2oem/oem2ansi.

Всего записей: 180 | Зарегистр. 05-09-2008 | Отправлено: 10:03 10-07-2009 | Исправлено: CTACKo, 10:08 10-07-2009
Victor_Dobrov



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Bulat_Ziganshin

Цитата:
обновлён http://www.haskell.org/bz/FreeArc4InnoSetup.zip

Забавная ситуация с AnsiToUtf8(Arcs[n].Path). Я уже убирал AnsiToUtf8, вы со CTACKo опять поставили...
Может я что-то не то делаю, но вот результаты тестирования:
инсталлятор, собранный в IS 5.3.2-Unicode, всегда возвращает ошибку, но если убрать AnsiToUtf8, то и русские файлы извлекаются/отображаются нормально и скрипт работает на всех версиях.
 
В-общем, подвожу итог: багов не осталось (если я прав с AnsiToUtf8) и имеется два скрипта, из которых мой (в теме InnoSetup) делает тоже самое, но не требует totalSize.
 
добавлено
Unicode-версия IS извлекает файлы в никуда (если убрать AnsiToUtf8), либо даёт ошибку...

Всего записей: 742 | Зарегистр. 27-09-2005 | Отправлено: 10:06 10-07-2009 | Исправлено: Victor_Dobrov, 10:29 10-07-2009
CTACKo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
про кнопку отмены распаковки, предлагаю так (без создания своей): см. пост с новым кодом ниже
Добавлено:
Victor_Dobrov

Цитата:
Забавная ситуация с AnsiToUtf8(Arcs[n].Path). Я уже убирал AnsiToUtf8, вы со CTACKo опять поставили...  
так вот это кто отличилсо!  
Это я с самого начала так написал и передал SotM-у,  ведь для НЕюникод-версии (как у меня) это надо - что будет если распаковывать будем архив, лежащий в каталоге с кириллицей или имя файла архива будет содержать кириллицу?! а в юникод-версии выходит что это глючит, т.е. в ней оно не нада. Так что вот и решили задачу
 

Всего записей: 180 | Зарегистр. 05-09-2008 | Отправлено: 11:33 10-07-2009 | Исправлено: CTACKo, 19:55 10-07-2009
Victor_Dobrov



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CTACKo

Цитата:
про кнопку отмены распаковки, предлагаю так (без создания своей)

Твой способ не работает, но это уже не нужно, сделано стандартно, а на завершающем этапе установки кнопка Cancel недоступна!

Цитата:
так вот это кто отличился!

Я шапку не правил и свою версию туда не ставил, надо было сравнивать построчно!

Цитата:
а вообще скажи точно что имел в виду - распак из каталога с кириллицей, в каталог с кириллицей или распак файлов с кириллицей в названиях?

Только распаковку архива, содержащего имена на русском в папку установки скрипта. Сейчас стандартный скрипт версии 2.0 под IS Unicode вообще не работает.

Всего записей: 742 | Зарегистр. 27-09-2005 | Отправлено: 13:04 10-07-2009
CTACKo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Твой способ не работает, но это уже не нужно, сделано стандартно, а на завершающем этапе установки кнопка Cancel недоступна!  

у меня просто свой скрипт, я не распаковываю фарки на последней странице - мне это очень сильно не подходит. я распаковываю на том же шаге что и ис, короче я принудительно запускаю распаковку в сеции [Files]. странно что не работает... доработаем значит

Всего записей: 180 | Зарегистр. 05-09-2008 | Отправлено: 13:46 10-07-2009
Bulat_Ziganshin

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
а я так понимаю что там строки храняццо в Unicode, а не в UTF

 Unicode - это просто нумерация символов. этот символ имеет номер 111, этот - номер 74562. это не кодировка
 
для передачи символов unicode придуманы различные кодировки. ucs4 - каждый символ передаётся ровно 4 байтами. utf-16 - символ передаётся одним или двумя 16-битными словами. и так далее. windows api используется utf-16 в *W функциях. я использую utf-8
 
поэтому для unicode версии скрипта нужно убрать перекодирование из ansi в utf-16, оно здесь лишнее
 

Цитата:
а вообще скажи точно что имел в виду - распак из каталога с кириллицей, в каталог с кириллицей или распак файлов с кириллицей в названиях?

со вторым вообще мрак, я даже не смотрел
 

Цитата:
Забавная ситуация с AnsiToUtf8(Arcs[n].Path). Я уже убирал AnsiToUtf8, вы со CTACKo опять поставили...
Может я что-то не то делаю, но вот результаты тестирования:
инсталлятор, собранный в IS 5.3.2-Unicode, всегда возвращает ошибку, но если убрать AnsiToUtf8, то и русские файлы извлекаются/отображаются нормально и скрипт работает на всех версиях.  

 
Стас сделал скрипт, полностью работающий на не-unicode версиях. после твоей переделки возникли проблемы с распаковкой из каталогов с русскими именами
 
 

Цитата:
В-общем, подвожу итог: багов не осталось (если я прав с AnsiToUtf8) и имеется два скрипта, из которых мой (в теме InnoSetup) делает тоже самое, но не требует totalSize.  

 
но всё же не совсем то же самое - я меня показывается общий объём распакованных данных и прогресс считается по ним. как-нибудь я раскачаюсь и реализую автоматическое вычисление totalSize в dll, точнее функцию "имя архива -> объём распакованных данных в нём"
 
далее, dll сейчас вызывает callback как минимум 100 раз в секунду со спец. событием "timer". я думаю, это лучше, чем вызывать SetTimer. меньше системных зависимостей в скрипте, гарантирована синхронизация (т.е. то что callback и процедура таймера не будут исполняться одновременно)
 
далее, я не смог понять зачем нужен OnWndHook? кол-во распакованных файлов надо считать по событию "filename" - оно вызывается один раз перед обработкой каждого файла

Всего записей: 3401 | Зарегистр. 13-08-2007 | Отправлено: 14:01 10-07-2009
CTACKo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
если все еще интересен вариант вешания отмены распака на визардовую кнопу отмены - у меня уже работает.Подробнее...
 
Добавлено:

Цитата:

Цитата:
Цитата:
а вообще скажи точно что имел в виду - распак из каталога с кириллицей, в каталог с кириллицей или распак файлов с кириллицей в названиях?

со вторым вообще мрак, я даже не смотрел  

чето я ваще не пойму. основная задача была именно фикс трабла при распаке в папку в пути которой есть кириллица, а ты гришь что это даже не проверял.
 
Добавлено:
по юникодвой версии нада сделать типа вот такого:

Код:
            // Pass the specified arguments to 'unarc.dll'
           if ISUnicodeVersion then  
            Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', Arcs[n].Path, '', '', '', '', '')
           else
            Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');  

остаеццо тока выставить ISUnicodeVersion в соотв. с версией IS

Всего записей: 180 | Зарегистр. 05-09-2008 | Отправлено: 15:06 10-07-2009 | Исправлено: CTACKo, 20:00 10-07-2009
Victor_Dobrov



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CTACKo - по юникоду отбой, проблема решена! (скрипт в теме Inno Setup)

Всего записей: 742 | Зарегистр. 27-09-2005 | Отправлено: 15:26 10-07-2009 | Исправлено: Victor_Dobrov, 15:50 10-07-2009
Bulat_Ziganshin

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
со вторым вообще мрак, я даже не смотрел  

сорри, третьим

Всего записей: 3401 | Зарегистр. 13-08-2007 | Отправлено: 15:40 10-07-2009
Victor_Dobrov



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Bulat_Ziganshin

Цитата:
но всё же не совсем то же самое - у меня показывается общий объём распакованных данных и прогресс считается по ним. как-нибудь я раскачаюсь и реализую автоматическое вычисление totalSize в dll, точнее функцию "имя архива -> объём распакованных данных в нём"

Не делай или оставь точку "progress", по ней удобно считать кол-во обработанных мб архивов, для меня проще так.
Что касается объёма распакованных данных, то он может нарастать очень нелинейно (как и позиция в архиве).

Цитата:
далее, dll сейчас вызывает callback как минимум 100 раз в секунду со спец. событием "timer". я думаю, это лучше, чем вызывать SetTimer. меньше системных зависимостей в скрипте, гарантирована синхронизация (т.е. то что callback и процедура таймера не будут исполняться одновременно)  
далее, я не смог понять зачем нужен OnWndHook? кол-во распакованных файлов надо считать по событию "filename" - оно вызывается один раз перед обработкой каждого файла

В инсталляторе перехватывается отрисовка, и значит, при любом изменении страницы (имя, этап, прогресс) можно снимать данные. Так сделано в Corona Skin для подсчёта и занесения данных в журнал установки, а твой вариант предоставляет только данные при распаковке архивов.
Таймер нужен, когда при извлечении/распаковке большого файла прогресс останавливается (движется очень медленно), а по таймеру продолжает подсчитываться время.

Всего записей: 742 | Зарегистр. 27-09-2005 | Отправлено: 15:50 10-07-2009
CTACKo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:

Цитата:
со вторым вообще мрак, я даже не смотрел

сорри, третьим
дык а там какие мб проблемы? разве что с отображением имени распаковываемого файла над пб, если таковое имееццо. я не использую, к примеру.
 
 
Добавлено:
кстати, вызов функции 100 раз ф сек (думаю именно сей факт) дал результат - теперь окно инстала при распаке не "морозиццо" - его можно свернуть/развернуть, переместить. хотя и не 100%
 
Добавлено:
ps Обнаружилось что использование визардной кнопки "Отмена" выгодно тем, что оно срабатывает при нажатии и на кн. закрытия окна. Отдельно созданная кнопа здесь профтыкает и вообще я хз что будет.

Всего записей: 180 | Зарегистр. 05-09-2008 | Отправлено: 15:56 10-07-2009 | Исправлено: CTACKo, 23:43 10-07-2009
CTACKo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Дык будут каменты по сему вопросу?:

Цитата:
Касаемо длл-ки для ис - фа очень долго ищет начало архива, если его пристегивать к ехе-шнику (если типа 300кил ехе против 3Гиг фа). Как я понял он с конца файла начинает поиск своей сигнатуры и когда находит тогда все и начинается. Нельзя ли как-то передавать опцией хотябы направление поиска - от начала файла или с конца, а еще лучше указывать примерное смещение. К примеру, я знаю что сетап займет 300 кил, я б указал искать с после 300к да и фсе.  
там действительно ф таких случаях во время инстала ТАКАЯ пауза получаеццо, что создаеццо ощущение смачного зависона...
 
 
Добавлено:
такой прикол интересный - фа.длл на распаке подсчитывает место непонятным мне образом - показывает по статусу что общий размер то ли архива, то ли распакованных данных 3017Мб. При этом запакованное в архив весит 2 064 534 741, а сам архив весит 1 389 625 634 - он, что ли, исходит из суммы этих величин (так 3210Мб тогда) или из общего веса папки, куда распаковуеццо? Тоже нет. На другом архиве показывает по статусу общий размер 2840Мб, хотя архив сам весит 2 114 382 124, а данных в нем 4.376.322.737.  
Предидущая версия хотя бы показывала в статусе цифру соотв. весу самого архива...

Всего записей: 180 | Зарегистр. 05-09-2008 | Отправлено: 00:49 14-07-2009 | Исправлено: CTACKo, 01:48 14-07-2009
Victor_Dobrov



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CTACKo

Цитата:
Предидущая версия хотя бы показывала в статусе цифру соотв. весу самого архива...

Какой скрипт неправильно работает? Ты бы хоть версию скрипта указал или ссылку на пост с этим скриптом.

Всего записей: 742 | Зарегистр. 27-09-2005 | Отправлено: 05:19 14-07-2009
CTACKo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да та, что не использовала цикл для поиска архивов:

Код:
function FreeArcCallback (what: PChar; int1, int2: Integer; str: PChar): Integer;
var percents: Integer;
begin
  if string(what)='filename' then
      //ExtractFile.Caption:=str
  else if (string(what)='progress') and (int2>0) then begin
      percents := (int1*1000) div int2;
      ProgressBar.Position := percents;
      ExtractFile.Caption:='Распаковка архива: '+IntToStr(int1)+' из '+IntToStr(int2)+' мб ('+FloatToStr(percents/10)+'%)';
  end;
  AppProcessMessage;
  Result := Cancel;
end;
но, по сути, это неважно - передаётся всё те же 2 integer параметра про размеры, что сейчас, что тогда. Т.е. дело не в скрипте, а именно в длл-ке.

Всего записей: 180 | Зарегистр. 05-09-2008 | Отправлено: 09:58 14-07-2009 | Исправлено: CTACKo, 10:15 14-07-2009
Bulat_Ziganshin

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CTACKo
событие progress передаёт в int2 размер текущего архива (самого архива!) в мб
 
Добавлено:

Цитата:
Касаемо длл-ки для ис - фа очень долго ищет начало архива, если его пристегивать к ехе-шнику (если типа 300кил ехе против 3Гиг фа).

а с чего ты решил, что он долго изет начало архива? я 270 мегов подцепил - долго проихсодит запуск exe-шника, видно он всё в память читает. после нажати кнопки Установить распаковка начинается мгновенно

Всего записей: 3401 | Зарегистр. 13-08-2007 | Отправлено: 10:20 14-07-2009
CTACKo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
событие progress передаёт в int2 размер текущего архива (самого архива!) в мб  
тогда тем более непонятно откуда такие цифры.

Цитата:
а с чего ты решил, что он долго изет начало архива? я 270 мегов подцепил - долго проихсодит запуск exe-шника, видно он всё в память читает. после нажати кнопки Установить распаковка начинается мгновенно
ну я так решил визуально Ну идет распаковка файлов из дистрибутива, пб себе двигаеццо, и как только достигается команда распаковки все "зависает" на некоторое время, затем идет распак и начинает его пб двигаццо. Время "зависания" получилось максимальным, там, где был небольшой ехе (300к) и большой по сравнению с ним архив - 3Гб. Но тут подумал, что, возможно, это идет какая-то предраспаковочная подготовка, типа allocating memory или типа того.

Всего записей: 180 | Зарегистр. 05-09-2008 | Отправлено: 12:30 14-07-2009
Victor_Dobrov



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Bulat_Ziganshin

Цитата:
событие 'progress' передаёт в int2 размер текущего архива (самого архива!) в мб

А это значение меняется после обработки архива препроцессором (precomp)?
Если нет, то int2 можно убрать, ведь размер файла архива узнать очень просто.
 
прогрессбары и счётчики отображают процесс распаковки фриарком в %tempfile%, а не файлов из %tempfile% на диск.    

Цитата:
я думаю, что для полноценной реализации последнего я должен добавить процедуру, возвращающую распакованный объём данных, содержащихся в архиве.  

А когда будет сделана эта новая unarc.dll для Inno Setup?

Цитата:
и ещё - поскольку народ просит распаковку в разные папки - нельзя как-то это сделать?

Наверное, можно, попробую сделать так: подробнее.

Всего записей: 742 | Зарегистр. 27-09-2005 | Отправлено: 12:52 14-07-2009 | Исправлено: Victor_Dobrov, 13:05 14-07-2009
CTACKo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
событие progress передаёт в int2 размер текущего архива (самого архива!) в мб  
тогда тем более непонятно откуда такие цифры.  
дошло! если архив пристегнут к ехе-шнегу, то выдется ЕГО размер (т.е. всего ехе-файла), а не пристегнутого к нему архива! Думается, если пристёгивание архива к сетапу завлено фичей, то сие есть баг оной фичи.

Всего записей: 180 | Зарегистр. 05-09-2008 | Отправлено: 12:57 14-07-2009
JekaKot



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может кто-нибудь посоветовать, КАК можно восстановить битый файл?
Скачан самораспаковывающийся архив (...sfx.exe) FreeArc (как потом оказалось). При запуске предлагает распаковать содержимое, а дальше - "фиг вам, называется" - "arhive data corrupted"... (Действительно, MD5 скачанного файла не совпадает с эталонным значением на сайте). Информация для восстановления отсутствует... Торрентов не нашел...
 
Это неизлечимо?
 
(663 метра перекачивать - мало приятного, особенно с "народа" - обрывы закачки каждые 20-30 Mb, потому файл и побился...)
 
Добавлено
 
по моему, можно попробовать так: разбить рабочий и битый файлы на части (например по 1 Mb), посчитать MD5 каждой части и сравнить их. При "неправильной" MD5 части заменить на "правильную" часть из рабочего файла. Если память не изменяет, даже программки для автоматизации этой рутины были... Дело за малым - найти тех кто скачал рабочий файл и извращаться...

Всего записей: 2697 | Зарегистр. 10-03-2006 | Отправлено: 16:28 14-07-2009
Bulat_Ziganshin

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Наконец, я добавил в http://writer.zoho.com/public/bulat_ziganshin/Untitled картинки от slech (оригиналы на http://rapidshare.com/files/255486841/2.arc.html )
 
Добавлено:
JekaKot
увы, ничего прибавить не могу. опция -kb не стирает при распаковке сбойные файлы, но я так понимаю, тебе не это нужно
 
если бы товарищи добавили хотя бы 60 кб защитной информации, то всё восстановилось бы на автомате

Всего записей: 3401 | Зарегистр. 13-08-2007 | Отправлено: 17:00 14-07-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

Компьютерный форум Ru.Board » Компьютеры » Программы » Закладки » FreeArc: бесплатный open-source архиватор - Часть 2
Widok (07-09-2009 19:15): Лимит страниц. Продолжаем здесь.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru