Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-1289586492
shebe91
2010-11-12 21:28
2012.04.01
Все возможные замены символов в пароле:


15-1323090102
Kostafey
2011-12-05 17:01
2012.04.01
Построение визуальной модели данных по SQL (DDL)


15-1321017183
Бездомный
2011-11-11 17:13
2012.04.01
Когда, интересно, появятся компьютеры, способные


15-1323004190
DVM
2011-12-04 17:09
2012.04.01
Никто в MS не хочет пойти программировать? На Delphi.


2-1323940774
igorium
2011-12-15 13:19
2012.04.01
Надо диаграмму Chart-Pie закрутить в другую сторону :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский