![]() |
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:
Wenn ich nun nen Button drücke und somit abort=true habe kommt diese Meldung:
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; Zitat:
mfg Ford |
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 |
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. |
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 |
Re: FTP-Übertragung "sanft" beenden
Zitat:
![]() |
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.
|
Re: FTP-Übertragung "sanft" beenden
Delphi-Quellcode:
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?!
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.
Werd mir mal den Link von Daniel G anschauen! mfg Ford |
Re: FTP-Übertragung "sanft" beenden
Zitat:
|
Re: FTP-Übertragung "sanft" beenden
Da die CPU-Last ziemlich hoch ist dauerts ein wenig aber max ne Sekunde!
mfg Ford |
Re: FTP-Übertragung "sanft" beenden
Ich werfe mal das Stichwort
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:47 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