|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Зависание приложения после копирования каталогов! (Help)
Здравствуйте!
Столкнулся с проблемой копирования каталогов. Использую готовую функцию: Код:
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. Я в тупике и не знаю уже, что делать. Поделитесь пожалуйста опытом, советом полезным или подскажите как правильно сделать. И заранее прошу без критики, т.к. критика не поможет решить данную проблему. Последний раз редактировалось Admin, 21.09.2011 в 10:08. |
#2
|
|||
|
|||
может место закончилось?
|
#3
|
|||
|
|||
Pyro, это исключено. У меня места ещё 100 гигабайт.
|
#4
|
|||
|
|||
Тогда можно во время зависания нажать Паузу в дельфи и пройтись пошагово
|