Главная страница
    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.46 MB
Время: 0.041 c
1-1107418107
Arbiter
2005-02-03 11:08
2005.02.20
TComponent, а как "детей" определить?


3-1106299498
juice
2005-01-21 12:24
2005.02.20
Редактирование записи


1-1107525031
Alexander Makhanev
2005-02-04 16:50
2005.02.20
узнать время неактивности юзера...


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


6-1102702991
Winni
2004-12-10 21:23
2005.02.20
Просмотр FTP-клиентом папок и файлов на своем компе.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский