Zitat von
sirius:
Mit dem letzten
StreamOut.CopyFrom(StreamIn,0);
kopierst du den ganzen Stream nochmal von vorn (das bedeutet die 0).
Aber was davor passiert weis ich auch nicht.
Probier es mal so, wie ich es getan habe. Klappt es dann?
Oh das mit der 0 war tatsächlich sinnlos. Jetzt siehts so aus:
Delphi-Quellcode:
for i:=1 to floor(StreamIn.Size / buffersize) do
begin
StreamOut.CopyFrom(StreamIn,buffersize);
//Status
Progressbar1.Position:= 100*i*buffersize div StreamIn.Size;
label2.caption:=inttostr(i*buffersize) +' / '+ inttostr(Streamin.Size);
Application.ProcessMessages;
end;
if StreamIn.Size mod buffersize > 0 then
StreamOut.CopyFrom(StreamIn,StreamIn.size mod buffersize);
das kopieren an sich funktioniert generell ja auch, nur läuft es halt nicht so ab wie ich mir das vorstelle.
Zitat von
sirius:
Zitat:
Sendest du selber über die Sockets?
Wenn er alles filebasiert macht, dann wohl über den Windows Netzwerk Client
jo so siehts aus
Zitat von
Luckie:
Warum geht dir beim Kopieren was verloren? Du kopierts doch und verschiebst nicht. Und warum Variant als Datentyp für den Buffer? Nimm doch ein Byte-Array oder PByte.
Wie kommst du auf verlieren? Hab ich das irgendwo geschrieben?
Warum Variant? Naja aus Ahnungslosigkeit wie mans richtig macht
Aber der buffer ist durch das CopyFrom ja sowieso weggefallen.
Nochmal zu meinem Problem:
Kopiert wird alles vernünftig, nur hab ich wiegesagt den Eindruck, dass das ganze asynchron abläuft, so wie als wenn man etwas über sockets sendet und da zu schnell sachen hintereinander abschickt. Dann werden die ja auch zusammen gefasst.
Eigentlich sollte es halt so sein, dass nach und nach kleine Pakete verschickt werden und die Progressbar nach meinem oben geposteten Quellcode halbwegs gleichmäßig durchlaufen sollte, und der Kopiervorgang auch beendet sein sollte, sobald die Progressbar durch ist. Das ist aber nicht der Fall. Nachdem diese durchgelaufen ist, hängt das Programm und der Netzwerkmonitor (STRG+Alt+Entf unter WinXP) zeigt noch max. Traffic an. Das geht noch einige sek. so weiterm bis die Übertragung dann tatsächlich abgeschlossen ist. sehr merkwürdig das ganze.