Страница 13 из 32

Добавлено: Вт июн 25, 2013 00:21
Mellomann
MVV писал(а):количество 100-наносекундных интервалов дробной части секунды, делённое на 10000
Не совсем понял. Подразумевается интервал не 0...59 а 0...999 с ходом в 1000/60?
MVV писал(а):unrar.exe ж можно подправить и перекомпилить
Задолбаешься под каждую новую обновляться.
MVV писал(а):Вот, ключ ls выдает листинг с секундами.
Пасиб, затестим.

Добавлено спустя 43 минуты:

Тестовый архив - http://rghost.ru/46994511

Имею сейчас такой конфиг

Код: Выделить всё

[RAR5]
ID=52 61 72 21 
IDPos=<SeekID>
SkipSfxHeader=1 
Extension=wr5, rar5
Description=RAR 5.x
;Archiver=RAR5\rar.exe
Archiver=RAR5\rar64.exe
BatchUnpack=1
Debug=0
Start="----------- ---------  -------- -----  ----"
End="----------- ---------  -------- -----  ----"
Format0="    aaaaaaa +z+ dd-tt-yy hh:mm +n++"
List=%P l -- %AQA
Extract= %P e -y -scO {%S} -- %AQA @%LQ 
ExtractWithPath=%P x -y -scO {%S} -- %AQA @%LQ
Test=%P t -y -scO {%S} -- %AQA
Delete=%P d -r -y -scO {%S} -- %AQA @%LQ
Add=%P a -y -ma -md128m -ed -oi:1048576 -s -t -scO {%S} %AQA @%LQ
Move=%P m -y -ma -md128m -ed -oi:1048576 -s -t -scO {%S} %AQA @%LQ
SkipLIST=1
Выводит rar.exe:

Код: Выделить всё

Архив: e:\RAR5TEST\1.wr5
Детали: RAR 5

   Атрибуты    Размер      Дата Время  Имя
----------- ---------  -------- -----  ----
    .CA.... 17179869696  24-06-13 20:42  16384.vhd.fat
    .CA.... 34359738880  24-06-13 20:49  32768.vhd.fat
----------- ---------  -------- -----  ----
          51539608576                  2
Вижу такое:
Изображение

С аналогичным rar4 архивом, открытым через 7z (у меня повешено на расширение 7zm) - такая же ерунда.
Конфиг 7z:

Код: Выделить всё

[7zip_x32_C]
Description=7-Zip_x32_CP
Archiver=%COMMANDER_PATH%\Plugins\wcx\Total7zip\7z-x32\7z.exe
Extension=7zm, lzma, xz
;ID=37 7A BC AF
IDPos=0x0, <seekid>
BatchUnpack=1
Start="^-------------------"
End="^-------------------"
Format0="yyyy-tt-dd hh:mm:ss aaaaa +z+ +p+ +n++"
List="ConPaste.exe /c%AWQ /p"Введите пароль к архиву:" "Enter password" %PQA l {%S} %AQA" 
Extract="ConPaste.exe /s /h%AQ /c%AWQ /p"Введите пароль к архиву:" "Enter password" %PQA e -y {%S} -scsWIN -- %AQA @%LQA" 
ExtractWithPath="ConPaste.exe /s /h%AQ /c%AWQ /p"Введите пароль к архиву:" "Enter password" %PQA x -y {%S} -scsWIN -- %AQA @%LQA" 
Test="ConPaste.exe /s /h%AQ /c%AWQ /p"Введите пароль к архиву:" "Enter password" %PQA t -y {%S} %AQA" 
Delete="ConPaste.exe /s /h%AQ /c%AWQ /p"Введите пароль к архиву:" "Enter password" %PQA d -w%LQPA -y -r {%S} -scsWIN -- %AQA @%LQA"
Add=%P a -y {%S} %AQA -scsdos @%LQ
Move=%P u -y {%S} %AQA -scsdos @%LQ
SkipLIST=1
AskMode=2
AskHistory0=-mx=0
AskHistory1=-mx=9
AskHistory2=-mx=9 -mf=delta
AskHistory3=-mx=9 -mf=delta:4
AskHistory4=-m0=delta:2 -m1=delta:2 -m2=lzma:fb273
Чистый 7z через плагин Total7zip (расш. 7zt) - всё отлично.

Добавлено спустя 8 минут:

Предыдущая 1.4.1.7 (она же х64) выводит 512 байт вместо 2 гигов:
1.4.1.7 x32 писал(а):16384.vhd.fat 512 ? -a--
32768.vhd.fat 512 ? -a--
1.4.1.7 x64 писал(а):16384.vhd.fat 512 ? -a--
32768.vhd.fat 512 ? -a--
1.4.1.7 x32 MVV1 писал(а):16384.vhd.fat 2 147 483 647 ? -a--
32768.vhd.fat 2 147 483 647 ? -a--
1.4.1.7 x64 MVV1 писал(а):16384.vhd.fat 2 147 483 647 ? -a--
32768.vhd.fat 2 147 483 647 ? -a--

