Ist es doch
Den hier: l:=idftp1.DirectoryListing; "merkst" du dir zwar, wo dein Listing ist, kopierst es aber nicht
d.h. sobald du auf ein Verzeichnis stößt, ruft dieses wieder idftp.list auf und überschreibt damit dein Listing der aufrufenden Funktion.
Lösung 1: Kopieren. Also alle namen in eine Streingliste kopiren, und durch diese iterieren.
Lösung 2: Du tust erstmal alles ins Treeview und gehst dann nochmal durch die Liste und ruft für die Ordner die Funktion nochmal auf.
Also sowas in der Art:
Delphi-Quellcode:
procedure TForm1.auflisten(CurrentNode: TTreeNode);
var
i: integer;
l: TIdFtpListItems;
current: TTreeNode;
begin
idftp1.List(nil,'',true);
l:=idftp1.DirectoryListing;
for i := 0 to l.Count-1 do
begin
current:=TreeView1.Items.AddChild(CurrentNode,l.Items[i].FileName);
if (l.Items[i].ItemType=ditDirectory) then
current.ImageIndex:=0;
else
current.ImageIndex:=-1;
end;
for i := 0 to l.Count-1 do
begin
// current zuweisen
if (l.Items[i].ItemType=ditDirectory) then
begin
idftp1.changedir(l.Items[i].FileName);
auflisten(current); // < Hier wird auflisten rekursiv aufgerufen
idftp1.ChangeDirUp;
end;
end;
end;