Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.20;
Скачать: CL | DM;

Вниз

Проблема с копированием директорий   Найти похожие ветки 

 
dreamse   (2005-02-07 10:24) [0]

В общем код :

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Копирование содержимого директории, вместе с поддиректориями.

Фукция копирует СОДЕРЖИМОЕ директории SourceDir в директорию TargetDir.
Копируются все файлы, подкаталоги, и файлы находящиеся в этих подкаталогах.

Аргумент StopIfNotAllCopied: если значение этого аргумента = True,
то при первой же ошибке копирования файла или папки, работы функции
прекратится а функуция вернёт False. В случае если этот аргумент = False,
то ошибки копирования учитываться не будут.

Аргумент OverWriteFiles: если True, то существующие файлы будут переписаны.

Зависимости: SysUtils, FileCtrl, Windows
Автор:       VID, snap@iwt.ru, ICQ:132234868, Махачкала
Copyright:   VID
Дата:        31 января 2003 г.
***************************************************** }

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;
Пример использования:

FullDirectoryCopy("C:\a", "D:\b");
// Скопирует содержимое директории C:\a (не не саму директорию) в директорию D:\b

Копирует с локального диск на локальный всё отлично
при копировании с CD не хочет читать подкаталоги

:(


 
КаПиБаРа ©   (2005-02-07 10:29) [1]

У CD есть одно отличие. На нем все файлы RO. Проверь нет ли в алгоритме подводного камня связвнного с этим.


 
begin...end ©   (2005-02-07 10:36) [2]

> dreamse   (07.02.05 10:24)

> if SR.Attr = faDirectory then

Такая проверка некорректна. Каталог (так же, как и файл) может быть, например, скрытым, или, как заметили в [1], только для чтения. Поэтому проверку следует заменить на такую:

if SR.Attr and faDirectory <> 0 then


 
begin...end ©   (2005-02-07 10:39) [3]

Добавлю, что для копирования целых директорий можно также использовать стандартную API-функцию SHFileOperation.


 
dreamse   (2005-02-07 11:42) [4]

Спасибо помогло.


 
dreamse   (2005-02-07 11:51) [5]

Теперь такая проблема : MDB файлы ( microsoft Acess ) программа не видит после перезаписи их на жёсткий диск ... но стоить просто выделить файл а затем опять запустить программу как программа сразу находит их ... полтергейст :)

Никто не сталкивался ?


 
КаПиБаРа ©   (2005-02-07 11:57) [6]

dreamse   (07.02.05 11:51) [5]
У каждого свои тараканы :)


 
dreamse   (2005-02-07 12:13) [7]

Возможно что вышеприведённый код копирования файлов что то изменил в них при копировании ? И По этому они становяться не читабельными .. а когда щёлкаешь на них мышкой windows что то с ними делает , может быть как то обозначает или что то дописывает. и после этого всё нормально ... вот проблема блин 3 час бьюсь :(



Страницы: 1 вся ветка

Текущий архив: 2005.02.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.05 c
4-1105004843
Molchanov
2005-01-06 12:47
2005.02.20
Имя модуля, загрузившего DLL


1-1107727510
Raider
2005-02-07 01:05
2005.02.20
Как сделать так


1-1107778456
Ega23
2005-02-07 15:14
2005.02.20
Поясните ситуацию с StrPCopy


4-1102446667
z_man
2004-12-07 22:11
2005.02.20
Как спрятать запущенную программу?


3-1106499763
Fin
2005-01-23 20:02
2005.02.20
Хранимые процедуры.