Главная страница
    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
2-1292988713
Abcdef123
2010-12-22 06:31
2011.04.24
Принтер "портит" выполнение программы?


2-1295539697
Ain
2011-01-20 19:08
2011.04.24
Edit


1-1252912417
KSergey
2009-09-14 11:13
2011.04.24
DLL и глобальные переменные


15-1294837507
AlexDn
2011-01-12 16:05
2011.04.24
Гугл кеширование?


6-1200650913
Maloj2007
2008-01-18 13:08
2011.04.24
TIdIRC, TIdIRCServer





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