Конференция "Сети" » TIdFTP циклическое удаление
 
  • novai (12.03.09 08:16) [0]
    Помогите примером, как можно удалить все файлы и папки на фтп при помощи этого компонента? Те нужно как я понимаю делать цикл цикла? не могу понять как. Подскажите уважаемые мастера.
  • novai (12.03.09 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 © (12.03.09 09:09) [2]
    > novai  (12.03.2009 8:16:00)  [0]

    Можно по маске или в цикле, но поскольку все файлы, то по маске *
  • novai (12.03.09 09:11) [3]
    Анатолий, как цикл организовать? чтоб все вложеннсти пройти?
  • FireMan_Alexey © (12.03.09 09:19) [4]
    Рекурсия... :)
  • Anatoly Podgoretsky © (12.03.09 09:55) [5]
    > novai  (12.03.2009 9:11:03)  [3]

    Зачем реализовывать, то что у тебя уже реализовано, возможно нужно только учесть обязательное удаление с конца дерево, но это то делается с помощью рекурсии.
  • novai (12.03.09 09:56) [6]
    О, это магическое слово рекрусия(
  • FireMan_Alexey © (12.03.09 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 © (12.03.09 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 © (12.03.09 20:55) [9]
    Блин обратно наплужил :)

    For замени на While
     While Dir.Count>0 do
       Begin
          DirName:=Dirs[0]; // Будем удалять всегда первый каталог в списке !!!
          ...
 
Конференция "Сети" » TIdFTP циклическое удаление
Есть новые Нет новых   [134435   +33][b:0][p:0]