Einzelnen Beitrag anzeigen

LucasL

Registriert seit: 20. Dez 2005
19 Beiträge
 
#1

IdFTP, Ordnerstruktur auflisten

  Alt 20. Dez 2005, 19:07
Hallo miteinander,

ich bin einwenig verzweifelt. In der Unit meines Hauptformulars habe ich ein IdFTP-Objekt (Indy 10) und ich möchte damit einen Verzeichnisbaum in einem TTreeView-Objekt in einem anderen Formular erstellen.

Klappt eigentlich(!) auch wunderbar, indem ich aus dem Hauptformular rekursiv das IdFTP-Objekt anzapfe und die Ordner dann in das andere Formular übertrage.

Hier mal die beiden wichtigsten Funktionen dazu:

Code:
function ListDirs(var IdFTP : TIdFTP) : TStringList;
* var
* * StrFTP : TStringList;
* * i : integer;
begin
* StrFTP := TStringList.Create;
* IdFTP.List(StrFTP, '', false);
* for i := (StrFTP.Count - 1) downto 0 do
* * if (StrFTP.Strings[i] = '') or
* * * *(StrFTP.Strings[i] = '.') or
* * * *(StrFTP.Strings[i] = '..') or
* * * *(Pos('.', StrFTP.Strings[i]) <> 0) then
* * * StrFTP.Delete(i);
* ListDirs := StrFTP;
end;

procedure FillTree(parent : TTreenode; var Tree : TTreeView; var IdFTP : TIdFTP);
* var
* * StrFTP : TStringList;
* * Node : TTreeNode;
* * i : integer;
begin
* try
* * StrFTP := ListDirs(IdFTP);
* except
* * exit;
* end;
* for i := 0 to StrFTP.Count - 1 do
* begin
* * Node := Tree.Items.AddChild(parent, StrFTP.Strings[i]);
* * IdFTP.ChangeDir(Node.Text);
* * FillTree(Node, Tree, IdFTP);
* * IdFTP.ChangeDirUp;
* end;
end;
Leider dauert das ganze bei vielen Ordnern verdammt lange! Also hatte ich mir überlegt, ich lade einfach bei Bedarf, also bei jedem "Anklicken eines Knotens" (onChange) in der Treeview, die entsprechenden Unterordner hinzu. Und jetzt tritt das eigentliche Problem auf:

Ich kriege ums Verrecken keinen Zugriff aus dem zweiten Formular auf das IdFTP-Objekt in der Hauptunit, sodass ich darauf Operationen wie ChangeDir anwenden könnte (Kommt immer Zugriffsverletzung, etc.)!

Ich bräuchte also entweder eine Lösung, die das Auflisten der Ordnerstruktur performanter, oder den problemlosen Zugriff auf das IdFTP-Objekt aus anderen Units ermöglicht.

Bin für jeden Lösungsvorschlag dankbar!

Gruß,
Lucas
  Mit Zitat antworten Zitat