|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
17.01.2008, 02:03 | #1 |
Регистрация: 17.01.2008
Сообщений: 4
|
Как копировать и одновременно переименовывать файлы?
Здравствуйте!
Есть необходимость копировать группу или список файлов в нужные мне папки и одновременно переименовывать их. Использовал ShellApi, за основу брал это: uses ShellAPI; procedure TForm1.Button1Click(Sender: TObject); var Fo : TSHFileOpStruct; buffer : array[0..4096] of char; p : pchar; fDir: string; begin FillChar(Buffer, sizeof(Buffer), #0); p := @buffer; p := StrECopy(p, 'C:\DownLoad\1.ZIP') + 1; p := StrECopy(p, 'C:\DownLoad\2.ZIP') + 1; p := StrECopy(p, 'C:\DownLoad\3.ZIP') + 1; StrECopy(p, 'C:\DownLoad\4.ZIP'); FillChar(Fo, sizeof(Fo), #0); Fo.Wnd := Handle; Fo.wFunc := FO_COPY; Fo.pFrom := @Buffer; Fo.pTo := pchar(fDir); Fo.fFlags := 0; if ((SHFileOperation(Fo) <> 0) or (Fo.fAnyOperationsAborted <> false)) then ShowMessage('Cancelled') end; Fo.pTo := pchar(fDir)-подсовываю список с путями и новыми именами файлов. Когда запускаю процедуру с одним файлом или циклом по одному, всё в порядке,а если группу сразу, то создаёт папку с путём и именем первого файла, а остальные просто копирует туда-же без переименования. Чем поможете? |
17.01.2008, 08:11 | #2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
17.01.2008, 13:54 | #3 |
Регистрация: 17.01.2008
Сообщений: 4
|
Да, так получается, но тогда проблема с индикатором контроля процесса, не возможно определить время завершение процесса копирования.
|
17.01.2008, 14:14 | #4 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
17.01.2008, 17:51 | #5 |
Регистрация: 17.01.2008
Сообщений: 4
|
Вроде разобрался с переименовыванием
fFlags := FOF_RENAMEONCOLLISION or FOF_FILESONLY or FOF_MULTIDESTFILES; и всё пошло. Но появились две новые проблемы: 1. Осказывается копировать с с:\..... на с:\блабла\.... с других дисков без проблем??? Хотя это не столь важно. А вот... 2. При конфликте имён если fFlags := FOF_RENAMEONCOLLISION делает copy of ...., а не copy of то что мне нужно.jpg . Если fFlags := FOF_RENAMEONCOLLISION не установлен появляется диалог переименовать - да?, нет?, но переименовать ручками я не могу. И если не трудно,можно чуть подробнее и с примерчиком о CopyFile(LPCTSTR lpszExistingFile, LPCTSTR lpszNewFile, BOOL fFailIfExists) как альтернативу моему варианту. LPCTSTR lpszExistingFile, LPCTSTR lpszNewFile, это потоки? Как туда подсунуть строки с путями? Я к сожалению ещё не очень силён в програмировании. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Одновременно делать 2 действия(showmessage и ShellEzecute) | Ozerich | Общие вопросы Delphi | 2 | 29.08.2008 08:16 |
Изменять файл нескольким пользователям одновременно | asale | Microsoft Office Excel | 2 | 20.04.2008 23:49 |
сохранить ланные в файл и распечатать одновременно. | CaHeK | Общие вопросы Delphi | 5 | 07.04.2008 21:41 |
как копировать файлы Kaspersky Anti-Virus Personal\5.0\Bases\*.* | Podlec | Безопасность, Шифрование | 3 | 16.11.2007 11:37 |