Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2011.04.24;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
15-1294991323
Антон Т.
2011-01-14 10:48
2011.04.24
Как сделать рассылку?


15-1294645762
12
2011-01-10 10:49
2011.04.24
Еще раз о тервере


15-1292834915
12
2010-12-20 11:48
2011.04.24
Как существует Антиматерия or Где хранить всепрожигающую киcлоту?


2-1295432083
Scott Storch
2011-01-19 13:14
2011.04.24
упростить алгоритм TStrings.SetDelimiterText


15-1294926003
12
2011-01-13 16:40
2011.04.24
EhLib v3.6. Нормально работает?





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