![]() |
IdFTP DirectoryListing
Hallo folgendes Problem:
Ich hab mithilfe der IdFTP (Indy 10) Komponente einen kleinen Client gebaut, allerdings stehe ich momentan noch vor einem Problem. Und zwar hier mein bisheriger Code:
Delphi-Quellcode:
Geht soweit auch alles, ich möchte aber die Details zu den Ordnern / Files auch haben.
var
vI: Integer; vItem: TListItem; vStrList: TStringList; begin vStrList := TStringList.Create; IdFTP1.Connect(); IdFTP1.List(vStrList,'',false); for vI := 0 to vStrList.Count -1 do begin vItem := listView1.Items.Add; vItem.Caption := vStrList[vI]; end; Label1.Caption := IntToStr(IdFTP1.DirectoryListing.Count); end; Deshalb hab ich bei der Methode List den letzten Parameter auf true gestellt (ADetails), damit auch die Details erscheinen. Wenn ich den Code so lasse, dann stehen im Ordner / Filenamen auch die anderen Details wie Größe / Owner. Naja deshalb hab ich ihn ein wenig umgebaut, wie er meiner Meinung nach funktionieren sollte.
Delphi-Quellcode:
Das komische is, dass DirectoryListing.Count, also die letzte Zeile 0 ausgibt, obwohl DirectoryListing ja gefüllt werden müsste. Hab sicherheitshalber auch in der Indy Hilfe nachgeschaut, da steht sobald auf DirectoryListing zugegriffen wird, wird die Struktur gefüllt. Scheint aber nicht so, irgendwo is da noch ein Hund begraben und ich find ihn ned :(
var
vI: Integer; vItem: TListItem; vStrList: TStringList; begin vStrList := TStringList.Create; IdFTP1.Connect(); IdFTP1.List(vStrList,'',true); for vI := 0 to IdFTP1.DirectoryListing.Count -1 do begin vItem := listView1.Items.Add; vItem.Caption := IdFTP1.DirectoryListing.Items[vI].FileName; end; Label1.Caption := IntToStr(IdFTP1.DirectoryListing.Count); end; Achja wegen SuFu: Gibt zwar einige Threads zu dem Thema, allerdings keinen, der mir zu meinem Problem ne Antwort gibt. Ich weiß nicht mehr weiter. Ich weiß dass ich früher, als ich mit Delphi angefangen hab auch schon mal vor demselben Problem gestanden bin, wobei ich da dann irgendwo im INet eine Demo gefunden hatte, wo ne ListView zur Anzeige der Daten genommen wurde. Nur die find ich jetzt natürlich auch nicht mehr... |
Re: IdFTP DirectoryListing
das Liegt daran das beim abfragen des Directorylistings dieses geleert ist (daran erinnere ich mich zumindest irgendwie). Wenn du also zu einem späteren Zeitpunkt noch darauf zugreifen willst müsstest du dir das ganze in einer anderen Liste sichern oder schauen ob es ein Property etc. gibt um dies abzustellen.
Was ich allerdings nicht verstehe: du übergibst "vStrList" dem ListKommando aber verwendest die Liste dann nie. Desweiteren hab ich nicht gefunden wo du die Liste freigibst. |
Re: IdFTP DirectoryListing
Das ist ein Überbleibel vom alten Codeteil. Habe das nun durch
Delphi-Quellcode:
ersetzt, so ist es glaub ich auch gedacht und so brauch ich die StringList nicht mehr. Mit der Freigabe hast du auch Recht, das hab ich doch glatt vergessen (bin den Garbage Collector von C# gewohnt :D). Allerdings kanns ja daran auch ned wirklich liegen.
IdFTP1.List;
Späterer Zeitpunkt - was heißt das konkret. Ich meine dieser Codeteil wird durchlaufen, wenn man auf den Button klickt und das Listing mache ich ja direkt nachdem verbunden wurde. Das einzige was ich dazu finden kann ist ein Ereignis namens OnCreateFTPList, kann ich mir auch nicht vorstellen... |
Re: IdFTP DirectoryListing
Hallo killer,
sieht gar nicht so aus, als hätte sich viel seit Indy9 geändert. Schau mal hier: ![]() Grüße vom marabu |
Re: IdFTP DirectoryListing
Hmm ja den Thread kenn ich schon, über den bin ich mit der Suche schon gestolpert. Hilft mir auch nicht wirklich.
Aber langsam dämmerts mir, dass ich das Parsing wirklich selber vornehmen muss (Parsing der StringListe)... Das komische is ich bin mir sicher dass ich es früher auch irgendwie geschafft habe. Hab nun 2 Server getestet, auf beiden wird die Struktur nicht gefüllt. Was ich auch nicht normal finde: ich hab hier nen Client, bei dem hat es mal funktioniert, allerdings kann ich den nicht kompilieren und ausführen, da Codeteile fehlen (irgendwelche pas Files) :( Das einzig gute is, dass es auf dem betroffenen Server eigentlich keine Ordner und Files mit Leerzeichen gibt, also kann ich diese da schön trennen...das is aber auch das einzig gute :( Edit: Also bis aufs Datum konnte ichs jetzt gut trennen. Beim Datum is das Problem, dass das im US Format daherkommt also in etwa so: Oct 19 16:12 Sep 20 18:18 Feb 23 2005 // <- wassn das da Ich glaub die beste Möglichkeit is die einzelnen Strings, die ja bei den Leerzeichen getrennt wurden, wieder zusammenzusetzen, damit ich das Datum herkriege. Was das 2005 allerdings da soll frag ich mich sowieso. Laut FlashFXP haben alle Datums auch ne Uhrzeit hmm. Jemand nen Vorschlag? |
Re: IdFTP DirectoryListing
Nur 1 Problem hab ich damit noch: Nun kann ich nicht mehr rausfinden, was ein Ordner und was ein File is und was ein Link is.
Naja Ordner und File is eigentlich ganz einfach, wenn die Funktion GetFileExt nix zurückgibt wirds nen Ordner sein denke ich mal. Nur beim Link wirds schwerer, weil ich nicht weiß, ob der ne bestimmte Extension hat... Ich frage mich nur warum die blöde Collection leer ist. Das Datum krieg ich auch ned wirklich zusammen, weil des in nem komischen Format daherkommt und ich weder mit StrToDate noch EncodeDate weiterkomme. Muss ich wohl das Parse-Ereignis der Komponente selber mal genauer anschauen... Edit: Hab den Fehler per Zufall gefunden. Und zwar hab ich per Google gesucht und so ziemlich alle Seiten durchsucht die ich gefunden hatte. Hab mir danach die Groups noch durchgeschaut und bin dann grad vor 2min auf diesen Text gestoßen: Zitat:
Hab mir die ganze Zeit gedacht, kanns ja wohl nicht sein, dass bei allen 3 Servern die ich probiert hab nix daherkommt. Naja die Parser für LIST haben in dem Fall gefehlt :wink: Wollte es euch nicht vorenthalten falls jemand mal dieses Problem hat / haben wird :) |
Re: IdFTP DirectoryListing
Ich würde mich auf das DirectoyListing nicht verlassen.
In Indy10 werden noch nicht alle Server unterstützt sodass man die Stringliste mit bei LIST übergeben sollte, um sie notfalls selbst parsen zu können. |
Re: IdFTP DirectoryListing
Naja wenn ich selber parsen muss, ist es schnell wieder eingebaut, sind ja nur wenige Zeilen. Allerdings ist die Kompatiblität der Indy Komponente laut einem Entwickler etwa bei 99%, weil da mehrere Parser eingebaut wurden. Der Grund warums bei mir nicht ging, war ja, dass der normale LIST Parser nicht eingebunden war, sondern nur die NLST und MLST Parser (die das Format meiner Server nicht unterstützt haben und deshalb kam auch nix).
Bei mir ist es im Prinzip so, dass im Prinzip einige Server mit dem Client verwendet werden, aber alle benutzen das gleiche Serverprogramm, weshalb das Listing bei allen funktionieren sollte, jetzt da es bei einem geht :) |
Re: IdFTP DirectoryListing
Hallo,
habe auch gut ein gutes Wochenende mit dem Problem gekämpft, bis ich auf diese NG gestoßen bin. Danke, jetzt läufts DGMANN |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 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