![]() |
FTP Indy Komponente, Event OnWork und der Parameter AWorkCount
Guten Abend,
bin gerade dabei in mein Updatemodul eine Dateiübertragung per FTP bzw. HTTP Protokoll zu integrieren. Irgendwie will mir das Feature mit der Progressbar nicht gelingen. Genau genommen gibt es zwei Progressbars. Eine für die einzelne Datei die gerade übertragen wird und eine für den Gesamtfortschritt. Eigentlich ist das was ich nicht hinbekomme ja ein Schönheitsfehler. Meine Progressbar für die Dateien bleibt nach der Übertragung bei 99% stehen und meine Progressbar für den Gesamtfortschritt bei 96%. Es werden zum Test 5 Dateien per FTP Protokoll vom FTP zu dem meinen Rechner übertragen. Der FTP-Server sitzt im lokalen Netz. Die Dateien haben folgende Größen in Byte: 1.874.053.550 62.230.016 62.634 22.458 1 Summe: 1.936.368.659 Bytes Um dem ganzen auf die Schliche zu kommen habe ich eine Feldvariable ausserhalb der Prozedur die FBytesLast heisst. Am Ende der IdFTPWork Prozedur speichere ich den aktuellen AWorkCount Stand in diese Variable FBytesLast. Am Anfang der Prozedur werte ich diesen Stand aus mit:
Code:
Mit den nächsten 400 aufrufen der IdFTPWork Prozedur werden diese übertragenen Bytes in ein Memo geschrieben.
FLastBytes := (AWorkCount - FLastBytes);
if FShowCnt < 400 then memo.Lines.Add(FormatFloat('#,##0', FLastBytes));
Code:
Mit einer der ersten Aufrufe werden 58 Bytes dann 360 Bytes übertragen und irgenwann im Laufe der Übertragungen Konstant 32 Kilobyte. Und jetzt zu meiner Frage die mir warscheinlich die letzten 4% zu den 100% in der Progressbar für den Gesamtfortschritt versauen. Was haben diese Werte in AWorkCount zu suchen? 4.294.966.992, 4.294.967.250, 4.294.927.120, 4.294.944.839
58
360 4.294.966.992 4.294.967.250 58 360 32.350 29.866 4.294.927.120 4.294.944.839 113 32.654 32.768 32.768 32.768 32.768 32.768 Falls sich jetzt einige Fragen, warum ich nicht in der OnBegin Ereignisprozedur den Wert aus dem Parameter AWorkCountMax übernehme. Weil der Parameter AWorkCountMax leider nur beim Upload > 0 ist. Beim Download muss man umständlich Rekusiv durch die Ordnerstrukturen um mit der Prozedur Size die zu übertragenen Bytes zu ermitteln. Lass mich aber gern eines besseren belehren. Wenn jemand einen Vorschlag hat das zu vereinfachen. |
AW: FTP Indy Komponente, Event OnWork und der Parameter AWorkCount
Hat das irgendetwas mit der maximalen Adressierung von meiner FLastBytes Variable (Datentyp Cardinal, 4.294.967.296 Bytes sprich 4 GB) zutun? Wenn ich 4.294.966.992 von 4.294.967.296 Bytes abziehe ist die Differenz 304 Bytes!?!?
Edit: Ich habe gerade mal den Datentyp von Cardinal auf Integer geändert. Das ist das Ergebnis: 58 360 -304 -46 58 360 32.350 29.866 -40.176 -22.457 113 32.654 32.768 32.768 Die Differenzen beim Datentyp Cardinal drücken sich beim Datentyp Integer ins Negative aus. Den Grund dafür kann ich mir erklären, Cardinal kennt kein unsigned. Aber das erklärt noch immer nicht, warum die Werte überhaupt ins Negative gehen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:26 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