Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi idftp.onwork wird nicht aufgerufen (Indy 9) (https://www.delphipraxis.net/97248-idftp-onwork-wird-nicht-aufgerufen-indy-9-a.html)

iGoA 7. Aug 2007 15:46


idftp.onwork wird nicht aufgerufen (Indy 9)
 
Moin!

Ich habe das Problem, dass beim Upload einer Datei auf den FTP-Server das OnWork-Ereignis nie aufgerufen wird. Ich habe schon die Suchfunktion bemüht, aber nur ein ähnliches Problem mit Bezug auf Indy 9 auf 10 -Umstellung gefunden. Ich benutze aber nur die 9er.
Weiß jemand Rat?

Der verwendete Code sieht vom Prinzip her aus, wie in jedem anderen Beispiel, welches ich hier schon gefunden habe:
Delphi-Quellcode:
procedure TfrmFTPAction.idftpWork(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  lblProgress.caption := inttostr(AWorkCount div 1024) +'KB / '+ inttostr(totalbytes div 1024)+'KB';
  application.processmessages;
end;

procedure TfrmFTPAction.idftpWorkBegin(Sender: TObject;
  AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
  totalbytes := AWorkCountMax;
  lblProgress.caption := '0 / '+ inttostr(totalbytes)+'KB';;
  application.processmessages;
end;

SirThornberry 7. Aug 2007 15:51

Re: idftp.onwork wird nicht aufgerufen (Indy 9)
 
naja, du könntest noch über den umweg gehen eine eigene Streamklasse abzuleiten und darin die bytes mit zu zählen.

iGoA 7. Aug 2007 15:54

Re: idftp.onwork wird nicht aufgerufen (Indy 9)
 
Cool, an so einen Workaround habe ich auch schon gedacht. Ich weiß nur gerade nicht wie. Bin noch Indy-N00b. *g*
Kannst Du auf die schnelle einen Tipp abgeben?

SirThornberry 7. Aug 2007 15:57

Re: idftp.onwork wird nicht aufgerufen (Indy 9)
 
hier wurde der ansatz mal umgesetzt (in diesem Beispiel zur Begrenzung der Downloadgeschwindigkeit)
http://www.delphipraxis.net/internal...=686352#686352

iGoA 7. Aug 2007 16:27

Re: idftp.onwork wird nicht aufgerufen (Indy 9)
 
Uiuiui, ich bekomms nicht hin. Ich habe nun eine Klasse von TFileStream abgeleitet und die read-methode vererbt. Dort steht bisher nur
Delphi-Quellcode:
function TSpecialFileStream.Read(var Buffer; Count: Integer): Longint;
begin
  inherited read(buffer,count);
end;
weil ich das erstmal testen wollte.
Das löst eine Schutzverletzung aus. Was mach ich denn nun falsch?
Wenn ich die Methode nicht vererbe, also einfach nur ne leere Klasse von TFileStream ableite, funktioniert es.


btw: Nee alternative Lösung wäre mir natürlich auch lieb.

iGoA 7. Aug 2007 16:33

Re: idftp.onwork wird nicht aufgerufen (Indy 9)
 
MÖÖÖK! Hat sich erledigt. Hatte das "result :=" vergessen.
Forsche nun weiter...


Vielen Dank übrigens schonmal!

iGoA 8. Aug 2007 09:37

Re: idftp.onwork wird nicht aufgerufen (Indy 9)
 
Wollte vermerken, dass mit dieser Lösung alles klappt. Habe in der Read-Methode meiner eigenen Filestream-Klasse einen Bytecounter mitlaufen lassen und kann so die Fortschrittsanzeige implementieren.

Vielen Dank!

iGoA 8. Aug 2007 09:50

Re: idftp.onwork wird nicht aufgerufen (Indy 9)
 
Entschuldigung, wenn ich hier so rumspamme, aber ich musste feststellen, dass es doch noch nicht so gut läuft:
Dadurch, dass wir hier eine megaschnelle Verbindung zum Server haben, habe ich nicht bemerkt, daß die Fortschrittsanzeige sich scheinbar nur auf das Einlesen der Datei beschränkt, also nicht wirklich den Upload-Fortschritt anzeigt. Er rasselt nämlich anfangs einmal schnell die Zahlen hoch und lädt dann erst zum Server hoch.

Also die Frage bleibt leider doch aktuell:
Wie bekomme ich das OnWork-Event zum Laufen bzw. welchen Workaround für ne Fortschrittsanzeige gibt es?

SirThornberry 8. Aug 2007 10:07

Re: idftp.onwork wird nicht aufgerufen (Indy 9)
 
eigentlich sollte es so implementiert sein das schrittweise gelesen und übertragen wird. (also nicht erst der gesamte Stream gelesen und danach erst übertragen wird). Wenn dem nicht so wäre würde die Festplatte erstmal mächtig rasseln wenn man versucht eine mehrere GB große Datei hochzuladen (und dem ist nicht so).

Das kann man besonders gut beobachten wenn man den Destructor überschreibt und da einen Haltepunkt setzt. Der Stream wird dann auch erst nach Abschluss der Übertragung frei gegeben.

iGoA 8. Aug 2007 10:15

Re: idftp.onwork wird nicht aufgerufen (Indy 9)
 
Hier sieht´s aber definitiv danach aus: Festplatte rödelt fix und die KBytes zählen viel zu schnell hoch. Dateigröße aufm Server bleibt die ganze Zeit 0. Bis er mit dem Einlesen durch ist. Dann steigt die Größe aufm Server erst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:06 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