Копирование файлов с временной панели с сохранение структуры папок
Posted: Tue 24 Apr, 2018 20:12
by buniak_a_h
Предлагаю небольшой макрос, копирующий файлы с временной панели, открытой на активной панели (извините за тавтологию) в директорий, открытый на неактивной панели. Макрос "рассовывает" копируемые файлы по подкаталогам в соответствии с их расположением в исходной структуре (относительно "корневой" папки). Особенно полезна для копирования результатов поиска файлов, помещённых на временную панель.
В другом обсуждении упомянул эту задачу, и мне сказали, что может быть очень полезна.
Макрос повешен на CtrlAltF5
Макрос не обрабатывает каталоги (только файлы)
Макрос не запрашивает путь к приёмному каталогу. Строго в каталог неактивной панели.
При наличии в приемном каталоге файла запрашивает, что делать. Варианты:
- переписать \ как для одного файла,
- пропустить / так и для всех оставшихся
- обновить - переписать только если исходный файл новее приёмного.
Действует на все оставшиеся
- прекратить копирование.
Версия 2
Первая версия работала только во временной панели, созданной плагином TempPanel. Во вторую версию добавлены временные панели от плагинов LuaFAR Search и RESearch
Версия 3
По рекомендации John Doe заменил проверку GUID-а на флаг файловой панели
Добавил проверку, что исходный файл - реальный, т.к. TmpPanel в режиме :any может отображать на панели что угодно
Сделан обход ошибки ФАРа в функции Panel.Select для гашения отметок
Версия 4
Реализована минимальная визуализация (вывожу имя копируемого файла и имя целевой папки, а также обновляю содержимое пассивной панели)
Предусмотрено прерывание копирования по [Esc]. Увы, прерывание копирования текущего файла не предусмотрено.
Версия 1.5.3
Исправлен вызов panel.GetPanelInfo в связи с изменившимся интерфейсом.
Опубликовал версию 1.5.2 в связи с изменениями в модулях
Копирование файлов с временной панели с сохранение структуры папок
Posted: Wed 25 Apr, 2018 16:02
by buniak_a_h
Latest post of the previous page:
Shmuel,
Shmuel wrote: ↑Wed 25 Apr, 2018 15:26
пытаюсь ответить, вижу
"Некоторые пользователи не могут быть добавлены, так как они отключили получение личных сообщений."
Я сознательно не отключал (если только случайно, или кот что-то нажал).
Нашёл какую-то настройку (игнорировать, если папка заполнена), но никак не думал, что она может быть заполнена. Изменил, проверить не могу.
Shmuel wrote: ↑Wed 25 Apr, 2018 15:26
репорт <...> - нормальный (с учётом того, что это первый ваш репорт)
Не первый. Про arclite просил сделать распаковку по маске... Давно было, забыл, как делается.
Копирование файлов с временной панели с сохранение структуры папок
Posted: Wed 25 Apr, 2018 16:04
by buniak_a_h
Сделал 3-ю версию макроса. Changelog:
Версия 2
Первая версия работала только во временной панели, созданной плагином TempPanel. Во вторую версию добавлены временные панели от плагинов LuaFAR Search и RESearch
Версия 3
По рекомендации John Doe заменил проверку GUID-а на флаг файловой панели
Добавил проверку, что исходный файл - реальный, т.к. TmpPanel в режиме :any может отображать на панели что угодно
Сделан обход ошибки ФАРа в функции Panel.Select для гашения отметок
Копирование файлов с временной панели с сохранение структуры папок
Posted: Thu 10 May, 2018 07:12
by buniak_a_h
Обновил скрипт в первом посте темы. Добавлена простейшая визуализация и прерывание по [Esc].
Наткнулся на проблему копирования больших файлов по сети. Пришлось делать и визуализацию, и прерывание.
Господа гуру! Может, кто читает эту тему и сможет ответить на "смежный" вопрос: есть ли возможность как-то визуализировать в макросе процесс копирования одного файла (без программирования самого процесса копирования)? Варианты:
(а) вызов внутренней процедуры копирования файла ФАРа с параметрами (Source, Destination, RewriteMode) и кодом возврата
(б) может, посоветуете плагин с аналогичными возможностями
Просто вызов диалога копирования с последовательностью Keys не очень подходит: не определить, что копирование было прервано. Подозреваю, что меня бы устроила export.GetFiles, но примера использования не нашёл.
Копирование файлов с временной панели с сохранение структуры папок
Posted: Thu 10 May, 2018 11:57
by HaRT
buniak_a_h wrote: ↑Thu 10 May, 2018 07:12
вызов диалога копирования с последовательностью Keys не очень подходит: не определить, что копирование было прервано
Я не гуру, но подозреваю, что прерывание копирования в стандартном диалоге можно отловить, повесив обработчик на соответствующее диалоговое событие. Костыль, конечно, но всё же лучше, чем ничего. Вот тут есть некий пример обработчика (правда, инициализации диалога, притом на Moon Script): viewtopic.php?p=146816#p146816.
Копирование файлов с временной панели с сохранение структуры папок
Posted: Thu 10 May, 2018 12:21
by John Doe
buniak_a_h wrote: ↑Thu 10 May, 2018 07:12
не определить, что копирование было прервано.
Проверить существование целевого файла?
Копирование файлов с временной панели с сохранение структуры папок
Posted: Thu 10 May, 2018 12:27
by buniak_a_h
Спасибо всем. Метод реализуемый, но какой-то... чрезвычайный. Через выю, короче. Не люблю я клавиатурные макросы вперемешку с процедурами на языках программирования. Подожду ещё; если никто не присоветует - буду думать в направлении клавимакроса...
Копирование файлов с временной панели с сохранение структуры папок
Posted: Thu 10 May, 2018 12:39
by John Doe
Альтернативно, можно было бы целиком переложить копирование на какой-либо сторонний компонент (xcopy, robocopy, fastcopy, teracopy, etc), а функции макроса ограничить подготовкой файла с заданием.
Копирование файлов с временной панели с сохранение структуры папок
Posted: Thu 10 May, 2018 13:57
by zg
CopyFileEx есть же. там может в самом начеале чуть посложнее, и то не факт, но в перспективе — самый нормальный метод.
Копирование файлов с временной панели с сохранение структуры папок
1. Уж не стал писать... У меня CopyFileEx - персона non grata. Несколько раз копирование обрывалось без всякой диагностики. Т.е. пока скопированным файлом не воспользуешься - об ошибке не узнаешь. Ошибка абсолютно случайная, устойчиво повторить не могу.
2. абсолютно не предусмотрен интерфейс для использования из скрипта. Я имею в виду - нет ни вызова нужной функции через Plugin.Call, ни через командную строку. Или есть, но в документации не описано. А значит - опять Keys...
Копирование файлов с временной панели с сохранение структуры папок
Posted: Thu 10 May, 2018 16:23
by HaRT
buniak_a_h wrote: ↑Thu 10 May, 2018 16:18
У меня CopyFileEx - персона non grata. Несколько раз копирование обрывалось без всякой диагностики.
Вы про плагин? Я подозреваю, что zg имел в виду ф-ю WinAPI.
Копирование файлов с временной панели с сохранение структуры папок
Posted: Thu 10 May, 2018 17:57
by zg
тем более плагин немного не так называется.
Копирование файлов с временной панели с сохранение структуры папок
Posted: Thu 10 May, 2018 19:11
by buniak_a_h
zg wrote: ↑Thu 10 May, 2018 17:57
тем более плагин немного не так называется.
Да, извините, плагин - FileCopyEx.
HaRT wrote: ↑Thu 10 May, 2018 16:23
zg имел в виду ф-ю WinAPI
И что мне с ней делать? писать вставку на СИ для вызова функции? Я этим не занимался пока, и не уверен, что овчинка выделки стоит. Если только написать "универсальный" макрос, вызывающий эту функцию. Для одной задачи - стрельба из пушки по воробьям. Я надеялся, что такое могло уже кому-то понадобиться, и кно-нить уже реализовал. Видимо, нет.
Копирование файлов с временной панели с сохранение структуры папок
Posted: Thu 10 May, 2018 19:31
by HaRT
buniak_a_h wrote: ↑Thu 10 May, 2018 19:11
что мне с ней делать? писать вставку на СИ для вызова функции?
Даже взял пример (копирование с удалением в корзину). Но пока не понял, как описать функцию на LUA, чтобы её можно было передать в качестве CallBack-процедуры в CopyFileEx.
Сюда на эту тему больше не пишите, а то забанят меня. И так под баном хожу...
Копирование файлов с временной панели с сохранение структуры папок
Копирование файлов с временной панели с сохранение структуры папок
Posted: Fri 30 Nov, 2018 06:44
by Shtirla
Во первых Спасибо автору ! помог решить задачку быстрее.
во вторых выкладываю модификацию текущего макроса, замена идет поиском первых слэшей в пути, а не из Panel0, ибо накиданные с разных ресурсов файлы так не копировались