Это не всегда можно сделать - не все архиваторы ведь возвращают такую информацию. Но 7zip, судя по плагину 7zip0.4.8, возвращает.vserd писал(а):Покажи мне как можно получить размер сжатого файла
MultiArc
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
2vserd
WDX-плагин-request тебе:
используя текущий файл multiarc.ini выдать по файлу, будет ли он рассмотрен мультиарком (передастся ли он архиватору), и если будет, то какая именно секция сработает и какая именно позиция из idpos даёт результат первой.
Также полезно узнавать, какая строка (задаваемой в настройках длины) находится по такому-то смещению (по колонке на каждое), а также предыдущие/следующие 4 (или тоже в настройках) байта.
Число смещений можно ограничить 20 (т.е. всего 60 возможных значений).
Даже имхо прошу много, но и первой части будет достаточно. Возможно, для создания основной части плагина достаточно будет копипаста из кода самого мультиарка
WDX-плагин-request тебе:
используя текущий файл multiarc.ini выдать по файлу, будет ли он рассмотрен мультиарком (передастся ли он архиватору), и если будет, то какая именно секция сработает и какая именно позиция из idpos даёт результат первой.
Также полезно узнавать, какая строка (задаваемой в настройках длины) находится по такому-то смещению (по колонке на каждое), а также предыдущие/следующие 4 (или тоже в настройках) байта.
Число смещений можно ограничить 20 (т.е. всего 60 возможных значений).
Даже имхо прошу много, но и первой части будет достаточно. Возможно, для создания основной части плагина достаточно будет копипаста из кода самого мультиарка
Первое:
нужно просто парсить секции мультиарка и искать, какая из них сработает на данный файл (это же WDX плагин => три поля: название секции, id, которую нашли в файле, и idpos, начиная с которой в файле идёт эта найденная id).
Что непонятно?
Второе:
берётся файл, открывается на чтение и смотрим на строку длины xxx по смещению yyy, где xxx и yyy берутся из настроек самого плагина (=ini). Т.е. здесь файл multiarc.ini не задействован.
нужно просто парсить секции мультиарка и искать, какая из них сработает на данный файл (это же WDX плагин => три поля: название секции, id, которую нашли в файле, и idpos, начиная с которой в файле идёт эта найденная id).
Что непонятно?
Второе:
берётся файл, открывается на чтение и смотрим на строку длины xxx по смещению yyy, где xxx и yyy берутся из настроек самого плагина (=ini). Т.е. здесь файл multiarc.ini не задействован.
Предлагаю добавить регэкспы для распознавания ID. В нынешних аддонах начальные части часто совпадают...
Сейчас, например, так:
А будет так:
В кавычках - то, что должно передаться процедуре парсинга регэкспа.
Сильно убыстрит поиск. И упростит запись для тех, кто имеет должную сноровку.
Сейчас, например, так:
Код: Выделить всё
ID=49 6E 6E 6F 20 53 65 74 75 70 20 53 65 74 75 70 20 44 61 74 61 20 28 33 2E 30 2E 31 29 00, 49 6E 6E 6F 20 53 65 74 75 70 20 53 65 74 75 70 20 44 61 74 61 20 28 33 2E 30 2E 33 29 00, 49 6E 6E 6F 20 53 65 74 75 70 20 53 65 74 75 70 20 44 61 74 61 20 28 33 2E 30 2E 35 29 00, 49 6E 6E 6F 20 53 65 74 75 70 20 45 78 74 65 6E 73 69 6F 6E 73 20 53 65 74 75 70 20 44 61 74 61 20 28 33
;ID="Inno Setup Setup Data (3.0.1) , Inno Setup Setup Data (3.0.3) , Inno Setup Setup Data (3.0.5) , Inno Setup Extensions Setup Data (3"Код: Выделить всё
ID=49 6E 6E 6F 20 53 65 74 75 70 20 (53 65 74 75 70 20 44 61 74 61 20 28 33 2E 30 2E (31|33|35) 29|45 78 74 65 6E 73 69 6F 6E 73 20 53 65 74 75 70 20 44 61 74 61 20 28 33)
;ID="Inno Setup (Setup Data \(3.0.(1|3|5)\)|Extensions Setup Data \(3)"Сильно убыстрит поиск. И упростит запись для тех, кто имеет должную сноровку.
Я надеюсь, что ты сам не начнёшь их добавлять, а возьмёшь библиотеку какую-нибудь. А потом просто: если символ из ID в регэкспах должен иметь перед собой бэкслэш (как скобки в моём примере; ещё и точки туда надо, т.е пример у меня не корректный), то в новую строку добавляются два символа - \ и сам символ. Если не должен, то он идёт в новую строку в одиночестве. Выглядит всё просто.
Поподробнее, пожалуйста. 
Неужели нельзя из двоичного файла скопировать в строку длины, скажем, 50 нужные символы и работать со строкой? Можно даже запретить в регэкспах использование +, * и т.п. и тогда необходимая длина высчитается точно (тока парсить самому придётся, чтобы длину посчитать). Или это число (50) в каждой секции задавать...
Неужели нельзя из двоичного файла скопировать в строку длины, скажем, 50 нужные символы и работать со строкой? Можно даже запретить в регэкспах использование +, * и т.п. и тогда необходимая длина высчитается точно (тока парсить самому придётся, чтобы длину посчитать). Или это число (50) в каждой секции задавать...