Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verständnis Problem (Streams) (https://www.delphipraxis.net/93128-verstaendnis-problem-streams.html)

monty.ms 1. Jun 2007 00:04


Verständnis Problem (Streams)
 
Hallo

Ich habe hier ein Tutorial aus der Code-Library und da bin ich an eine Stelle gekommen wo mir das Verständnis zu gefehlt hat.
Es geht um das Versenden von Dateien, speziell die Streams. Folgender Auszug:

Delphi-Quellcode:
  [...]
while (iTmpSize < iFileSize) and (not bError) do begin
  tmpMs.clear;
  Application.ProcessMessages;
  iSendTime := GetTickCount;
  try
    iNextSize := iFileSize - iTmpSize;
    if iNextSize > cFileSplitSize then iNextSize := cFileSplitSize;
    iTmpSize := iTmpSize + tmpMs.CopyFrom(fs,iNextSize);
    TcpCon.OpenWriteBuffer;
    TcpCon.WriteStream(tmpMS,true,true);
    TcpCon.CloseWriteBuffer;
  [...]
Es geht mir nicht um das Senden (darum auch nicht in die Internet Rubrik) sondern speziell um "tmpMs.CopyFrom(fs,iNextSize)"
Ich versteh was er da macht, aber da es eine Schleife ist, hab ich das gefühl er kopiert immer den selben Block. Wenn fs immer gleich bleibt, und iNextSize generell auch (außer am Schluss) dann müsste doch immer das selbe kopiert werden?!

Also versteht mich nicht falsch, das Programm funktioniert und macht was es soll, aber als ich mir das näher angesehen hab, ist mir das aufgefallen. Hoffe mich kann da jemand aufklären :)

Danke schonmal für eure Hilfe

monty

Dani 1. Jun 2007 03:14

Re: Verständnis Problem (Streams)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Die Methode CopyFrom kopiert die angegebene Anzahl Bytes aus einem Stream in einen anderen.

function CopyFrom(Source: TStream; Count: Int64): Int64;

Beschreibung

Mit CopyFrom können Sie Daten aus einem Stream in einen anderen kopieren. Der Benutzer muß keinen Pufferspeicher erstellen, lesen, beschreiben und freigeben, um Daten zu kopieren.

CopyFrom kopiert die in Count angegebene Anzahl Bytes aus dem in Source angegebenen Stream in den Stream. Dann verschiebt es die aktuelle Position um die in Count angegebene Anzahl Bytes und gibt die Anzahl der kopierten Bytes zurück.

Wenn Count 0 enthält, setzt CopyFrom vor dem Lesen die Position in Source auf 0 und kopiert dann den gesamten Inhalt von Source in den Stream. Wenn Count größer oder kleiner als 0 ist, liest CopyFrom ab der aktuellen Position in Source.
Vorsicht, falls (Source.Position + Count) > Source.Size! In diesem Fall wirft z.B. TMemoryStream eine Exception "Stream-Lesefehler". Man könnte aber auch erwarten, dass einfach die restlichen Bytes kopiert werden und die Zahl der tatsächlich kopierten Bytes zurückgegeben wird.

monty.ms 1. Jun 2007 03:26

Re: Verständnis Problem (Streams)
 
Vielen Dank. Das hat mir weitergeholfen :)

monty


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