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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2007, 14:04   #1
Tech07
 
Регистрация: 10.08.2007
Сообщений: 4
По умолчанию скопировать папку со всем её содержимым

Подскажите пожалуйста, как программно скопировать папку со всем её содержимым.
Tech07 вне форума Ответить с цитированием
Старый 10.08.2007, 14:12   #2
Xandr
Пользователь
 
Регистрация: 12.07.2007
Сообщений: 60
По умолчанию

Попробуй вот так, должно получиться

Использовать ShFileOperation

Код:
procedure TForm1.Button2Click(Sender: TObject); 
var  OpStruc: TSHFileOpStruct; 
  frombuf, tobuf: Array [0..128] of Char; 
begin  FillChar( frombuf, Sizeof(frombuf), 0 ); 
  FillChar( tobuf, Sizeof(tobuf), 0 ); 
  StrPCopy( frombuf, 'd:\brief\*.*' ); 
  StrPCopy( tobuf, 'd:\temp\brief' ); 
  with OpStruc do begin 
    Wnd := Handle; 
    wFunc := FO_COPY; 
    pFrom := @frombuf; 
    pTo := @tobuf; 
    fFlags := FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION; 
    fAnyOperationsAborted := False; 
    hNameMappings := Nil; 
    lpszProgressTitle := Nil; 
  end; 
  ShFileOperation( OpStruc ); 
end;
Xandr вне форума Ответить с цитированием
Старый 10.08.2007, 14:29   #3
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

.Вот еще один пример. Только не забудь в uses ShellApi
Код:
 function CopyDir(const fromDir, toDir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc  := FO_COPY;
    fFlags := FOF_FILESONLY;
    pFrom  := PChar(fromDir + #0);
    pTo    := PChar(toDir)
  end;
  Result := (0 = ShFileOperation(fos));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CopyDir('D:\proba', 'd:\123\');
end;
.
Aleksandr вне форума Ответить с цитированием
Старый 10.08.2007, 16:00   #4
Tech07
 
Регистрация: 10.08.2007
Сообщений: 4
По умолчанию Еще один вопрос!

Огромное спасибо за примеры, они оба работают отлично. А теперь вопрос! Xandr, вы указали массивы rombuf, tobuf: Array [0..128] of Char; - это значит что количество файлов, которые находятся в копируемом каталоге и подкаталогах ограничивается его размером?
Tech07 вне форума Ответить с цитированием
Старый 10.08.2007, 16:56   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Сообщение от Tech07 Посмотреть сообщение
Огромное спасибо за примеры, они оба работают отлично. А теперь вопрос! Xandr, вы указали массивы rombuf, tobuf: Array [0..128] of Char; - это значит что количество файлов, которые находятся в копируемом каталоге и подкаталогах ограничивается его размером?
Не количество файлов а длина имени. Укажи там 10000 для полного счасться
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.12.2007, 05:37   #6
Viteef
stopfake.org
Участник клуба
 
Регистрация: 03.05.2007
Сообщений: 1,927
По умолчанию

А можно что б при копировании так комп не напрягался, например что б после каждого файла, в зависимости от его размера делалась пауза?
Viteef вне форума Ответить с цитированием
Старый 02.12.2007, 06:26   #7
KORN
Банхаммер
Участник клуба
 
Аватар для KORN
 
Регистрация: 17.02.2007
Сообщений: 1,754
По умолчанию

ну так сделай паузу типа sleep() но при это будет вид что прога повисла...
Перед тем как спросить ищи на форуме и в GOOGLE
KORN вне форума Ответить с цитированием
Старый 02.12.2007, 11:59   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от KORN Посмотреть сообщение
ну так сделай паузу типа sleep() но при это будет вид что прога повисла...
Забудьте про слип! Только Application.ProcessMessages!
mihali4 вне форума Ответить с цитированием
Старый 02.12.2007, 12:06   #9
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

sleep переведет ваш VCL поток в idle что явно ничего хорошего за крайне редким исключением не делает.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор компонента для работы с содержимым текстовых файлов[Delphi] sergey31 Помощь студентам 2 28.08.2008 16:53
Прибить Create Process с содержимым Sashunya Win Api 4 06.11.2007 16:23
как создать папку matus Помощь студентам 2 05.11.2007 22:19
удалить папку без Димарик Общие вопросы Delphi 3 04.10.2007 13:12
Как зашифровать папку UnD)eaD)Snake Общие вопросы Delphi 6 15.08.2007 17:14