![]() |
Rekursiver Aufruf von FTPFindFirstFile
Hallo allerseits,
ich möchte mittels FTPFindFirstFile ein Server-Verzeichnis mit allen Unterverzeichnissen einlesen und in einer TreeView speichern. Die erste Ebene funktioniert auch einwandfrei, nur ein rekursiver Aufruf von FTPFindFirstFile schlägt insofern fehl, dass die Routine nil zurückliefert, also keine weiteren Daten. Jetzt meine Fragen: 1. Weiss jemand, wie man FTPFindFirstFile rekursiv aufrufen kann? 2. Sollte dies nicht möglich sein, kennt jemand eine Möglichkeit, mittels Indy (List) in eine TreeView zu speichern? mfg Herbert |
Re: Rekursiver Aufruf von FTPFindFirstFile
Hast du vielleicht "\" anstelle von "/" als Trennzeichen verwendet?
Zeig mal Sourcecode! |
Re: Rekursiver Aufruf von FTPFindFirstFile
Hier der entsprechende Quellcode:
Delphi-Quellcode:
Wie gesagt, die erste Verzeichnisebene wird richtig in den Tree geschrieben. Der rekursive Aufruf gibt bei hSearch nil zurück.
procedure TForm1.FindFilesTree(aTree: tTreeView; aPath: string; aNode: tTreeNode; aWithFiles: boolean);
var NodeTmp: tTreeNode; Info: pNodeInfo; hSearch: HINTERNET; findData: WIN32_FIND_DATA; begin aTree.Items.BeginUpdate; if aPath = '' then aPath := '/'; if aPath[Length(aPath)] <> '/' then aPath := aPath + '/'; if FTPSetCurrentDirectory(hConnect, PChar(aPath)) then begin hSearch := FTPFindFirstFile(hConnect, nil, findData, INTERNET_FLAG_DONT_CACHE, 0); if hSearch = nil then begin ; // Fehler end else begin repeat if findData.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then begin // Eintrag = Verzeichnis if (findData.cFileName[1] <> '.') then begin New(Info); Info^.Path := true; Info^.Name := aPath + findData.cFileName; // zum aktuellen Eintrag hinzufügen aNode := aTree.Items.AddChildObject(aNode, findData.cFileName, Info); end; // Knoten merken NodeTmp := aNode.Parent; // rekursiver Aufruf FindFilesTree(aTree, aPath+findData.cFileName, aNode, aWithFiles); // Gemerkten Knoten lesen aNode := NodeTmp; end else begin // Eintrag = Datei if aWithFiles then begin ; end; end; until not InternetFindNextFile(hSearch, @findData); InternetCloseHandle(hSearch); end; end; aTree.Items.EndUpdate; end; mfg Herbert |
Re: Rekursiver Aufruf von FTPFindFirstFile
muss es unbedingt mit FTPFindFirstFile sein?
Hab hier was mit den standard Indy (v. 10) Kompos gemacht...
Delphi-Quellcode:
musste deinen vorstellungen evtl. noch anpassen aber funktioniert auch rekursiv :-)
procedure TWorkerThread.ListDir(dir: String; const tv: TTreeView; var tn: TTreeNode);
var itm: TIdFTPListItems; i: Integer; node: TTreeNode; tmp: string; begin thread.ftp.ChangeDir(dir); thread.ftp.List; itm := thread.ftp.DirectoryListing; for i := 0 to itm.count-1 do begin if itm.Items[i].ItemType = ditDirectory then begin node := form1.treeview1.Items.AddChild(tn, itm.Items[i].Filename); listdir(itm.items[i].filename, form1.treeview1, node); ftp.ChangeDirUp; ftp.list; itm := thread.ftp.DirectoryListing; end else form1.treeview1.Items.addChild(tn, itm.Items[i].filename+' ['+inttostr(itm.items[i].size)+']'); end; end; MfG |
Re: Rekursiver Aufruf von FTPFindFirstFile
Hallo p0w3r5tr34m3r,
vielen herzlichen Dank. Nachdem diese Routine vom Prinzip her gleich auf Anhieb funktionierte, habe ich mich doch entschlossen, das ganze mit Indy(10) zu verwirklichen. Hier dürfte Indy doch die Nase vorne haben. mfg Herbert |
AW: Rekursiver Aufruf von FTPFindFirstFile
hi,
bin noch neu im thema delphi. wie ruf ich denn die procedure auf? so gehts leider nicht:
Delphi-Quellcode:
ListDir('/public_html/install2/',Treeview1,'/');
Code:
[DCC Error] Unit1.pas(1806): E2010 Incompatible types: 'TTreeView' and 'TTreeNode'
|
AW: Rekursiver Aufruf von FTPFindFirstFile
Wie sieht denn Deine Prozedur aus, die aus #4 kann es ja nicht sein ... dann wäre der 3. Parameter falsch, nicht der 2.
|
AW: Rekursiver Aufruf von FTPFindFirstFile
hi, doch, der aus #4.
ich habe noch nie mit nodes und treeview gearbeitet, deswegen weiss ich nich in wie fern da was hin muss. |
AW: Rekursiver Aufruf von FTPFindFirstFile
Ich hab's jetzt auch nicht im Kopf, aber die OH oder ein Tutorial zum TTreeView wird bestimmt helfen. (alternatif auch die Forensuche)
|
AW: Rekursiver Aufruf von FTPFindFirstFile
die Meldung wenn o.g. Prozedur verwenden würdest wäre
Code:
Deine Prozedur scheint als 2. Parameter eine Treenode zu erwarten ...
[DCC Fehler] xxxx.pas(30): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz