Как удалить директорию на FTP полностью со всеми вложениями и файлами.

user32
Дата: 09.07.2009 11:31:02
Как удалить директорию на FTP полностью со всеми вложениями и файлами.
на ftp такая вот структура каталогов для удаления:
/111/1
/111/2/2/1
/111/3
/111/1.txt
/111/2.txt
/111/3.txt
Нужно удалить каталог 111 полностью, использую Indy 10, делаю так:
procedure TMainForm.DeleteDirectory(Dir: String);
var
  i: integer;
  FileName: string;
  AFTPItem: TIdFTPListItem;
begin
  IdFTP1.ChangeDir(Dir);
  IdFTP1.List;
  for i := 0 to IdFTP1.DirectoryListing.Count - 1 do
  begin
    AFTPItem := IdFTP1.DirectoryListing.Items[i];
    FileName := AFTPItem.FileName;
    if AFTPItem.ItemType = ditDirectory then
    begin
      if (FileName <> '.') and (FileName <> '..') then
      begin
        DeleteDirectory(FileName);
      end;
    end
      else
      begin
        IdFTP1.Delete(FileName);
      end;
  end;
    IdFTP1.ChangeDirUp;
    IdFTP1.RemoveDir(Dir);
end;

...
DeleteDirectory(string(ListView1.Selected.Caption));
...
и удаляется толька папка 1 и вылетает.
_Vasilisk_
Дата: 10.07.2009 01:04:21
Сохраняйте список в локальную переменную.

С уважением, Vasilisk
Альт
Дата: 10.07.2009 09:06:13
примерно так:
rm -rf /
user32
Дата: 10.07.2009 12:00:04
_Vasilisk_
Сохраняйте список в локальную переменную.

С уважением, Vasilisk

А смысл, в Indy для этих целей есть клас TIdFTPListItems.
Даже если в переменную всёравно неудаляется :(
Уж и незнаю куда крутить, толи Delphi 6 и Indy 10.1.5 так коряво работают.
_Vasilisk_
Дата: 10.07.2009 22:26:34
user32
А смысл, в Indy для этих целей есть клас TIdFTPListItems.

Смысл в том, чтобы не перезаписывать его при каждом рекурсивном вызове
user32
Даже если в переменную всёравно неудаляется :(

Не верю! (С) Константин Станиславский
user32
Уж и незнаю куда крутить, толи Delphi 6 и Indy 10.1.5 так коряво работают.

То ли руки...
user32
Дата: 13.07.2009 11:46:24
_Vasilisk_,

Да хоть так:

procedure TMainForm.DeleteDirectory(Dir: String);
var
  DL: TStringList;
  i: integer;
begin
    DL := TStringList.Create;

    IdFTP1.ChangeDir(Dir);
    IdFTP1.List(DL, '', false);

    for i:= 0 to DL.Count -1 do
      begin
        if IdFTP1.Size(dl.Strings[i]) = -1 then
            DeleteDirectory(dl.Strings[i]) 
        else
            IdFTP1.Delete(dl.Strings[i]); 
      end;
    IdFTP1.ChangeDirUp;
    IdFTP1.RemoveDir(Dir);
    DL.Free;
end;

Ну раз такой бумбастик предложи свой вариант пряморукий ты наш... :D
user32
Дата: 15.07.2009 15:04:59
Проблему решил, тему закрываю. Всем спасибо.