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

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

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

Post 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, найти не могу.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

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

Post by DV »

Почему бы не воспользоваться консольным 7z.exe?
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

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

Post by buniak_a_h »

DV wrote: Tue 08 Aug, 2017 20:20Почему бы не воспользоваться консольным 7z.exe?
Не хотелось зависеть от того, установлен ли (и где) у клиента 7z, или нет. Кроме того, к сожалению, программы, определяющие наличие файла (mf.fexist, win.GetFileInfo) не умеют искать файл по %path%; надо самому организовывать перебор папок; мелочь, конечно, не неприятно. Это - чтобы определить, где он есть (если он внесён в path).
Обидно, что плагин это делать умеет, но то ли интерфейс не предусмотрен, то ли не задокументирован.
fps
Posts: 267
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 27 times
Been thanked: 14 times

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

Post by fps »

Если речь про zip архив, то можно распаковать файл штатными средствами windows
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

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

Post 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-клиент, кстати, редактор тоже модальный)
Last edited by buniak_a_h on Wed 09 Aug, 2017 08:11, edited 1 time in total.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

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

Post by DV »

Я бы сказал, что если у клиента уже есть FAR с каким-то определённым макросом, то 7z.exe (вместе с 7-zip.chm, 7z.dll, 7z.sfx и 7zCon.sfx) можно предоставлять клиенту таким же образом, как и макрос, - в комплекте с FAR :)
Именно так я решил для себя этот вопрос. У меня в портативной папке с FAR находятся и 7z.exe, и UnRAR.exe, и unzip.exe, и даже wget.exe.
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

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

Post 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' )
почему-то не работает, хотя введённый в командной строке - нормально. Временный каталог не создаётся. В консоль что-то выводится, но перехватить это я не смог.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

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

Post 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)
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

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

Post by buniak_a_h »

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

Return to “Нужна помощь”