Page 1 of 2

Ошибка при копировании файлов

Posted: Sat 26 Oct, 2019 20:04
by AHtoDISrFXZcbmens97y
Есть два файла. Первый имеет длинное имя 1234567890 , короткое имя 123456~2 . Второй имеет длинное и короткое имя 123456~1 . При копировании этих двух файлов первый автоматически меняет своё короткое имя на 123456~1 , и второй файл после этого не может скопироваться, так как "Файл уже существует". Есть ли возможность копировать короткое имя вместе с файлом и исправить данную ошибку?

Ошибка при копировании файлов

Posted: Mon 28 Oct, 2019 09:28
by Shtirla
Забавная бага, не думаю что здесь фар виноват.
использование ~ в именах не совсем корректно, это древний костыль для обхода конфликтов с длинными именами для старых ФС

как вариант xcopy /N * C:\111\222\
но с потерей длинных имен, и только если всю целевую папку перетаскивать, по отдельности точно такое же поведение

Ошибка при копировании файлов

Posted: Mon 28 Oct, 2019 09:31
by Shtirla
Еще вариант сначала копировать некорректные (потеряные) длинные имена, хотяб по наличию тильды в имени, а потом длинные

Ошибка при копировании файлов

Posted: Mon 28 Oct, 2019 10:34
by AHtoDISrFXZcbmens97y
Насчёт того, что FAR "не виноват": обычное стандартое копирование Windows (которое поместить в буфер обмена - вставить из буфера обмена) прекрасно работает с папками, в которых есть такие файлы, и не создаёт никаких ошибок (собственно, такое копирование можно делать даже находясь в FAR). Точно так же как безошибочно работает и копирование в Total commander. Так что пути решения данной проблемы, очевидно, существуют, но в FAR они не реализованы. Вот я и решил обратиться сюда: может быть кому-то захочется улучшить эту программу.

Ошибка при копировании файлов

Posted: Mon 28 Oct, 2019 11:16
by DrKnS
AHtoDISrFXZcbmens97y wrote: Mon 28 Oct, 2019 10:34обычное стандартое копирование Windows (которое поместить в буфер обмена - вставить из буфера обмена) прекрасно работает с папками, в которых есть такие файлы, и не создаёт никаких ошибок
Вы уверены? Попробуйте изменить сортировку на обратную или копировать файлы по одному - сначала длинный, потом короткий.

Ошибка при копировании файлов

Posted: Mon 28 Oct, 2019 11:43
by AHtoDISrFXZcbmens97y
Да, уверен. Более того, могу объяснить, что там происходит. При копировании файла в случае, если файл имеет точно такое же КОРОТКОЕ имя, как и файл, который уже находится в той папке, в которую копируют, но при этом ДЛИННЫЕ имена файлов разные, происходит изменение КОРОТКОГО имени того файла, который уже находится в папке - ему даётся новое имя (не ~1, а ~2), и никакой ошибки в итоге не происходит. В принципе, можно делать так. А можно просто копировать файлы вместе с их короткими именами (во всяком случае, я не вижу в этом ничего принципиально невозможного, хотя пока и не видел такого на практике).

Ошибка при копировании файлов

Posted: Mon 28 Oct, 2019 12:19
by DrKnS
AHtoDISrFXZcbmens97y wrote: Mon 28 Oct, 2019 11:43Да, уверен
Я просто понажимал CtrlC/CtrlV в Explorer, понаблюдал аналогичные диалоги "файл уже существует" и пока что уверен в обратном.
могу объяснить, что там происходит ... происходит изменение КОРОТКОГО имени
The caller of this function must have the SE_RESTORE_NAME privilege - эта роскошь по умолчанию доступна только администраторам. Если вы копируете как обычный пользователь - без обид, но, подозреваю, вы не совсем понимаете, что там происходит.

Ошибка при копировании файлов

Posted: Mon 28 Oct, 2019 13:18
by AHtoDISrFXZcbmens97y
Я вас действительно не совсем понимаю, особенно при чём тут обиды, но единственное - могу подтвердить, что я копирую-вставляю из-под администраторского аккаунта Windows XP SP3. И всё работает именно так, как я описываю. Если система видит тот конфликт коротких имён, который я описываю - она изменяет короткое имя у того файла, который уже находится в папке, в которую копируют. Ну вот даже не знаю, как вас убедить, что я вам говорю правду.

