Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy FTP Exception (https://www.delphipraxis.net/6064-indy-ftp-exception.html)

RobertS 28. Jun 2003 09:49


Indy FTP Exception
 
Morgen!

Habe gerade ein dickes Problem, und zwar ich lege ich mit meinem Programm verschiedene Ordner auf einem FTP an.
Das Verzeichnis wird auch angelegt doch leider kommt dann eine Fehlermeldung "Directory Created" und das Programm stürzt ab..

Woran liegt das muss ich noch irgendetwas übergeben bzw. etwas einstellen??

Hier mein Code..

Code:
...
  ftp.Connect();
if ftp.Connected then begin
 ftp.ChangeDir('/gallery');
 ftp.TransferType:= ftBinary;
 try
  ftp.MakeDir(ng_2.galleryname.Caption);
 except
  showmessage('-');
 end;
 c_makefolder.Checked:=True;
 ftp.ChangeDir('/gallery/'+ng_2.galleryname.Caption);
 try
  ftp.MakeDir('thumbs');
 except
  showmessage('-');
 end;
end;
....
Danke im voraus...
mfg Robert

RobertS 28. Jun 2003 10:24

Nachtrag:

Ich habe das Programm mal mit andern FTP Daten gestartet (Schlund+Partner FTP) das funktioniert alles reibungslos!

Doch auf dem andern (Strato FTP) kommt diese Meldung :?: :?: :?:
Liegt also nicht an mir:!:

Hat damit schon jemand Erfahrungen?

Danke im Voraus!

negaH 28. Jun 2003 11:01

Welche Fehlermeldung kommt denn ?
Hilfreich wäre ein Protokollausschnitt mit den Server Meldungen.

Manche FTP Komponenten parsen das FTP Protokoll nicht richtig.
Zusätzlich entstehen Probleme mit verschiedenen FTP Servern.
In Deinem Falle z.B. kann es sein das ein Useraccount zwar Ordner anlegen darf, dieser neue Ordner aber dann keine Zugriffsrechte erbt.
Anlegen ist also möglich, Zugriff aber nicht !

Gruß Hagen

RobertS 29. Jun 2003 13:33

Die meiner Meinung nach schwachsinne Fehlermeldung lautet:

Directory created

negaH 29. Jun 2003 14:09

Hm, der FTP-Returncode wäre hilfreicher.
Es müsste aber ein 2xx Code sein, und diese sind keine Fehlercodes sondern Bestätigungscodes das der Server die Aktion erfolgreich ausgeführt hat.

Es sieht wohl so aus das der FTP Server eine zusätzliche Message nachschickt, und deine FTP Komponente damit nicht korrekt umgehen kann.

Falls es die aus dem INDY Package ist dann kann ich bestätigen das diese teilweise nicht korrekt parsed.

es müsste

257 Directory created

sein. Verschiedene Server schicken zusätzliche Infos mit, etwa so

257-"PATHNAME" created
257 Directory created

Genau hier haben aber einige Komponenten Probleme, da sie das FTP Protokoll viel zu starr und unflexibel parsen.
Ich habe einige FTP Komponenten getestet und mich letzendlich für zwei Wege entschieden:
1.) auf Palms und Windows per Sockets selber das FTP Protokoll umgesetzt, ist eigentlich nicht so schwierig
2.) auf Windows die FTPxxxx Funktionien benutzt

Nun, es spricht auf Server Seite aber nichts dagegen einen eigenen Messagecode zu benutzen. Solange er im Bereich von 200-299 liegt, heisst das der Befehl ausgeführt wurde. Die Probleme mit den FTP Komponenten entstehen aber genau in diesem Moment. Sie parsen auf einen festen Returncode, z.b. eben 257, statt zu checken ob der Code zwichen 200-299 liegt. Diese "Fehlinterpretation" des FTP protokolls entsteht durch die Protokolldefinition in den RFC's selber. Dort sind eine Art von Beispielstruktogrammen abgebildet die dazu führen das man annehmen muß das exakt 257 vom Server als Bestätigung geschickt werden muß.
Ich habe einige FTP Sourcen studiert und alle gehen von dieser falschen Annahme aus.

Falls deine FTP Komponente den geparsten Returncode zwischenspeichert, und dann erst die Exception raised, kannste ja im SEH diesen Code selber auswerten. Falls er zwischen 200-299 liegt ist alles ok.

Gruß Hagen


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz