![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TIdFTP циклическое удаление
novai © (2009-03-12 08:16:00)Помогите примером, как можно удалить все файлы и папки на фтп при помощи этого компонента? Те нужно как я понимаю делать цикл цикла? не могу понять как. Подскажите уважаемые мастера.
FireMan_Alexey (2009-03-12 20:55:00) [1]Блин обратно наплужил :)
For замени на While
While Dir.Count>0 do
Begin
DirName:=Dirs[0]; // Будем удалять всегда первый каталог в списке !!!
...
FireMan_Alexey (2009-03-12 20:44:00) [2]Да ошибка одна вышла)
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:13:00) [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 - Выйти выше из папки и удалить ее!
novai (2009-03-12 09:56:00) [4]О, это магическое слово рекрусия(
Anatoly Podgoretsky (2009-03-12 09:55:00) [5]> novai (12.03.2009 9:11:03) [3]
Зачем реализовывать, то что у тебя уже реализовано, возможно нужно только учесть обязательное удаление с конца дерево, но это то делается с помощью рекурсии.
FireMan_Alexey (2009-03-12 09:19:00) [6]Рекурсия... :)
novai (2009-03-12 09:11:00) [7]Анатолий, как цикл организовать? чтоб все вложеннсти пройти?
Anatoly Podgoretsky (2009-03-12 09:09:00) [8]> novai (12.03.2009 8:16:00) [0]
Можно по маске или в цикле, но поскольку все файлы, то по маске *
novai (2009-03-12 08:49:00) [9]сделал так:
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;
но надо чтобы был полный обход всех папок и файлов