Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.04.24;
Скачать: CL | DM;

Вниз

TIdFTP циклическое удаление   Найти похожие ветки 

 
novai   (2009-03-12 08:16) [0]

Помогите примером, как можно удалить все файлы и папки на фтп при помощи этого компонента? Те нужно как я понимаю делать цикл цикла? не могу понять как. Подскажите уважаемые мастера.


 
novai   (2009-03-12 08:49) [1]

сделал так:
dirs:=Tstringlist.Create;
files:=Tstringlist.Create;

try
   ftp.Connect(true);

   // находим все папки в корневой директории
   ftp.List(dirs, "*", false);

   for n:=0 to dirs.Count-1 do
   begin
     // заходим в директорию из списка папок
     ftp.ChangeDir(dirs[n]);

     // ищем все файлы
     ftp.List(files, "*.*", false);

     for n2:=0 to files.Count-1 do
     begin
       // удаляем найденные файлы
       ftp.Delete(files[n2]);
     end;

     // поднимаемся на папку выше (в корневую)
     ftp.ChangeDirUp;

     // удаляем папку в которой только что были
     ftp.RemoveDir(dirs[n]);
     memo1.Lines.Add("Папка: \"+dirs[n]+" - УДАЛЕНА (СО ВСЕМИ ФАЙЛАМИ)");
   end;

 finally
  ftp.Disconnect;
 end;

 files.Free;
 dirs.Free;

но надо чтобы был полный обход всех папок и файлов


 
Anatoly Podgoretsky ©   (2009-03-12 09:09) [2]

> novai  (12.03.2009 8:16:00)  [0]

Можно по маске или в цикле, но поскольку все файлы, то по маске *


 
novai   (2009-03-12 09:11) [3]

Анатолий, как цикл организовать? чтоб все вложеннсти пройти?


 
FireMan_Alexey ©   (2009-03-12 09:19) [4]

Рекурсия... :)


 
Anatoly Podgoretsky ©   (2009-03-12 09:55) [5]

> novai  (12.03.2009 9:11:03)  [3]

Зачем реализовывать, то что у тебя уже реализовано, возможно нужно только учесть обязательное удаление с конца дерево, но это то делается с помощью рекурсии.


 
novai   (2009-03-12 09:56) [6]

О, это магическое слово рекрусия(


 
FireMan_Alexey ©   (2009-03-12 20:13) [7]

Procedure DelFiles;
Begin
  ftp.List(dirs, "*", false);
  for n:=0 to dirs.Count-1 do
  begin
    // заходим в директорию из списка папок
    ftp.ChangeDir(dirs[n]);
    DelFiles;
    // поднимаемся на папку выше (в корневую)
    ftp.ChangeDirUp;
    ftp.RemoveDir(dirs[n]);
  End;
  // ищем все файлы
  ftp.List(files, "*.*", false);

  for n2:=0 to files.Count-1 do
    begin
      // удаляем найденные файлы
      ftp.Delete(files[n2]);
    end;
  //Усе!!!!!  

End;

Пользовать так:
 1 - Войти в каталог который нужно убить
 2 - Call DelFiles
 3 - Выйти выше из папки и удалить ее!


 
FireMan_Alexey ©   (2009-03-12 20:44) [8]

Да ошибка одна вышла)

Procedure DelFiles;
Var
 N:Integer;
 DirName:String;

begin
...

for N:=....
begin
  DirName:=dirs[n];
  ...
  ftp.ChangeDirUp;
  ftp.RemoveDir(DirName);
  ftp.List(dirs, "*", false);
End;

Иначе рекурсия будет не правильно работать :)


 
FireMan_Alexey ©   (2009-03-12 20:55) [9]

Блин обратно наплужил :)

For замени на While
 While Dir.Count>0 do
   Begin
      DirName:=Dirs[0]; // Будем удалять всегда первый каталог в списке !!!
      ...



Страницы: 1 вся ветка

Текущий архив: 2011.04.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
15-1294694994
Юрий
2011-01-11 00:29
2011.04.24
С днем рождения ! 11 января 2011 вторник


15-1293701642
12
2010-12-30 12:34
2011.04.24
Произношение комплексного числа. По каким буквам "ударять"?


2-1295537929
Айнур
2011-01-20 18:38
2011.04.24
Вопрос по Edit


2-1295595110
HF-Trade
2011-01-21 10:31
2011.04.24
Цвет шрифта и фон заголовков TPageControl в Windows 7 x64


15-1294991323
Антон Т.
2011-01-14 10:48
2011.04.24
Как сделать рассылку?