Bei dem Auflisten eines Verzeichnis über
FTP muss man richtig vorgehen.
FTP Zugriffe sind teuer da sie über das Netzwerk gehen und dementsprechend viel Zeit brauchen.
Daher muss die Strategie so aussehen:
Verzeichnis mit "List" abrufen und alle Dateien in den Tree eintragen.
Unterverzeichnisse werden in diesem 1. Durchlauf ignoriert.
In einem 2. Durchlauf durch
ftp.DirectoryListing werden alle Unterverzeichnisse rekursiv besucht.
Ein erneutes Auflisten des aktuellen Verzeichnis ist dabei unnötig und muss unbedingt vermieden werden!!
Sehr zu empfehlen ist auch die Übergabe einer Rekursionstiefe:
Delphi-Quellcode:
procedure ListDir(dir: String; const tv: TTreeView; tn: TTreeNode; level:integer);
begin
if level <= 0 then Exit;
...
// und später der rekursive Aufruf
listdir(itm.items[i].filename, tv, node, level - 1);
...
Möchte man nur das Basisverzeichnis auflisten übergibt man für "level" den Wert 1;
um alle Unterverzeichnisse aufzulisten übergibt man einen Wert > 100.
Das sollte für alle "normalen"
FTP Server ausreichen.
Bei einem unbekannten
FTP-Server könnte man mit level=2 beginnen, damit man sich nicht in den möglichweise Tausenden Unterverzeichnissen verliert.