Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi FTP-Übertragung "sanft" beenden (https://www.delphipraxis.net/85152-ftp-uebertragung-sanft-beenden.html)

FordPerfekt 26. Jan 2007 16:25


FTP-Übertragung "sanft" beenden
 
Hallo,

Schreibe schon länger ein kleines Programm, welches Bilder per FTP hochläd.
Dazu habe ich diese Schleife:
Delphi-Quellcode:
procedure upl;
var
i:integer;
begin
abort:=false;
if connection_state = true then
  begin
    for I := 0 to Listbox1.items.Count - 1 do
    begin
    if abort=true then
     begin
     idftp1.Abort;
     logform.Memo1.Lines.Add(timetostr(now)+': Canceled upload by user');
     end
     else
     begin
     //bilder werden nacheinander durchgegangen und dann hochgeladen... Logfile wird mit daten gefüttert
     idftp1.Put(listbox1.Items[i],ExtractFileName(listbox1.Items[i]),false);
     logform.Memo1.Lines.Add(timetostr(now)+': Added URL:'+ remoteurl+ExtractFileName(listbox1.Items[i]));
      end;
    end;
  end;
end;
Wenn ich nun nen Button drücke und somit abort=true habe kommt diese Meldung:
Zitat:

Im Project blablabla ist eine Exception der Klasse EIdReplyRFCError mit der Meldung 'Timeout (No new data for 900 seconds)' aufgetreten.
Wie kann ich das lösen, dass er das hochladen abbricht?


mfg
Ford

marabu 26. Jan 2007 16:38

Re: FTP-Übertragung "sanft" beenden
 
Hallo,

ich kann noch gar nicht erkennen, dass dein Button-Click die globale Variable abort wirklich setzt. Immerhin stellt deine Zählschleife einen tight loop dar - die Kontrolle wird nie an Windows abgegeben, z.B. über Application.ProcessMessages().

Grüße vom marabu

IngoD7 26. Jan 2007 17:00

Re: FTP-Übertragung "sanft" beenden
 
Als allererstes würde ich bei abort=true sofort die Schleife verlassen.
TIdFTP.Abort kannst du dann immer noch außerhalb der Schleife ausführen. Vorteil: Du führst es nur einmal aus, und nicht - so wie jetzt - für jedes verbleibende File in der Schleife.

Möglicherweise wurde das TIdFTP.Abort sowieso nie während der Übertragung eines Files ausgelöst, sondern immer nur davor, wenn er in der Schleife zum nächsten File wollte. Soll heißen: Möglicherweise wurde TIdFTP.Put erst zuende ausgeführt, bevor der nächste Schleifendurchlauf anlief und er überhaupt gemerkt hat, dass Abort=true ist.

Wenn du sicher gehen willst, dass mit Button-Click wirklich abgebrochen wird, dann baue das TIdFTP.Abort direkt in die Click-Routine des Buttons ein. Vielleicht ist das aber ja auch gar nicht nötig und du kannst durchaus erlauben, dass er das gerade angefangene File zuende überträgt? Dann brauchst du TIdFTP.Abort gar nicht. In jedem Fall aber musst du trotzdem in der Click-Routine des Buttons das Abort-Flag setzen und die Schleife verlassen.

Versuche mal, ob das etwas bringt.

FordPerfekt 27. Jan 2007 08:44

Re: FTP-Übertragung "sanft" beenden
 
Hi,

Also Danke für die Antworten!

Ich habe jetzt einmal das IDFtp1.Abort schon bei der Button-Click Routine aufgerufen. - Selbe Meldung!

Da ich noch nie etwas mit FTP gemacht habe, weiß ich leider nicht, wie ich es Windows übergeben kann. Ich weiß auch nicht was das für Vorteile bringt!

mfg
Ford

Daniel G 27. Jan 2007 09:41

Re: FTP-Übertragung "sanft" beenden
 
Zitat:

Zitat von FordPerfekt
Da ich noch nie etwas mit FTP gemacht habe, weiß ich leider nicht, wie ich es Windows übergeben kann. Ich weiß auch nicht was das für Vorteile bringt!

Keine nennenswerten. Aber FTP ist eigentlich eins der einfachsten Protokolle. Vllt. schaust du dich mal hier um:

http://www.cryer.co.uk/brian/delphi/wininet.htm

SirThornberry 27. Jan 2007 09:42

Re: FTP-Übertragung "sanft" beenden
 
Wie bereits erwähnt macht dein "Abort" überhaupt keinen Sinn. Du rufst es zwischen FTP-Anweisungen auf wenn also FTP-Mäßig gar nix am werkeln ist. Zu dem Zeitpunkt kannst du auch einfach über ein normales Disconnect die Verbindung beenden und einfach nichts mehr danach machen. Das Abourt würde nur Sinn machen wenn du eine Übertragung mitten drin abbrechen wölltest. Aber in der Programmierung ist es eben im Normalfall so das Anweisungen nacheinander abgearbeitet werden und das ist bei dir zur Zeit der Fall. Wenn du mit Put also etwas auf den Server schiebst wird deine nächste Anweisung erst ausgefüht wenn diese operation vollständig abgeschlossen ist. Und dann macht eben dieses Abort überhaupt keinen Sinn mehr.

FordPerfekt 27. Jan 2007 10:22

Re: FTP-Übertragung "sanft" beenden
 
Delphi-Quellcode:
 Wie bereits erwähnt macht dein "Abort" überhaupt keinen Sinn. Du rufst es zwischen FTP-Anweisungen auf wenn also FTP-Mäßig gar nix am werkeln ist. Zu dem Zeitpunkt kannst du auch einfach über ein normales Disconnect die Verbindung beenden und einfach nichts mehr danach machen. Das Abourt würde nur Sinn machen wenn du eine Übertragung mitten drin abbrechen wölltest. Aber in der Programmierung ist es eben im Normalfall so das Anweisungen nacheinander abgearbeitet werden und das ist bei dir zur Zeit der Fall. Wenn du mit Put also etwas auf den Server schiebst wird deine nächste Anweisung erst ausgefüht wenn diese operation vollständig abgeschlossen ist. Und dann macht eben dieses Abort überhaupt keinen Sinn mehr.
Habs jetzt verstanden! ABER: Wenn ich eine große Datei habe und 100%ig während er hochläd auf Abort drücke kommt die gleiche Meldung! Aber er ist doch zu diesem Zeitpunkt gerade am hochladen?!

Werd mir mal den Link von Daniel G anschauen!

mfg
Ford

IngoD7 27. Jan 2007 14:37

Re: FTP-Übertragung "sanft" beenden
 
Zitat:

Zitat von FordPerfekt
Habs jetzt verstanden! ABER: Wenn ich eine große Datei habe und 100%ig während er hochläd auf Abort drücke kommt die gleiche Meldung! Aber er ist doch zu diesem Zeitpunkt gerade am hochladen?!

Kommt die Meldung sofort mit dem Button-Click, oder erst nach einiger Zeit?

FordPerfekt 27. Jan 2007 15:40

Re: FTP-Übertragung "sanft" beenden
 
Da die CPU-Last ziemlich hoch ist dauerts ein wenig aber max ne Sekunde!

mfg
Ford

Die Muhkuh 27. Jan 2007 15:42

Re: FTP-Übertragung "sanft" beenden
 
Ich werfe mal das Stichwort Hier im Forum suchenThread in den Raum, wenn Du den Upload unabhängig vom Rest machen willst. Mit dem Thread kannst Du dann auch den Upload abbrechen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:18 Uhr.
Seite 1 von 2  1 2      

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