Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2009, 11:30   #1
cemen13
Пользователь
 
Регистрация: 21.07.2009
Сообщений: 19
По умолчанию копирование файлов из подкаталогов

Всем привет пишу прогу в ней есть функция копирование (т.е по заданной дате происходит поиск файлов в определенной папке с подкаталогами после чего найденные файлы, если такие есть заносится в ListBox, и одновременно эти файлы должны быть скопированы в заданную папку. С добавлением в ListBox все нормально, а вот копирование не идет а точнее копируются файлы только из корневой папки а вот из подкаталогов нет вот мой листинг подскажите где где не так или подправьте его, плиз
Код:
procedure TForm1.CopyDirectory(path1, path2: string);
var f: TSearchRec;
  i,s: integer;
  ladd:boolean;
  TBegin:integer;
 begin
// смена каталога чтобы не нужно было задавать полный путь к файлу
ChDir(path1);
// начало поиска
  i:= FindFirst('*.*', faAnyFile, f);
while i=0 do
  begin
  if (f.Name<>'.') and (f.name<>'..') then
  begin
  ladd:=true;
// проверяем атрибуты файла и стоит ли галочка на (включить влаженные папки)
  if ((f.Attr and faDirectory)<>0) and CBInclude.Checked then
// поиск во вложенной папке
    CopyDirectory(path1+f.Name, f.Name)
      else
      begin
        if (f.Attr and faDirectory)=0 then
         begin
// проверка даты
          case RGData.ItemIndex of
          0:TBegin:=DateTimeToFileDate(Date);
          1: if f.Time>DateTimeToFileDate(DateTimePicker2.Date) then
            TBegin:=f.Time+1000
            else TBegin := DateTimeToFileDate(DateTimePicker1.Date);
            end;
          ladd:= f.Time>= TBegin;
         end;
         if ladd then
   begin
// занесение в лист бокс имена файлов и копируем
   s:=ListBox1.Items.add(f.Name);
//копирование в папку 
  CopyFile(pchar(path1+f.Name), pchar(path2+f.Name), true);
    end;
  end;
  end;
// продолжение поиска
 i:= FindNext(f);
end;
  FindClose(f);
// возврат в предыдущий каталог
  ChDir('..');
 end;
cemen13 вне форума Ответить с цитированием
Старый 25.09.2009, 12:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
ChDir(path1);
Правильно не копируются.
Ты не хранишь нигде полный путь начиная от исходного каталога, а просто меняешь точку опоры.
Вместо того чтоб не нужно было задавать полный путь к файлу
всетаки задавай именно полный путь
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.09.2009, 14:03   #3
cemen13
Пользователь
 
Регистрация: 21.07.2009
Сообщений: 19
По умолчанию

т.е нужно в ChDir('c:\12\') это где происходит поиск так?
cemen13 вне форума Ответить с цитированием
Старый 25.09.2009, 14:30   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
т.е нужно в ChDir
Нужно вообще от этой ChDir избавляться. Она там только мешает. Просто передавай полный путь в функцию (в рекурсии) т.е. дописывай вновь найденную директорию к параметру функи, и его же передавай в рекурсивный вызов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.09.2009, 14:45   #5
cemen13
Пользователь
 
Регистрация: 21.07.2009
Сообщений: 19
По умолчанию

Если не сложно исправьте в моем листинге, а я что то не догоню, просто еще новичет плиз
cemen13 вне форума Ответить с цитированием
Старый 25.09.2009, 15:23   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Твой код запутаный.
Вот смотри:http://www.programmersforum.ru/showt...ighlight=findA
Тут я привел пример рекурсии.
Там строка выделена жирным, вместо нее функцию копирования ставь - p+s.Name даст полный путь (это для функции копирования) откуда.
При этом не забудь воспользоваться ForceDirectory() для создания папки чтоб было куда копировать.

А вообще рекомендую ShFileOperation пользовать дабы копировать папки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.09.2009, 15:46   #7
cemen13
Пользователь
 
Регистрация: 21.07.2009
Сообщений: 19
По умолчанию

мне копирование папки не нужно, а нужно копировать найденные в ней и подкаталогах файлы в одну папку
cemen13 вне форума Ответить с цитированием
Старый 25.09.2009, 15:51   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
cemen13
Ну знач пойди по ссылке и посмотри пример.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.09.2009, 16:20   #9
cemen13
Пользователь
 
Регистрация: 21.07.2009
Сообщений: 19
По умолчанию

ну посмотрел и что считалось содержимое папки tmp и что из этого?
cemen13 вне форума Ответить с цитированием
Старый 25.09.2009, 16:46   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
и что из этого?
Ну тебе же то что считалось нужно копировать, так?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование файлов Demien Общие вопросы Delphi 9 26.03.2010 08:52
Копирование файлов Hacker19_90 Общие вопросы C/C++ 0 19.05.2009 19:24
Копирование файлов matus Помощь студентам 9 27.02.2008 19:34
копирование файлов matus Общие вопросы Delphi 2 07.11.2007 21:57
Копирование файлов Devil_uu Помощь студентам 2 24.03.2007 20:27