-
При копировании Windows переименовывает файл, в случае если его имя совпадает с именем присутствующего в папке файла. К примеру, если в папке есть "Файл1.txt", и мы пытаемся скопировать в нее еще один с таким же именем, второй файл будет переименован в "Копия Файл1.txt". при очередном совпадении имя будет "Копия (2) Файл1.txt" и т. д.
Как получить шаблон, по которому Windows строит новое имя файла? Мне нужно самостоятельно генерировать его с учетом языка Windows, так что варианты с FOF_RENAMEONCOLLISION или забиванием констант не подходят.
-
в Shell32.dll есть строковой ресурс 4178, выглядит похоже: Копия ()
-
Windows не переименовывает файл во время копирования
-
DVM, спасибо, но вряд ли я могу на это положиться. Нужна какая-нибудь системная функция или константа.
Игорь, что Вы имеете в виду?
-
> Игорь, что Вы имеете в виду?
Я имею в виду, что команда copy, системная функция CopyFile, проводник, если набрать в одном каталоге Copy, а в другом Paste не переименовывают файлы, если в каталоге назначения уже имеются файлы с такими же именами.
-
> DVM, спасибо, но вряд ли я могу на это положиться. Нужна
> какая-нибудь системная функция или константа.
Так я константу и привел. Функции нету, есть функция с пом которой можно достать эту строку из ресурса.
API для этой цели быть не может, ибо это функционал проводника и не обязан быть документирован. Проще взять ShFileOperation() она и скопирует с нужными именами все.
-
> Badevlad (17.10.09 15:13) [3]
Проще простого выяснить где лежит нужная строка в разных версия windows и подгружать оттуда по мере необходимости.
-
> [3] Badevlad (17.10.09 15:13)
> Нужна какая-нибудь системная функция или константа.
при первом запуски проги создаешь во временной папке файл X, потом с пом. ShFileOperation копируешь файл "в самого себя" и пом. рег. выражений и FindFirst/Next узнаешь искомую строку.
-
> Игорь Шевченко ©
> Я имею в виду, что команда copy, системная функция CopyFile,
> проводник, если набрать в одном каталоге Copy, а в другом Paste
> не переименовывают файлы, если в каталоге назначения уже имеются
> файлы с такими же именами.
Копирование и вставка через буфер в проводнике а так же использование ShFileOperation с флагом FOF_RENAMEONCOLLISION переименовывают.
> Eraser © (17.10.09 19:01) [7]
> при первом запуски проги создаешь во временной папке файл X,
> потом с пом. ShFileOperation копируешь файл "в самого себя"
> и пом. рег. выражений и FindFirst/Next узнаешь искомую строку.
Очень некрасивое решение, но единственное пока, которое может сработать. Есть, правда, нюанс: первая копия будет иметь имя "Копия Файла", а вторая — "Копия (2) Файла". Здесь могут быть свои нюансы для разных языков. В английском, например, будет "Copy of File" и "Copy (2) of File" соответственно.
Вот если бы шаблон переименования как-то более определенно получить...
-
> [8] Badevlad (18.10.09 00:25)
> Вот если бы шаблон переименования как-то более определенно
> получить...
с пом. регулярных выражений, как я и описал выше. для первой копии можно просто писать как есть.
-
> Очень некрасивое решение, но единственное пока, которое
> может сработать
Единственно верное решение - взять оттуда же откуда берет проводник. Если окажется что номер ресурса в разных версиях Win разный - значит для разных версий брать свои номера.
-
> [10] DVM © (18.10.09 00:54)
> Если окажется что номер ресурса в разных версиях Win разный
может оказаться, что номер ресурса разный в разных билдах эксплорера.
-
> Badevlad (18.10.09 00:25) [8]
>
> > Игорь Шевченко ©
> > Я имею в виду, что команда copy, системная функция CopyFile,
>
> > проводник, если набрать в одном каталоге Copy, а в другом
> Paste
> > не переименовывают файлы, если в каталоге назначения уже
> имеются
> > файлы с такими же именами.
>
> Копирование и вставка через буфер в проводнике а так же
> использование ShFileOperation с флагом FOF_RENAMEONCOLLISION
> переименовывают.
Имхо.
Если API Shell32 не предоставляет такой возможности, то никаких "нормальных" путей нет.
-
> Имхо.
> Если API Shell32 не предоставляет такой возможности, то
> никаких "нормальных" путей нет.
Логично. Я и ищу такую фкункциональность API. Может кто-то знает что-то, чего я не знаю. Может есть какие-то слабодокументированные функции или их параметры?
-
> Badevlad (18.10.09 11:21) [13]
> Может есть какие-то слабодокументированные функции или их
> параметры?
Совсем слабо слабо документированные если только :)
Нет таких функций. Не нужны они потому что.
-
> очередном совпадении имя будет "Копия (2) Файл1.txt" и т.
> д.
Имена копируемых файлов выьбираются именно способом перебора (счётчик).
-
Собственно, никто не мешает организовать такое переименование вручную, с нужными именами копий, не обязательно искать ресурсы в shell32.dll
Internet Explorer, например, в своем кэше при дублировании имен пишет номер в имени файла file[n] - вполне себе удобно и не зависит от локализации
-
> qwer_qwer (18.10.09 18:44) [15]
> Имена копируемых файлов выьбираются именно способом перебора
> (счётчик).
Да ему нужно именно слово "Копия" получить как то для конкретной локализации Windows.