Добавлено: Вт июн 25, 2013 10:25
MVV
Не совсем понял. Подразумевается интервал не 0...59 а 0...999 с ходом в 1000/60?
Я не понял сам, что там получается. По логике, число 100-наносекундных интервалов, деленное на 10000, должно совпадать с точностью до округления с числом миллисекунд, т.е. 1000 должно совпадать с 60 секундами, но там совершенно иные числа. Для твоего архива там числа 470 и 271 при количестве секунд 44 и 25 соответственно. Если бы это были миллисекунды, числа должны были бы быть 733 и 417...
Задолбаешься под каждую новую обновляться.
К слову, это необязательно. Эта бета вроде справляется с отображением содержимого, можно оставить этот экзешник для чтения содержимого архивов (переименовать и вызывать чисто из команды List), а обновленную использовать для распаковки. И то только в случае, если эта будет плохо справляться с распаковкой.
Тестовый архив - http://rghost.ru/46994511
Не ожидал, что при сжатии файлов, забитых нулями, получатся такие архивы, которые потом еще и пережать можно. :D

Думаю, проблема в том, что размер файлов больше 4 ГБ, поэтому в 32-битную переменную такие числа уже не умещаются, вот и происходит потеря разрядов. Что примечательно, похоже, в 2010 студии функция преобразования при переполнении возвращает максимально возможное число вместо младшей части числа, как было в старой версии.

Добавлено спустя 58 минут:

Вот обновленная версия мультиарка с поддержкой 64-битных размеров:

MVV Build #2

Добавлено: Вт июн 25, 2013 18:45
Mellomann
MVV писал(а):архивы, которые потом еще и пережать можно
Это всё только от проблемы "слишком" маленького словаря и большого файла. Тогда просто получаются дубли данных, которые повторно можно сократить.
Пруф: http://rghost.ru/47010591
MVV писал(а):обновленная версия
Скормил тоталу, пока полёт нормальный.

Добавлено спустя 4 минуты:

Вот бы архиваторописатели добавили многопроходное и многоразовое сжатие (как раз для таких случаев). По аналогии с видеокодеками. :idea:

Добавлено: Вт июн 25, 2013 22:02
MVV
Думаю, в большинстве случаев толку от многопроходности не будет, ведь мало кто сжимает файлы, забитые нулями. :D

Добавлено: Чт июн 27, 2013 21:19
Mellomann
Так вроде бы нормально работает, багов не добавилось.
Можно выкладывать на сайте.

Добавлено: Пт июн 28, 2013 13:20
MVV
Я эту версию никуда выкладывать не планирую. Не могу поручиться за отсутствие багов в тех исходниках, с которых я её собирал (тем более, я лично их там находил), и не имею желания заниматься их исправлением.

Добавлено: Пт июн 28, 2013 19:37
Mellomann
Так увлёкся проверкой размеров, что только сейчас заметил...
Даты-времени нет...

Изображение

Изображение

Конфиг:

Код: Выделить всё

[RAR5]
ID=52 61 72 21 
IDPos=<SeekID>
SkipSfxHeader=1 
Extension=wr5, rar5
Description=RAR 5.x
;Archiver=RAR5\rar.exe
Archiver=RAR5\rar64.exe
BatchUnpack=1
Debug=0
Start="----------- ---------  -------- -----  ----"
End="----------- ---------  -------- -----  ----"
Format0="    aaaaaaa +z+ dd-tt-yy hh:mm +n++"
List=%P l -- %AQA
Extract= %P e -y -scO {%S} -- %AQA @%LQ 
ExtractWithPath=%P x -y -scO {%S} -- %AQA @%LQ
Test=%P t -y -scO {%S} -- %AQA
Delete=%P d -r -y -scO {%S} -- %AQA @%LQ
Add=%P a -y -ma -md128m -ed -oi:1048576 -s -t -scO {%S} %AQA @%LQ
Move=%P m -y -ma -md128m -ed -oi:1048576 -s -t -scO {%S} %AQA @%LQ
SkipLIST=1
Что неправильно?

Добавлено спустя 8 минут:

Странно, но время работает только если два пробела поставить перед "dd-tt-yy" и вместо плюс+пробел перед n++ влепить тоже два пробела:

Код: Выделить всё

Format0="    aaaaaaa +z+  dd-tt-yy hh:mm  n++"

Добавлено: Пт июн 28, 2013 21:46
MVV
Странно, но время работает только если два пробела поставить перед "dd-tt-yy" и вместо плюс+пробел перед n++ влепить тоже два пробела:
Когда число пробелов фиксировано, ты можешь сам их поставить нужное количество. Или поставить один пробел и плюс после него, чтобы пропускать идущие подряд пробелы:
Format0=" aaaaaaa +z+  dd-tt-yy hh:mm  n++"
Format0=" aaaaaaa +z+ +dd-tt-yy hh:mm +n++"
Плюс после идентификатора поля говорит, что длина поля переменная, к длине пробела после он не относится. А плюс после пробела - что длина пробела переменная.

