Главная страница
    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-1294649384
tat'yanka
2011-01-10 11:49
2011.04.24
Дифрагментация дискового пространства


15-1294219613
Palladin
2011-01-05 12:26
2011.04.24
ну сколько можно пить...


6-1215495439
AHTOLLlKA
2008-07-08 09:37
2011.04.24
Socks5 клиент, как состряпать запрос ?


2-1295289241
student22
2011-01-17 21:34
2011.04.24
запуск скрипта/Apache


11-1233219482
chum
2009-01-29 11:58
2011.04.24
Как перевести проект с 7 на 10.





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