Форум: "WinAPI";
Текущий архив: 2012.04.01;
Скачать: [xml.tar.bz2];
ВнизКак Windows переименовывает файлы при совпадении во время копиров Найти похожие ветки
← →
Badevlad (2009-10-16 18:56) [0]При копировании Windows переименовывает файл, в случае если его имя совпадает с именем присутствующего в папке файла. К примеру, если в папке есть "Файл1.txt", и мы пытаемся скопировать в нее еще один с таким же именем, второй файл будет переименован в "Копия Файл1.txt". при очередном совпадении имя будет "Копия (2) Файл1.txt" и т. д.
Как получить шаблон, по которому Windows строит новое имя файла? Мне нужно самостоятельно генерировать его с учетом языка Windows, так что варианты с FOF_RENAMEONCOLLISION или забиванием констант не подходят.
← →
DVM © (2009-10-16 19:29) [1]в Shell32.dll есть строковой ресурс 4178, выглядит похоже: Копия ()
← →
Игорь Шевченко © (2009-10-16 23:37) [2]Windows не переименовывает файл во время копирования
← →
Badevlad (2009-10-17 15:13) [3]DVM, спасибо, но вряд ли я могу на это положиться. Нужна какая-нибудь системная функция или константа.
Игорь, что Вы имеете в виду?
← →
Игорь Шевченко © (2009-10-17 16:49) [4]
> Игорь, что Вы имеете в виду?
Я имею в виду, что команда copy, системная функция CopyFile, проводник, если набрать в одном каталоге Copy, а в другом Paste не переименовывают файлы, если в каталоге назначения уже имеются файлы с такими же именами.
← →
DVM © (2009-10-17 17:12) [5]
> DVM, спасибо, но вряд ли я могу на это положиться. Нужна
> какая-нибудь системная функция или константа.
Так я константу и привел. Функции нету, есть функция с пом которой можно достать эту строку из ресурса.
API для этой цели быть не может, ибо это функционал проводника и не обязан быть документирован. Проще взять ShFileOperation() она и скопирует с нужными именами все.
← →
DVM © (2009-10-17 17:14) [6]
> Badevlad (17.10.09 15:13) [3]
Проще простого выяснить где лежит нужная строка в разных версия windows и подгружать оттуда по мере необходимости.
← →
Eraser © (2009-10-17 19:01) [7]> [3] Badevlad (17.10.09 15:13)
> Нужна какая-нибудь системная функция или константа.
при первом запуски проги создаешь во временной папке файл X, потом с пом. ShFileOperation копируешь файл "в самого себя" и пом. рег. выражений и FindFirst/Next узнаешь искомую строку.
← →
Badevlad (2009-10-18 00:25) [8]> Игорь Шевченко ©
> Я имею в виду, что команда 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" соответственно.
Вот если бы шаблон переименования как-то более определенно получить...
← →
Eraser © (2009-10-18 00:38) [9]> [8] Badevlad (18.10.09 00:25)
> Вот если бы шаблон переименования как-то более определенно
> получить...
с пом. регулярных выражений, как я и описал выше. для первой копии можно просто писать как есть.
← →
DVM © (2009-10-18 00:54) [10]
> Очень некрасивое решение, но единственное пока, которое
> может сработать
Единственно верное решение - взять оттуда же откуда берет проводник. Если окажется что номер ресурса в разных версиях Win разный - значит для разных версий брать свои номера.
← →
Eraser © (2009-10-18 02:07) [11]> [10] DVM © (18.10.09 00:54)
> Если окажется что номер ресурса в разных версиях Win разный
может оказаться, что номер ресурса разный в разных билдах эксплорера.
← →
Германн © (2009-10-18 02:31) [12]
> Badevlad (18.10.09 00:25) [8]
>
> > Игорь Шевченко ©
> > Я имею в виду, что команда copy, системная функция CopyFile,
>
> > проводник, если набрать в одном каталоге Copy, а в другом
> Paste
> > не переименовывают файлы, если в каталоге назначения уже
> имеются
> > файлы с такими же именами.
>
> Копирование и вставка через буфер в проводнике а так же
> использование ShFileOperation с флагом FOF_RENAMEONCOLLISION
> переименовывают.
Имхо.
Если API Shell32 не предоставляет такой возможности, то никаких "нормальных" путей нет.
← →
Badevlad (2009-10-18 11:21) [13]
> Имхо.
> Если API Shell32 не предоставляет такой возможности, то
> никаких "нормальных" путей нет.
Логично. Я и ищу такую фкункциональность API. Может кто-то знает что-то, чего я не знаю. Может есть какие-то слабодокументированные функции или их параметры?
← →
DVM © (2009-10-18 14:47) [14]
> Badevlad (18.10.09 11:21) [13]
> Может есть какие-то слабодокументированные функции или их
> параметры?
Совсем слабо слабо документированные если только :)
Нет таких функций. Не нужны они потому что.
← →
qwer_qwer (2009-10-18 18:44) [15]
> очередном совпадении имя будет "Копия (2) Файл1.txt" и т.
> д.
Имена копируемых файлов выьбираются именно способом перебора (счётчик).
← →
Игорь Шевченко © (2009-10-18 19:02) [16]Собственно, никто не мешает организовать такое переименование вручную, с нужными именами копий, не обязательно искать ресурсы в shell32.dll
Internet Explorer, например, в своем кэше при дублировании имен пишет номер в имени файла file[n] - вполне себе удобно и не зависит от локализации
← →
DVM © (2009-10-18 20:49) [17]
> qwer_qwer (18.10.09 18:44) [15]
> Имена копируемых файлов выьбираются именно способом перебора
> (счётчик).
Да ему нужно именно слово "Копия" получить как то для конкретной локализации Windows.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2012.04.01;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.003 c