Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
9-1100950280
Bryke
2004-11-20 14:31
2005.02.20
Индексация


4-1105108052
!
2005-01-07 17:27
2005.02.20
ListBox


14-1107120927
Alexander Panov
2005-01-31 00:35
2005.02.20
"Белая гвардия"


14-1107109482
Zeqfreed
2005-01-30 21:24
2005.02.20
Не могу понять


1-1107514581
Brenagwynn
2005-02-04 13:56
2005.02.20
Распарсить большой текстовый файл





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский