Здравствуйте!
Столкнулся с проблемой копирования каталогов.
Использую готовую функцию:
Код:
function 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;
Выводом является:
Код:
procedure TForm1.But_Copy_DirClick(Sender: TObject);
var path,paths:string;
begin
path:=(PChar(ExtractFilePath(ParamStr(0))+'От куда копировать'));
paths:=(PChar(ExtractFilePath(ParamStr(0))+'Куда копировать'));
FullDirectoryCopy(path,paths,True,False);
end;
Пробовал с указанием меток дисков, тоже не помогло, зависает.
Итог: Приложение копирует, но не всё, т.к. зависает. И что самое интересное. Если приложение весит, а я удаляю эти скопированные каталоги, она их по новой начинает копировать, но только уже часть.
Опыт: Раньше она работала нормально, пока не поставил другую версию delphi 7 и функцию удаления.
Функция удаления каталогов с файлами:
Код:
function DelDir(dir: string): Boolean;
var
fos: TSHFileOpStruct;
begin
ZeroMemory(@fos, SizeOf(fos));
with fos do
begin
wFunc := FO_DELETE;
fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
pFrom := PChar(dir + #0);
end;
Result := (0 = ShFileOperation(fos));
end;
Админ: учимся пользоваться тегами!
Я думал у меня комп уже погнал, перезагрузил, но толку 0.
Убирал функцию удаления, тоже толку 0.
Я в тупике и не знаю уже, что делать.
Поделитесь пожалуйста опытом, советом полезным или подскажите как правильно сделать.
И заранее прошу без критики, т.к. критика не поможет решить данную проблему.