Добавлено: Ср июл 03, 2013 20:43
Mellomann
MVV писал(а):Плюс после идентификатора поля говорит, что длина поля переменная, к длине пробела после он не относится
т.е. плюсы можно ставить только после букв, а после пробела - нет?

Добавлено: Ср июл 03, 2013 22:05
MVV
MVV писал(а):Или поставить один пробел и плюс после него, чтобы пропускать идущие подряд пробелы
MVV писал(а):Плюс после идентификатора поля говорит, что длина поля переменная, к длине пробела после он не относится. А плюс после пробела - что длина пробела переменная.
Читаем внимательно. :D Всё ведь очень просто: после чего плюс стоит, то он и удлинняет, как в регулярных выражениях.

А в цитатах я специально выделил последовательности символов, описывающие целые поля (разными цветами) и целые пробелы (подчеркиваниями), включая плюсы, относящиеся к тем или иным.

Добавлено: Вс авг 04, 2013 18:43
Lisabon
MVV

Есть проблема с MVV Build #2.

Имеем Total Commander v8.01 32-битный, плагин MultiArc (MVV Build #2), дистрибутив с cab-архивами (_http://rghost.ru/47889005), файл настроек (_http://rghost.ru/47889045).

При входе в CAB-архив Data1.cab, Data2.cab или файл Data1.hdr, получаю ошибку:

ИзображениеИзображение

Можно ли сие поправить?

Возвращаю не модифицированный вами плагин, тобишь оригинал, и в эти файлы вхожу и модифицирую без проблем.

Добавлено: Вс авг 04, 2013 19:03
MVV
Было бы вообще замечательно, если бы архиватор Install Shield (из сообщения об ошибке выполнения команды делаю вывод, что используется I6Comp.exe) тоже прилагался.

Впрочем, на какую-то ошибку я наткнулся, скачав первый найденный I6Comp.exe, разберусь. Но твой I6Comp.exe бы на всякий случай пригодился.

Добавлено: Вс авг 04, 2013 19:19
Lisabon
MVV писал(а):Но твой I6Comp.exe бы на всякий случай пригодился.
Вот I6Comp.exe

Добавлено: Вс авг 04, 2013 20:43
MVV
Ага, совпал с тем, что я нашёл. Ошибка возникает при попытке анализа строки:

Код: Выделить всё

tt-dd-yyyy hh:mm zzzzzzzzzz aaaa pppppppppp      nnnnnnnnnnnnnnnnnnnnnnnn
Version 0.2 -] fOSSiL & Morlac - 2000 [-
Эта строка "левая", не содержит нужных данных, поэтому желательно такие строки отсекать. Если I6Comp.exe всегда эту строку пишет первой, нужно её указать в аддоне:

Код: Выделить всё

Start=Version
Тогда при анализе вывода I6Comp.exe эта строка будет пропускаться.

Ошибку анализа я исправлю. А строка, похоже, выводится в stderr (поток вывода ошибок) и может быть в любом месте основного вывода (в консоли выводится первой, в мультиарке при отладке у меня - последней)... Рекомендую забить её в экзешнике нулевыми байтами с помощью хекс-редактора, чтобы она не выводилась, а то вдруг ещё в середине нужной строки влезет, тогда точно чего-нибудь да испортит.

Странно, что с обычным мультиарком ошибки не видно, т.к. происходит банальный выход за конец строки (на паттерне pppppppppp), т.к. строка "левая" и совершенно не подходит под шаблон, а мультиарк передвигается по строке тупо прыжками.

Добавлено спустя 18 минут:

Ага, в исходниках I6Comp.exe косяк:

Код: Выделить всё

	if (optPrintAll)
		fprintf(stderr, "InstallShield 6.x Cabinet Util\n");
		fprintf(stderr, "Version 0.2 -] fOSSiL & Morlac - 2000 [-\n");
По логике, нужно было заключить обе команды вывода в блок { }, тогда они бы обе отключались ключом -o, а так им отключается только первая, а вторая срабатывает всегда. В любом случае, упомянутое выше решение с забиванием нулями поможет.

Добавлено спустя 57 минут:

Выложил обновленную версию, прошу потестировать:

MVV Build #3

В этой версии в случае, если строка вывода заканчивается раньше, чем форматная строка, строка вывода считается "левой", и форматная строка применяется к следующей строке вывода.

Добавлено: Вс авг 04, 2013 21:12
Lisabon
MVV
Выложил обновленную версию, прошу потестировать:

MVV Build #3
Если нулями строку "Version 0.2 -] fOSSiL & Morlac - 2000 [-" в I6Comp.exe не забивать, то при входе в архив, сам Total Commander подвисает, а если нулями строку забиваю, то в архив входит без запинки успешно.