![]() |
INDY ftp.list problem
Hallo,
wollte (in D 2009) mal schnell einen ftp-Zugriff realisieren und stehe auf dem Schlauch
Delphi-Quellcode:
Tja und tOrders ist immer leer.
tOrders := TStringList.Create;
IdFTP1.Connect; if IdFTP1.Connected then begin IdFTP1.ChangeDir('/IN'); try IdFTP1.List(tOrders); except // Fehlerbehandlung end; end; Die Analyse sagt dass ich auf Connetion Closed Gracefully stosse, das Verzeichnis enthält aber Dateien und im filezilla geht es ohne Probleme Wieso geht die Connection flöten oder was sehe ich nicht? Danke für Eure Hilfe |
Re: INDY ftp.list problem
Hallo Martin,
Zitat:
Kannst Du auch mal per Netzwerk Sniffer (SmartSnif, Wireshark o.ä.) gucken, was passiert? Gruß Assertor |
Re: INDY ftp.list problem
Guten Morgen,
und die Zugangsdaten (Username, Passwort) stimmen? Grüße Klaus |
Re: INDY ftp.list problem
Hi,
wie ich das sehe gibt es von List in IdFTP.PAS zwei überladene Funktionen:
Delphi-Quellcode:
procedure TIdFTP.List;
begin List(nil); end; procedure TIdFTP.List(const ASpecifier: string; ADetails: Boolean); begin List(nil, ASpecifier, ADetails); end; Ich habe das so gemacht um eine Datei einzulesen (D2009):
Delphi-Quellcode:
var
TFS: TFileStream; begin TFS := TFileStream.Create(cFTPSupplierFile, fmCreate); try // Verbinden: try IdFTP1.Connect; Application.ProcessMessages; IdFTP1.List; IdFTP1.Get(cMyFile, TFS, False); TFS.Seek(0, soFromBeginning); // an den Anfang setzen ..... except Result := False; end; finally .... end; end; Um ein Verzeichnis einzulesen, schau Dir mal die Property "ListResult" an. Gruß Gerald |
Re: INDY ftp.list problem
Hallo,
vielen Dank für die Hinweise. @Klaus: Die Zugangsdaten stimmen, der Connect läuft sauber, auch der Wechsel der Verzeichnisse, kann ich auch über retrieveDir oder so anzeigen lassen @Assertor: die IdAllFTPListParsers habe ich eingebunden, keine Änderung des Verhaltens @Gerald: auch ListResults liefert keine Ergebnisse Für mich sieht es so aus, als ob durch die Listanfrage die Connection geschlossen würde, die Art des Servers kenne ich nicht. Es ist der Zugang eines Dienstleisters zur Übertragung von EANCOM Daten und es gibt viele andere User die offensichtlich kein Problem haben. Gruß Martin |
Re: INDY ftp.list problem
Hallo Martin,
bekommst Du die Exception nur zu sehen, wenn Du Dein Programm in der IDE laufen lässt? Wie schaut es es aus, wenn Du es ausserhalb der IDE startest. Hier noch ein ![]() Grüße Klaus |
Re: INDY ftp.list problem
Klaus, danke für den Hinweis.
Die Sache mit dem Debugger hatte ich schon gesehen, steht ja auch in der Source von Indy gut beschrieben drin. Dein Verweis auf den anderen Thread entnehme ich, dass es sehr wohl ein Problem der Gegenseite sein könnte. Meine Erkundungen haben ergeben dass auf der Gegenseite ein Filezilla-Server sitzt, leider ist der dafür Zuständige erkrankt. Gruß Martin |
Re: INDY ftp.list problem
:duck:
Auch ein anderer Server reagiert gleich. Wer schafft es mit Delphi 2009 ein Verzeichnis eines FTP-Servers auszulesen? Wäre für jeden Hinweis dankbar. Gruß Martin |
Re: INDY ftp.list problem
Hallo,
noch ein Hinweis, das Abholen einer Datei mittels ftp.Get funktioniert einwandfrei. Es ist also kein Zugangsthema oder so. Lediglich das Abrufen der überhaupt im Verzeichnis vorhandenen Dateien funktioniert in keinster Weise. Nutzt das denn niemand? Es scheint mir wirklich ein Problem von Indy zu sein. :wall: Gruß Martin |
Re: INDY ftp.list problem
Also ich kann ohne Probleme mit Delphi 2009 ein List ausführen...
Liegt dein Fehler vielleicht in dem Slash beim Changedir? IdFTP1.ChangeDir('/IN'); also beim code (einfach so dahin geklatscht, keine Fehlerbehandlung) sieht so aus:
Delphi-Quellcode:
Edit:
procedure TForm1.Button1Click(Sender: TObject);
var s: TStringList; i: integer; begin s:=TStringList.Create; idftp1.Connect; idftp1.ChangeDir('html'); idftp1.List(s); for i := 0 to s.Count - 1 do begin showmessage(s[i]); end; end; FTP Server: vsFTPd 2.0.7 Zielsystem: Debian Edit2: ich benutze übrigends die Indy 10.2.5 |
Re: INDY ftp.list problem
Hast du die nötigen Rechte, um die Dateien aufzulisten? Funktioniert es mit einem anderen FTP-Client?
|
Re: INDY ftp.list problem
Das hat er ja bereits schon im 1. Post geschrieben
Zitat:
|
Re: INDY ftp.list problem
Ok, überlesen.
|
Re: INDY ftp.list problem
Danke für die Hinweise,
es muss definitiv am List liegen, ich habe auch auf der Indy-Projectsite einen Hinweis gefunden, dass der List-Befehl in Version 10 ganz neu implementiert wurde. Dafür gibt es jetzt einen Parser mit vielen verschiedenen Listformaten. Es ist mir aber nicht klar, welches er zieht, offensichtlich gibt es da in den neueren Versionen auch verbesserungen. Ich habe noch die Originalversion von D 2009 (Wo kann man diese Versionsnummer denn auslesen?) Werde mal versuchen auf die neueste Version upzudaten. Gruß Martin |
Re: INDY ftp.list problem
Zitat:
Rechtsklick auf die idftp Komponente, dann steht dort ein entsprechender Hinweis im Popup Menü. |
Re: INDY ftp.list problem
Danke, ja ich habe auch die 10.2.5 und trotzdem bekomme ich nie etwas zurückgeliefert.
Die Variable TStrings bleibt immer leer und der Hinweis in der Indy-Source besagt, dass die Connection geschlossen wurde. Und mit Filezilla geht es aber wunderbar.... Gruß Martin |
Re: INDY ftp.list problem
Versuch mal rauszubekommen, was für eine Software auf dem Server läuft.
|
Re: INDY ftp.list problem
ich könnte dir ja mal einen zugang zu meinem ftp server einrichten, damit du schauen kannst, ob es tatsächlich am server liegt, oder an deinem code...
wenn interesse besteht, melde dich einfach per pn |
Re: INDY ftp.list problem
Nach meiner Info Filezilla als Server,
aber auch ein anderer FTP-Server unter Windows IIS geht nicht. Gruß Martin |
Re: INDY ftp.list problem
Hmmm ...
Ich habs bis jetzt ungefähr so gemacht:
Delphi-Quellcode:
Das -a sorgt dafür, dass auch versteckte Dateien angezeigt werden.
FFtp.SendCmd('TYPE A');
FFtp.List (nil, '-a', True); for i := 0 to FFtp.ListResult.Count - 1 do // Mach was mit FFtp.ListResult[i] |
Re: INDY ftp.list problem
also wir haben bereits herausgefunden, dass -wenn man eine stringliste als paramter übergibt- diese stringliste als TStringList deklariert sein muss und nicht als TStrings. Bei TStrings scheint es zu krachen...
|
Re: INDY ftp.list problem
Hallo Martin,
Zitat:
Testcode:
Delphi-Quellcode:
Also nur ein leeres VCL Projekt mit dem IdFTP.
IdFTP1.Host := 'ftp.**.de'; // mein FTP Server
IdFTP1.Username := '**'; // ... IdFTP1.Password := '**'; // ... IdFTP1.Connect; IdFTP1.List; ShowMessage(IdFTP1.ListResult.Text); Die Info auf den meisten Indy Seiten ist mangels Betreuer veraltet. Indy 10 ist ja nun schon ein paar Järchen da... Deshalb meine Bitte nochmal: Teste mal bitte mit einem Protokoll/Netzwerk-Sniffer, was bei Dir passiert. Ob eine lokale Firewall o.ä. da im Weg steht, vielleicht auch ein NAT-Router. Ohne Analyse des Netzwerkverkehrs wirst Du da nicht weiterkommen! Viele Grüße, Assertor |
Re: INDY ftp.list problem
Hallo Morphie,
Zitat:
Gruß Assertor |
Re: INDY ftp.list problem
Hallo,
das Problem ist gelöst, auch wenn ich nicht mehr ganz genau sagen kann, auf welchem Wege. Es war wohl eine Kombination aus benötigtem passive Modus, firewall und .... idfp.list funktioniert im Übrigen sowohl mit TStrings als auch mit Tstringlist. Nur wenn das Ergebnis über ListResult abgeholt wird ist TStrings zwingend. Dafür scheint die überladene Definition von List mit Filter und Details nicht zu greifen, es kommt immer das Gesamtergebnis. Aber das ist nicht schlimm, ich kann es ja nachher filtern. Vielen Dank für die Hilfe, insbesondere an morphie. Danke und Gruß :hi: Martin |
Re: INDY ftp.list problem
Es sollte definitiv ein Nachfahre von TStrings sein um zu verhindern das es kracht. Denn TStrings ist eine Basisklasse mit recht vielen abstrakten Methoden. Wenn du weiterhin eine Instanz von TStrings übergibst brauchst du dich nicht wundern wenn an irgend einer Stelle etwas nicht funktioniert.
|
Re: INDY ftp.list problem
Hallo Martin,
Zitat:
Zitat:
IdFTP.List() gibt es in 3 Varianten: 1) procedure TIdFTP.List; 2) procedure TIdFTP.List(const ASpecifier: string; ADetails: Boolean); 3) procedure TIdFTP.List(ADest: TStrings; const ASpecifier: string = ''; ADetails: Boolean = True); bei 1) und 2) laden die Resultate in IdFTP.ListResult und bei 3) in Deinem eigenen TStrings-Nachfahren. ADetails steuert nur, ob z.B. die Verzeichnis/Gruppenrechte ausgelesen werden. Wenn hier trotzdem Details kommen, muß da von uns geprüft werden. Das könnte ein Bug sein. Für das korrekte Parsing der Liste (es gibt ja viele FTP Server die beim Listenresult abweichen) immer wie oben erwähnt die IdAllFTPListParsers einbinden. Dann werden entsprechende Behandlungen für VMS & Co eingebunden. Zu den TStrings/StringList, aus der englischen D2009 OH: Zitat:
Roter Kasten: SirThornberry war schneller ;) Gruß Assertor |
Re: INDY ftp.list problem
Zitat:
verwende ich nur TStrings, bekomme ich sofort folgenden Fehler: --------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt Project1.exe ist eine Exception der Klasse EAbstractError mit der Meldung 'Abstrakter Fehler' aufgetreten. --------------------------- Anhalten Fortsetzen Hilfe --------------------------- verwende ich TStringList, funzt es ohne probleme. Fazit: man sollte -wie Assertor bereits erwähnte- einen nachfahren verwenden. |
AW: INDY ftp.list problem
Ich habe den gleichen oder mindestens einen ähnlichen Fehler wie im Ursprungsposting beschrieben. List mit indys FTP Client funktioniert nicht.
Delphi 2009 Indy 10.5.8 Problem (Source aufs Wesentliche gekürzt und Fehlerbehandlung entfernt):
Delphi-Quellcode:
Anmeldung am Server funktioniert
IdFTP1.Host:= Edt_server.Text;
IdFTP1.Username:= Edt_User.Text; IdFTP1.Password:= Edt_Password.Text; IdFTP1.Connect; IdFTP1.ChangeDir(Edt_Directory.Text); IdFTP1.List; // Fehler: Gleitkommadivision durch Null //Idftp1.list(mylist); //Fehler: Gleitkommadivision durch Null //Idftp1.list(mylist, '', True); //Fehler: Gleitkommadivision durch Null //Idftp1.list(mylist, '', False); //Fehler: Gleitkommadivision durch Null ChangeDir funktioniert Put und Get funktionieren problemlos Mit Overbyte ICS funktioniert auf dem gleichen Rechner und gleichen Server der Zugriff per FTP problemlos, nur erlauben mir die Programmspezifikationen die Verwendung von ICS nicht. Unter Delphi 7 funktioniert obiger Code mit indy problemlos. Ich habe bereits mit allen Properties von IdFTP rumgespielt, Firewalls ausgeschaltet, Indy aktualisiert, aber nichts brachte Erfolg. Hat jemand einen Tip was ich noch versuchen könnte? [edit] Fehler für Gleitkommadivision gefunden, war ein Fehler von mir, hatte noch was in IdFTP1Work drin, aber die Liste ist immer noch leer![/edit] [edit2] Problem gelöst! Ein Update des FTP-Servers brachte die Lösung![/edit2] |
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