-
Помогите примером, как можно удалить все файлы и папки на фтп при помощи этого компонента? Те нужно как я понимаю делать цикл цикла? не могу понять как. Подскажите уважаемые мастера.
-
сделал так: 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;
но надо чтобы был полный обход всех папок и файлов
-
> novai (12.03.2009 8:16:00) [0]
Можно по маске или в цикле, но поскольку все файлы, то по маске *
-
Анатолий, как цикл организовать? чтоб все вложеннсти пройти?
-
Рекурсия... :)
-
> novai (12.03.2009 9:11:03) [3]
Зачем реализовывать, то что у тебя уже реализовано, возможно нужно только учесть обязательное удаление с конца дерево, но это то делается с помощью рекурсии.
-
О, это магическое слово рекрусия(
-
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 - Выйти выше из папки и удалить ее!
-
Да ошибка одна вышла)
Procedure DelFiles; Var N:Integer; DirName:String; begin ...
for N:=.... begin DirName:=dirs[n]; ... ftp.ChangeDirUp; ftp.RemoveDir(DirName); ftp.List(dirs, '*', false); End;
Иначе рекурсия будет не правильно работать :)
-
Блин обратно наплужил :)
For замени на While While Dir.Count>0 do Begin DirName:=Dirs[0]; // Будем удалять всегда первый каталог в списке !!! ...
|