Ошибка при копировании файлов

Posted: Mon 28 Oct, 2019 15:27
by AHtoDISrFXZcbmens97y
Но что интересно - всё прекрасно работает и тогда, когда я зашёл в систему под гостевым аккаунтом. Так что почему не работает у вас - я совсем-совсем не понимаю. Видимо, какие-то особенности вашей операционной системы.

Ошибка при копировании файлов

Posted: Mon 28 Oct, 2019 17:17
by HaRT
(Выделение моё)
AHtoDISrFXZcbmens97y wrote: Mon 28 Oct, 2019 15:27 какие-то особенности вашей операционной системы
AHtoDISrFXZcbmens97y wrote: Mon 28 Oct, 2019 13:18 Windows XP SP3

Ошибка при копировании файлов

Posted: Mon 28 Oct, 2019 18:05
by zg
xp всегда вначале копирует файлы с коротким именем в котором есть тильда. если это не помогает, файл с совпадающим коротким именем переименовывается во что-то типа 1.tmp, новый файл копируется, 1.tmp переименовывается обратно. в поздних версиях это видимо убрали.

Ошибка при копировании файлов

Posted: Mon 28 Oct, 2019 18:38
by AHtoDISrFXZcbmens97y
Ну вот было бы прекрасно, если бы FAR научился делать то, что умеет делать Windows XP (и разучились делать последующие операционные системы Microsoft).

Ошибка при копировании файлов

Posted: Wed 30 Oct, 2019 06:46
by Shtirla
Ну если в ХР все норм, попробуйте использовать "системную функцию копирования" в настройках, видимо поэтому тотал норм работает, они не заморачивались такими мелочами как собственная обработка копирования.

вообще не понятно, как такой функционал мог бы понадобиться, скорее редкое исключение, ну или возможно какое то вирусописательство)

но если в 7ке+ изменение коротких имен только с повышением привилегий, то кроме костыля ничего нормального не получится.
Конфликт то не изза того что фар пишет неправильное короткое имя, а изза того что вы передаете длинное имя, система САМА! дает ему короткое на основании длинного, т.е. генерирует по определенным правилам, а когда вы отдаете второй файл в ту же папку, он уже имеет такое же имя, и даже если система и пытается генерировать, то по этим правилам генерируется то же самое имя. Вот и конфликт, это к мелкомягким.

попробуйте то же реализовать например батником любым, и поймете что не так все просто.

Хотя макрос или плагин для работы с короткими именами наверное имел бы академический интерес.

Ошибка при копировании файлов

Posted: Wed 30 Oct, 2019 10:37
by AHtoDISrFXZcbmens97y
а) включение "системной функции копирования" никак эту проблему не убирает. Единственный способ копирования в FAR - это копировать и вставлять через буфер, что внутри FARa тоже можно делать (кстати, есть даже плагин с макросом, которые облегчают всё это). Так что катастрофической проблемы у меня никакой нет, во всяком случае, пока использовать Windows XP. А эту тему я создал скорее для того, чтобы разработчики обратили на этот вопрос внимание. И да, в более новых операционных системах эту проблему, как видим, решить намного сложнее.
б) Данная проблема, как по мне, может встречаться не только у меня (и я сам её не выдумал, она возникла сама по себе). Никакие вирусы тут абсолютно ни при чём - есть множество разных программ, которые сами сохраняют файлы под короткими именами (т.е. убирают длинные имена вовсе), а потом в одной и той же папке оказываются вот такие вот файлы, которые в дальнейшем конфликтуют друг с другом при копировании.
в) пожалуйста, перечитайте то, что написал zg. По-моему, он прекрасно описал алгоритм, как Windows XP решает эту проблему без всякого повышения привилегий (и да, всё это работает и под гостевым аккаунтом Windows XP)

Ошибка при копировании файлов

Posted: Wed 30 Oct, 2019 13:14
by HaRT