AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi FTP-Übertragung "sanft" beenden

FTP-Übertragung "sanft" beenden

Ein Thema von FordPerfekt · begonnen am 26. Jan 2007 · letzter Beitrag vom 28. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2   
FordPerfekt

Registriert seit: 16. Nov 2006
20 Beiträge
 
#1

FTP-Übertragung "sanft" beenden

  Alt 26. Jan 2007, 16:25
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: FTP-Übertragung "sanft" beenden

  Alt 26. Jan 2007, 16:38
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
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 16. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: FTP-Übertragung "sanft" beenden

  Alt 26. Jan 2007, 17:00
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.
  Mit Zitat antworten Zitat
FordPerfekt

Registriert seit: 16. Nov 2006
20 Beiträge
 
#4

Re: FTP-Übertragung "sanft" beenden

  Alt 27. Jan 2007, 08:44
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
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#5

Re: FTP-Übertragung "sanft" beenden

  Alt 27. Jan 2007, 09:41
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: FTP-Übertragung "sanft" beenden

  Alt 27. Jan 2007, 09:42
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
FordPerfekt

Registriert seit: 16. Nov 2006
20 Beiträge
 
#7

Re: FTP-Übertragung "sanft" beenden

  Alt 27. Jan 2007, 10:22
 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
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 16. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: FTP-Übertragung "sanft" beenden

  Alt 27. Jan 2007, 14:37
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?
  Mit Zitat antworten Zitat
FordPerfekt

Registriert seit: 16. Nov 2006
20 Beiträge
 
#9

Re: FTP-Übertragung "sanft" beenden

  Alt 27. Jan 2007, 15:40
Da die CPU-Last ziemlich hoch ist dauerts ein wenig aber max ne Sekunde!

mfg
Ford
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#10

Re: FTP-Übertragung "sanft" beenden

  Alt 27. Jan 2007, 15:42
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:07 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