Перемещение папки, если папка с таким именем уже существует

Вам не хватает чего-то в Far? Вы считаете, что вашу идею стоит услышать? Пишите сюда.
LAT
Posts: 343
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 22 times
Been thanked: 39 times

Re: Перемещение папки, если папка с таким именем уже существ

Post by LAT »

Latest post of the previous page:

John Doe wrote:Существуют ли файлменеджер, или консольная утилита, работающие именно так?
Насчет файл-менеджеров и утилит - не знаю, юзаю только FAR.
John Doe wrote:При копировании нескольких файлов завершающий слеш помогает определить, что назначение - папка, а не файл.
Различать наличие/отсутствие слеша в других случаях - идея сомнительная.
В FAR'е при копировании файла даже без завершающего слеша производится копирование в папку (например, нахожусь в папке C:\A, копирую файлы 1.txt, 2.txt, указываю в диалоге C:\B - получаю файлы C:\B\1.txt, C:\B\2.txt, точно так же, как и при указании C:\B\)
John Doe wrote:Может лучше написать макрос?
Я уже начал было писать макрос. Но обнаружил, что в момент подтверждения копирования я могу изменить только "куда копировать". При этом подобрать значение "куда копировать", чтобы копирование производилось, как хочется, не удалось. Получается, в момент подтверждения нужно:
а) определить, что копируется/переносится папка (вроде бы можно, используя mf.fattr)
б) для которой указывается новое имя (вроде бы тоже можно, используя SendDlgMessage с DM_GETDIALOGINFO и DM_GETDLGITEM)
в) на пассивной панели существует такая папка (вроде бы можно, используя panel.GetPanelDirectory, mf.fexist и ранее выдранное из диалога имя)
г) найти все файлы в текущей папке (вроде можно, используя far.GetDirList)
д) подменить "что копировать" (папку) на свеженайденный набор файлов из папки
Вот с подменой "что копировать" и возникает проблема - как это сделать?

ЗЫ. Это только для одной папки, над ситуацией, когда их несколько не думал (вряд ли это мне потребуется)
ЗЗЫ. Кстати, вроде бы, в отличие от move, copy копирует файлы (но не подпапки :() внутри папки корректно
UPD. Вставил в пост цитаты, чтобы было понятно, о чем речь.
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Перемещение папки, если папка с таким именем уже существ

Post by John Doe »

"Что копировать" так просто не подменишь: придётся макросом войти в папку и выделить всё, а после перемещения ещё и удалить пустую папку.
И это не сработает если на панели активен фильтр.
LAT
Posts: 343
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 22 times
Been thanked: 39 times

Re: Перемещение папки, если папка с таким именем уже существ

Post by LAT »

Вот когда я дошел до этих рассуждений, то задумался о трудностях жизни :). До подтверждения (нажатия enter) неведомо, куда именно копируется. Получается, нужно как-то отменить текущий диалог, зайти в папку, выделить все, вновь вызвать диалог, автоматически запустить процесс копирования, вернутся в предыдущий каталог, удалить папку. И подумать, что и как делать, если будет произведена отмена копирования (например, в момент запроса о перезаписи файла/папки). О фильтрах, правда, не думал.
Из-за этого и поднял старую тему. :oops:
Хотя если разработчикам FAR'а для изменения логики копирования/перемещения нужно бороться с этими же проблемами :? ... подозреваю, вряд ли данное предложение будет реализовано :(. Но мало ли...
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: Перемещение папки, если папка с таким именем уже существ

Post by AleXH »

У меня тоже вызывает недоумение логика с "вбросом" папки внутрь при переименовании и совпадении имени с уже существующей папкой. Интуитивно ожидается именно слияние содержимого папок, с заменой совпавших файлов, не совпавшие файлы и папки кладутся рядом, для совпавших папок выполняется слияние.

Соответствие поведению архаичного move? - А оно нужно, если не интуитивно и идёт в разрез с ожидаемым поведением? - Я предпочитаю слияние.

LAT, Имхо можно сделать проще - макрос: в текущей папке создаём папку со случайным именем, затем в неё переносим исходную папку, затем переименовываем её в то имя, которое хотим, а уже затем переносим её на уровень вверх со слиянием. При отмене возвращаем папке старое имя и переносим её на уровень вверх.
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Перемещение папки, если папка с таким именем уже существ

Post by John Doe »

LAT wrote:
John Doe wrote:При копировании нескольких файлов завершающий слеш помогает определить, что назначение - папка, а не файл.
Различать наличие/отсутствие слеша в других случаях - идея сомнительная.
В FAR'е при копировании файла даже без завершающего слеша производится копирование в папку (например, нахожусь в папке C:\A, копирую файлы 1.txt, 2.txt, указываю в диалоге C:\B - получаю файлы C:\B\1.txt, C:\B\2.txt, точно так же, как и при указании C:\B\)
У нас с вами разный фар?

Code: Select all

