AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Rekursiver Aufruf von FTPFindFirstFile
Thema durchsuchen
Ansicht
Themen-Optionen

Rekursiver Aufruf von FTPFindFirstFile

Ein Thema von hsbc · begonnen am 5. Jun 2008 · letzter Beitrag vom 18. Mär 2012
Antwort Antwort
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#1

AW: Rekursiver Aufruf von FTPFindFirstFile

  Alt 18. Mär 2012, 12:14
die Meldung wenn o.g. Prozedur verwenden würdest wäre
Code:
[DCC Fehler] xxxx.pas(30): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
Deine Prozedur scheint als 2. Parameter eine Treenode zu erwarten ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#2

AW: Rekursiver Aufruf von FTPFindFirstFile

  Alt 18. Mär 2012, 13:30
Ich weiß nicht was daran so schwer ist, mal kurz selber in die OH zu schauen? Das wäre schneller gegangen, als hier zu fragen und andere erst nachsehn lassen zu müssen.

In deiner Funktion findest du, daß dieses aNode an AddChildObject übergeben wird und da kann man nachlesen, daß man für NIL angeben kann/muß, wenn man zum Beispiel den Rootknoten haben möchte, bzw. einen Hauptknoten erstellen will.
Beim TTreeView gibt man NIL an, wärend man z.B. beim VirtualTreeView das RootNode-Property verwendet, wenn ich mich richtig erinnere.

Und genau dafür gibt es Tutorials und die OH.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (18. Mär 2012 um 13:33 Uhr)
  Mit Zitat antworten Zitat
momo54321

Registriert seit: 18. Mär 2012
16 Beiträge
 
#3

AW: Rekursiver Aufruf von FTPFindFirstFile

  Alt 18. Mär 2012, 13:40
das angeben von nil geht allerdings auch nur wenn man im proceduren kopf das var entfernt.
nil hatte ich ja schon ausprobiert und es ging nicht, siehe Fehler:
[DCC Error] Unit1.pas(1837): E2033 Types of actual and formal var parameters must be identical


also, so funktioniert der kram zumindest bei mir nun:
Delphi-Quellcode:
procedure ListDir(dir: String; const tv: TTreeView; tn: TTreeNode);
var
  itm: TIdFTPListItems;
  i: Integer;
  node: TTreeNode;
  tmp: string;
begin
  Form1.ftp.ChangeDir(dir);
  Form1.ftp.List;
  itm := Form1.ftp.DirectoryListing;
  for i := 0 to itm.count-1 do begin
  //showmessage(InttoStr(itm.count-1)); // Showmessage
    if itm.Items[i].ItemType = ditDirectory then begin
      if itm.Items[i].Filename <> '.then begin
      node := tv.Items.AddChild(tn, itm.Items[i].Filename);
      //showmessage(itm.Items[i].Filename + ' / L: ' + IntToStr(Length(itm.Items[i].Filename))); // Showmessage
      listdir(itm.items[i].filename, tv, node);
      Form1.ftp.ChangeDirUp;
      Form1.ftp.list;
      itm := Form1.ftp.DirectoryListing;
      end;
    end
    else
      form1.treeview1.Items.addChild(tn, itm.Items[i].filename+' ['+inttostr(itm.items[i].size)+']');
  end;
end;

procedure TForm1.PngSpeedButton1Click(Sender: TObject);
begin

FTP.Host := FTP.Text;
FTP.Port := StrToInt(FTPport.Text);
FTP.Username := FTPlogin.Text;
FTP.Password := FTPpw.Text;

FTP.Connect;

ListDir('/public_html/install2/', Treeview1, nil);

FTP.Disconnect;
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#4

AW: Rekursiver Aufruf von FTPFindFirstFile

  Alt 18. Mär 2012, 13:50
Jupp, das VAR ist dort sowieso falsch.
Ich war aber eh von dem ursprünglichen procedure TForm1.FindFilesTree(aTree: tTreeView; aPath: string; aNode: tTreeNode; aWithFiles: boolean); ausgegangen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Rekursiver Aufruf von FTPFindFirstFile

  Alt 18. Mär 2012, 14:09
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:14 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