Форум: "Основная";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];
ВнизПроблема с копированием директорий Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c