╔══════════════════ Warning ══════════════════╗
║                    C:\B                     ║
║ Does it specify a folder name or file name? ║
╟─────────────────────────────────────────────╢
║       { Folder } [ File ] [ Cancel ]        ║
╚═════════════════════════════════════════════╝
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Перемещение папки, если папка с таким именем уже существ

Post by John Doe »

AleXH wrote:Соответствие поведению архаичного move? - А оно нужно, если не интуитивно и идёт в разрез с ожидаемым поведением?
Всё зависит как определить "ожидаемое поведение".
В данном случае поведение фара ожидаемо соответствует поведению стандартной команды ОС.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: Перемещение папки, если папка с таким именем уже существ

Post by AleXH »

Если с панели на панель переносится папка с таким же именем, то выполняется (сейчас) слияние - и это правильно. Тогда почему переименование папки на одной и той же панели в тоже имя не должно выполнять слияние? - Мы в Фар или где? Почему тогда находясь в Фар, мы руководствуемся поведением ОС, которое к тому же алогичное? Имхо правила текущего приложения приоритетнее - нужно поведение как в ОС? - юзаем проводник. Хотим по человечески? - юзаем Фар. Если когда-то сделали криво, теперь будем это поддерживать? Почему не сделать лучше?
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Перемещение папки, если папка с таким именем уже существ

Post by DrKnS »

Описанная ситуация не имеет однозначно верного решения, поэтому логично будет перенести ответственность на пользователя переспрашиванием подобному выше:

обнаружена коллизия, что делать?
[ Класть внутрь ] [ Слить вместе ]
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Перемещение папки, если папка с таким именем уже существ

Post by John Doe »

AleXH wrote:Если с панели на панель переносится папка с таким же именем, то выполняется (сейчас) слияние - и это правильно.
Вообще-то это немного другой случай, не равноценный тому, что рассматривался выше.
- move в данном случае откажется переносить
- проводник спросит подтверждение.
AleXH wrote:Почему тогда находясь в Фар, мы руководствуемся поведением ОС
А чем же ещё. Логика у всех почему-то разная.
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Перемещение папки, если папка с таким именем уже существ

Post by John Doe »

DrKnS wrote:Описанная ситуация не имеет однозначно верного решения, поэтому логично будет перенести ответственность на пользователя переспрашиванием подобному выше:

обнаружена коллизия, что делать?
[ Класть внутрь ] [ Слить вместе ]
...И предусмотреть отключение такого подтверждения.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: Перемещение папки, если папка с таким именем уже существ

Post by AleXH »

[ Положить вовнутрь ] [ Выполнить слияние ] [ Класть вовнутрь всегда ] [ Выполнять слияние всегда ]. Активно по умолчанию первое, как реверанс в сторону ОС.

Только предусмотреть, чтобы в настройках можно было указать поведение по умолчанию, которое будет действовать при отключенном диалоге.
Last edited by AleXH on Thu 15 May, 2014 10:22, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Перемещение папки, если папка с таким именем уже существ

Post by John Doe »

AleXH
А в случае, который вы описали выше, тоже нужно подтверждение?
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: Перемещение папки, если папка с таким именем уже существ

Post by AleXH »

Конечно, поведение должно быть однородным.
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Перемещение папки, если папка с таким именем уже существ

Post by John Doe »

Разнобой будет, т.к. случай это другой, и очевидно что вовнутрь класть тут не надо никогда.
Но вопрос о слиянии имеет смысл.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: Перемещение папки, если папка с таким именем уже существ

Post by AleXH »

Ещё со времён NC/VC переименование ассоциировано с переносом, т.е. воспринимается (по крайней мере мною) как одно и то же действие, поэтому когда я выполняю переименование папки в уже существующую, то я ожидаю слияние контента. Имхо нелогично, что при переименовании в несовпадающее имя, папка остаётся на том же уровне, а при совпадении помещается вовнутрь - папка должна остаться на прежнем уровне, а их содержимое объединиться. Почему Майкрософт решил иначе? - Возможно опасался анафемы со стороны невнимательных пользователей, так как операции обратной слиянию нет.

В принципе, [ Класть вовнутрь всегда ] [ Выполнять слияние всегда ] умозрительно, так как на практике я как-то не представляю их необходимость. Поэтому [ Положить вовнутрь ] и [ Выполнить слияние ] будет достаточным. Подразумевается, что "выполнить слияние", выполняет его на всех подуровнях вложенности.
Last edited by AleXH on Thu 15 May, 2014 11:12, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Перемещение папки, если папка с таким именем уже существ

Post by John Doe »

AleXH wrote:Ещё со времён NC/VC [...] когда я выполняю переименование папки в уже существующую, то я ожидаю слияние контента.
Правильно ли я понял, что ещё со времён NC/VC ваши ожидания не оправдываются? Или в фаре поведение отличается от NC/VC?

P.S
Моё последнее утверждение вы не прокомментировали.
Post Reply

Return to “Предложения и идеи”