Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2008, 02:03   #1
eriser
 
Регистрация: 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)-подсовываю список с путями и новыми именами файлов.
Когда запускаю процедуру с одним файлом или циклом по одному, всё в порядке,а если группу сразу, то создаёт папку с путём и именем первого файла, а остальные просто копирует туда-же без переименования.
Чем поможете?
eriser вне форума Ответить с цитированием
Старый 17.01.2008, 08:11   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Чем поможете?
Советом: после "глобального" копирования в цикле переименовывай скопированное, или копируй по одному с новым именем
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.01.2008, 13:54   #3
eriser
 
Регистрация: 17.01.2008
Сообщений: 4
По умолчанию

Да, так получается, но тогда проблема с индикатором контроля процесса, не возможно определить время завершение процесса копирования.
eriser вне форума Ответить с цитированием
Старый 17.01.2008, 14:14   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не возможно определить время завершение процесса копирования.
А ты не время определяй а скопированное количество файлов. ЗАчеи тебе обязательно время?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.01.2008, 17:51   #5
eriser
 
Регистрация: 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, это потоки?
Как туда подсунуть строки с путями?

Я к сожалению ещё не очень силён в програмировании.
eriser вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одновременно делать 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