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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2009, 07:07   #1
Paul Hindenburg
Форумчанин
 
Аватар для Paul Hindenburg
 
Регистрация: 27.07.2007
Сообщений: 123
По умолчанию Копирование нескольких файлов с помощью ShellAPI

есть рабочий код, но только для копирования одного объекта (каталог/файл). как можно исправить, чтобы действие совершалось над группой выбранных файлов.
ниже код кнопки:
Код:
procedure TFormSelectDir.Button2Click(Sender: TObject);
var
 FSrc,FDes,FPath,
 s,newstr,File_name : string;
 i:Integer;
begin
 FDes := '';
 if TreeView1.Selected=nil then
  exit;
File_name  := Form2.ListView1.Items[Form2.ListView1.ItemIndex].Caption;
s := (SrNodeTree(TreeView1.Selected,s));
newstr := Copy(s,LenghtNullLevel,length(s));
FDes := pnoder(TreeView1.Selected.Data).Puti+newstr;
 FPath:= pnoder(TreeView1.Selected.Data).Puti+newstr;
 if FPath[Length(FPath)]<>'\' then
  FPath:=FPath+'\';
 FSrc := '';
 for i := 0 to TreeView1.items.Count-1 do
  if (TreeView1.items.item[i].Selected) then
   begin
    FSrc:=FSrc+pnoder(Form2.TreeView2.Selected.Data).Puti+File_name+#0;
   end;
 FSrc:=FSrc+#0;
 DoSHFileOp(Handle, FileOpMode[0], FSrc, FDes, false);
close;
end;
а здесь код DoSHFileOp
Код:
const
 FileOpMode: array[0..3] of UInt =
   (FO_COPY, FO_DELETE, FO_MOVE, FO_RENAME);
function DoSHFileOp(Handle: THandle; OpMode: UInt; Src,
  Dest: string; DelRicleBin: Boolean): Boolean;
var
 Ret: integer;
 ipFileOp: TSHFileOpStruct;
begin
 Screen.Cursor:=crAppStart;
 FillChar(ipFileOp, SizeOf(ipFileOp), 0);
 with ipFileOp do
  begin
   wnd := Handle;
   wFunc := OpMode;
   pFrom := pChar(Src);
   pTo := pChar(Dest);
   if DelRicleBin then
    fFlags := FOF_ALLOWUNDO
   else
    fFlags := FOF_NOCONFIRMMKDIR;
   fAnyOperationsAborted := False;
   hNameMappings := nil;
   lpszProgressTitle := '';
  end;
 try
  Ret := SHFileOperation(ipFileOp);
 except
  Ret := 1;
 end;
 result := (Ret = 0);
 Screen.Cursor:=crDefault;
end;
Ну что ж… Жизнь иногда такие фертеля выкидывает, что и фантасту не приснится…
Paul Hindenburg вне форума Ответить с цитированием
Старый 26.05.2009, 08:21   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
if DelRicleBin then
    fFlags := FOF_ALLOWUNDO
   else
    fFlags := FOF_NOCONFIRMMKDIR;
fFlags:=fFlags or FOF_MULTIDESTFILES	
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.05.2009, 08:50   #3
Paul Hindenburg
Форумчанин
 
Аватар для Paul Hindenburg
 
Регистрация: 27.07.2007
Сообщений: 123
Вопрос

у меня немного другая проблема - как мне за один раз перемещать(копировать или удалять) несколько выбранных файлов. в переменную File_name как передать несколько названия файлов/папок.
ps
я пытаюсь сделать как в проводнике "Переместить в..."
у меня работает только с первым объектом а остальные выбранные игнорятся
Ну что ж… Жизнь иногда такие фертеля выкидывает, что и фантасту не приснится…
Paul Hindenburg вне форума Ответить с цитированием
Старый 26.05.2009, 08:53   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в переменную File_name как передать несколько названия файлов/папок.
Ну так вроде у тя это уже прописано:
Цитата:
...
FSrc:=FSrc+pnoder(Form2.TreeView2.S elected.Data).Puti+File_name+#0;
end;
FSrc:=FSrc+#0;
...
Это формирует список файлов, которые нужно передать
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.05.2009, 09:03   #5
Paul Hindenburg
Форумчанин
 
Аватар для Paul Hindenburg
 
Регистрация: 27.07.2007
Сообщений: 123
По умолчанию

тогда еще вопрос. какой должен быть разделитель? нулевой байт? или точка с запятой?
Ну что ж… Жизнь иногда такие фертеля выкидывает, что и фантасту не приснится…
Paul Hindenburg вне форума Ответить с цитированием
Старый 26.05.2009, 09:09   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Разделитель между файлами нулевой.
Конец строки два нуля.
Может ты пути неверно туда передаешь. Пройдись отладчиком.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.05.2009, 09:05   #7
Paul Hindenburg
Форумчанин
 
Аватар для Paul Hindenburg
 
Регистрация: 27.07.2007
Сообщений: 123
Вопрос

отладчиком проверил - пути правильные ишибка во флагах
Код:
    fFlags := FOF_NOCONFIRMMKDIR;
fFlags:=fFlags or FOF_MULTIDESTFILES
прикрепляю файл там проект, если не затруднит порсмотрите,
я там коменты оставил.
Вложения
Тип файла: rar Новая папка.rar (169.5 Кб, 29 просмотров)
Ну что ж… Жизнь иногда такие фертеля выкидывает, что и фантасту не приснится…
Paul Hindenburg вне форума Ответить с цитированием
Старый 27.05.2009, 09:35   #8
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Вот тут http://www.codenet.ru/progr/delphi/stat/copy.php
немного теории о копировании нескольких файлов с помощью системного диалога и с использованием той же структуры TSHFileOpStruct, вот там же поясняется как в нее писать список файлов для копирования ...
Короче смотри - я этим не занимался поэтому конкретно с кодом не помогу.
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 13.07.2009, 11:50   #9
Paul Hindenburg
Форумчанин
 
Аватар для Paul Hindenburg
 
Регистрация: 27.07.2007
Сообщений: 123
Вопрос

появилась проблемка: при копировании в текущем каталоге файла/папки возникает ошибка в прикрепленном файле скрин. как сделать так, как сделано в Windows тоесть копируем "Файл1" в тотже самый каталог где находится исходный файл и создается файл с именем "Копия Файл1"
Изображения
Тип файла: jpg no copy.JPG (11.0 Кб, 72 просмотров)
Ну что ж… Жизнь иногда такие фертеля выкидывает, что и фантасту не приснится…
Paul Hindenburg вне форума Ответить с цитированием
Старый 13.07.2009, 12:04   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А хелп почитать?
Код:
fFlags:=fFlags or FOF_MULTIDESTFILES or FOF_RENAMEONCOLLISION
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование нескольких столбцов в один AChrist Microsoft Office Excel 4 16.03.2009 06:34
Проигрывание нескольких файлов <-=SG=-> Общие вопросы Delphi 3 11.10.2008 15:47
Копирование файлов с помощью copyfile mopozoff Общие вопросы Delphi 3 13.06.2008 12:59
Копирование нескольких файлов + ProgressBar AngelOfDeath Общие вопросы Delphi 4 28.05.2008 14:57