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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2012, 15:21   #1
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию копирование папки вместе с содержимым

всем привет, нужно написать прогу которая будет копировать папку полностью с ее содержимым. вот в инете откопал такую функцию и начал проверять
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
FullDirectoryCopy('d:\UCH\2\', 'd:\UCH\1\',true,true);
end;

function TForm1.FullDirectoryCopy(SourceDir, TargetDir: String;
  StopIfNotAllCopied, OverWriteFiles: Boolean): Boolean;
Var
SR: TSearchRec;
I: Integer;
Begin
Result:=False;
SourceDir:= IncludeTrailingBackslash(SourceDir);
TargetDir:= IncludeTrailingBackslash(TargetDir);
If Not DirectoryExists(SourceDir) Then
Exit;
If Not ForceDirectories(TargetDir) Then
Exit;
I:=FindFirst(SourceDir + '*', FaAnyFile, SR);
Try
While I = 0 Do
Begin
If (SR.Name <> '') And (SR.Name <> '.') And (SR.Name <> '..') Then
Begin
If SR.Attr = FaDirectory Then
Result:= FullDirectoryCopy(SourceDir + SR.Name, TargetDir + SR.NAME,
StopIfNotAllCopied, OverWriteFiles)
Else
If Not (Not OverWriteFiles And FileExists(TargetDir + SR.Name)) Then
Result:= CopyFile(Pchar(SourceDir + SR.Name), Pchar(TargetDir + SR.Name),False)
Else
Result:=True;
If Not Result And StopIfNotAllCopied Then
Exit;
End;
I:=FindNext(SR);
End;
Finally
SysUtils.FindClose(SR);
End;
end;
вобщем все вроде работает но копирует только примерно 40% из папки, что это может быть?помогите пожалуйста
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 28.06.2012, 16:29   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

а где разделитель "\" при рекурсивном спуске.
Цитата:
Result:= FullDirectoryCopy(SourceDir + SR.Name, TargetDir + SR.NAME,
StopIfNotAllCopied, OverWriteFiles)
на первом шаге он еще есть(может быть), а вот дальше уже нет.
а если нет разделителя, то это совсем другой путь, и совсем другие результаты.
Цитата:
но копирует только примерно 40% из папки, что это может быть?
Цитата:
Result:= CopyFile(Pchar(SourceDir + SR.Name), Pchar(TargetDir + SR.Name),False)
то же самое.

Цитата:
на первом шаге он еще есть(может быть),
точно есть
Цитата:
FullDirectoryCopy('d:\UCH\2\', 'd:\UCH\1\',true,true);
Цитата:
вот в инете откопал такую функцию и начал проверять
при первой же проверке надо смотреть параметры на КАЖДОМ ( она же у вас рекурсивная) входе функции, и обнаружить отсутствие разделителя.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 28.06.2012 в 16:37.
evg_m вне форума Ответить с цитированием
Старый 28.06.2012, 16:42   #3
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

проблема в том что я не совсем понимаю этот код, но эта функция IncludeTrailingBackslash должна проверять есть ли в пути слэш и если нет добавить его.нет?
а может вообще есть способ по проще?чтоб мне тоже понятно было
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 28.06.2012, 16:51   #4
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

IncludeTrailingBackslash эта функция поддерживается только в Delphi 5. Вы в ней работаете?
FaTaL вне форума Ответить с цитированием
Старый 28.06.2012, 17:04   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
которая будет копировать папку полностью
Упростим?
http://delphiworld.narod.ru/base/cop...ith_files.html
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.06.2012, 17:10   #6
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
IncludeTrailingBackslash эта функция поддерживается только в Delphi 5. Вы в ней работаете?
нет, у меня RAD Studio 2007, а какую тогда мне использовать вместо нее?
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 28.06.2012, 17:23   #7
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
боже мой)))спасибо,это именно то что мне нужно,вы всегда помогаете, большое спасибо
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 28.06.2012, 18:08   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пользуйся на здоровье )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование папки со всем соодержимым GriFFoN PHP 3 26.06.2011 14:05
Копирование групы файлов из одной папки в другую Progsenya C# (си шарп) 1 30.04.2011 11:56
скрытное копирование папки с файлами BanDit Общие вопросы Delphi 36 08.03.2011 21:53
Копирование папки и удаление из нее файлов Dima DDM Общие вопросы Delphi 4 11.02.2011 20:54
Копирование из папки мои документы Dima DDM Общие вопросы Delphi 5 05.01.2011 22:46