Главная страница
    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.46 MB
Время: 0.003 c
15-1294771007
LDV
2011-01-11 21:36
2011.04.24
sql-запрос


6-1236577141
kernel
2009-03-09 08:39
2011.04.24
Зависание IdHTTPProxyServer


2-1295032117
Сергей
2011-01-14 22:08
2011.04.24
Вызов функции из функции


2-1295517155
Alex_C
2011-01-20 12:52
2011.04.24
Как в метафаил скопировать битмап?


1-1252655548
plato
2009-09-11 11:52
2011.04.24
Изменяемые компоненты формы хранить в плагинах или ...?





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