Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 31.10.2012, 22:26   #1
biohazard120
Пользователь
 
Регистрация: 14.09.2012
Сообщений: 12
Репутация: 10
По умолчанию Рекурсивное копирование данных

Здравствуйте, уважаемые форумчане. Сегодня столкнулся с проблемой.
Собственно сабж: нашел в интернете кусок кода для рекурсивного копирования, но он копирует только половину данных(данный код уже приводился на этом форуме, однако вразумительного ответа никто не дал). После вырезания условия проверки SR.Attr = faDirectory (такое решение пришло после часового изучения функции дебаггером) копироваться стали все файлы, однако теперь функция в любом случае возвращает false. Прошу помощи у более опытных собратьев. =)

Код:
function TForm1.FDC(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 := FDC(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;
P.S. Не ругаться на IncludeTrailingBackslash, он прекрасно работает в RAD 2010
biohazard120 вне форума   Ответить с цитированием
Старый 31.10.2012, 23:36   #2
eoln
Профессионал
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,690
Репутация: 2251

icq: 421277094
По умолчанию

Папки кроме faDirectory могут иметь другие атрибутов(скрытые и т.п). Каталог/не каталог лучше различать так
Код:
if (SR.Attr and faDirectory) = faDirectory then каталог
if (SR.Attr and faDirectory) <> faDirectory then не каталог
При выходе по exit надо бы по этикету закрыть поиск.

P.S. Остальное не проверял
eoln вне форума   Ответить с цитированием
Старый 31.10.2012, 23:46   #3
biohazard120
Пользователь
 
Регистрация: 14.09.2012
Сообщений: 12
Репутация: 10
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Папки кроме faDirectory могут иметь другие атрибутов(скрытые и т.п). Каталог/не каталог лучше различать так
Код:
if (SR.Attr and faDirectory) = faDirectory then каталог
if (SR.Attr and faDirectory) <> faDirectory then не каталог
При выходе по exit надо бы по этикету закрыть поиск.

P.S. Остальное не проверял
Благодарю, помогло. Тему можно закрыть
biohazard120 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение данных по определенному диапазону строк и при совпадении значений копирование данных в другой лист Volk358 Microsoft Office Excel 6 02.10.2012 09:54
Рекурсивное вычисление выражения *Firefly* Помощь студентам 4 16.02.2012 21:49
Рекурсивное вычисление определителя матрицы. Winterfox Помощь студентам 0 18.12.2011 18:03
Рекурсивное зацикливание Alex_Almaty Помощь студентам 8 06.07.2010 07:49


10:13.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.