Page 1 of 1

arclite: получить один файл

Posted: Sun 06 Aug, 2017 23:20
by buniak_a_h
Здравствуйте, господа.
У меня возникла необходимость "вытащить" из архива один файл. На форуме я уже нашёл, что запуск плагина arclite из макроса через Plugin.Call (или Plugin.SyncCall) невозможен. Судя по выводимому по префиксу arc: хелпу,
Распаковать архив
arc:x [-ie[:(y|n)]] [-o[:(o|s|r|a)]] [-mf[:(y|n)]] [-p:<password>] [-sd[:(a|y|n)]] [-da[:(y|n)]] <archive> ... <path>
Т.е., возможности указать один файл нет. Может быть, такая возможность есть, просто не документирована? Ведь из панели плагина можно по F5 вытащить один файл! Неужели не предусмотрено интерфейса для вызывающего макроса?
PS. Я, конечно, могу открыть на файловой панели плугинову панель со списком файлов, отметить нужные мне файлы и скопировать их (Keys"5"). Но как-то это криво...
PPS. Если такая тема уже поднималась - прошу извинить. Ищу по форумам уже часов 6, найти не могу.

arclite: получить один файл

Posted: Tue 08 Aug, 2017 20:20
by DV
Почему бы не воспользоваться консольным 7z.exe?

arclite: получить один файл

Posted: Tue 08 Aug, 2017 22:07
by buniak_a_h
DV wrote:
Tue 08 Aug, 2017 20:20
Почему бы не воспользоваться консольным 7z.exe?
Не хотелось зависеть от того, установлен ли (и где) у клиента 7z, или нет. Кроме того, к сожалению, программы, определяющие наличие файла (mf.fexist, win.GetFileInfo) не умеют искать файл по %path%; надо самому организовывать перебор папок; мелочь, конечно, не неприятно. Это - чтобы определить, где он есть (если он внесён в path).
Обидно, что плагин это делать умеет, но то ли интерфейс не предусмотрен, то ли не задокументирован.

arclite: получить один файл

Posted: Wed 09 Aug, 2017 04:38
by fps
Если речь про zip архив, то можно распаковать файл штатными средствами windows

arclite: получить один файл

Posted: Wed 09 Aug, 2017 08:09
by buniak_a_h
fps wrote:
Wed 09 Aug, 2017 04:38
Если речь про zip архив, то можно распаковать файл штатными средствами windows
  1. Речь на самом деле о chm-файле, который 7-zip прекрасно "распаковывает.
  2. Мне на самом деле надо "влезть" в hhk или hhc - индекс или оглавление. Чтобы по ключевому слову найти название html и далее вызвать зависимую справку. В принципе, я эту задачу решил (см. Макрос, реализующий функции плагина Active-Help). За одним исключением: не работает из модального редактора (а значит, из редактора, вызванного из архива - независимо, из arclite или из MultiArc).
    Это, кстати, ещё одно неприятное ограничение этих плагинов. И не говорите, что "так надо" для безопасности: аналогичная ситуация в NetBox прекрасно работает (в старом плагине FTP-клиент, кстати, редактор тоже модальный)

arclite: получить один файл

Posted: Wed 09 Aug, 2017 08:56
by DV
Я бы сказал, что если у клиента уже есть FAR с каким-то определённым макросом, то 7z.exe (вместе с 7-zip.chm, 7z.dll, 7z.sfx и 7zCon.sfx) можно предоставлять клиенту таким же образом, как и макрос, - в комплекте с FAR :)
Именно так я решил для себя этот вопрос. У меня в портативной папке с FAR находятся и 7z.exe, и UnRAR.exe, и unzip.exe, и даже wget.exe.

arclite: получить один файл

Posted: Wed 09 Aug, 2017 09:27
by buniak_a_h
DV wrote:
Wed 09 Aug, 2017 08:56
решил для себя
Ключевое слово "для себя"... Я не могу потребовать от клиента установки ПО от третьих лиц.
На самом деле это - не единственная проблема. Просто пока не стал разбираться. Код

Code: Select all

local tmpdir = os.tmpname()
win.ShellExecute(nil, nil, '7z.exe', 'e -o'..mf.env('temp')..tmpdir..' '..fn..' *.hhc *.hhk' )
почему-то не работает, хотя введённый в командной строке - нормально. Временный каталог не создаётся. В консоль что-то выводится, но перехватить это я не смог.

arclite: получить один файл

Posted: Wed 09 Aug, 2017 10:58
by DV
Так работает:

Code: Select all

local tmpdir = os.tmpname(); 
local fn = "C:\\FAR3\\7-zip.chm"; -- full path!
local cmd = '7z.exe e "'..fn..'" -o"'..mf.env('temp')..tmpdir..'" *.hhc *.hhk'; 
win.system(cmd)

arclite: получить один файл

Posted: Wed 09 Aug, 2017 15:29
by buniak_a_h
DV wrote:
Wed 09 Aug, 2017 10:58
Так работает:
Спасибо. Если поможет решить проблему с модальным редактором - применю.