Einzelnen Beitrag anzeigen

Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: idFTP Ordner rekursiv auflisten

  Alt 3. Nov 2008, 15:27
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;
  Mit Zitat antworten Zitat