Wenn ihr verhindern wollt, daß ich im Irrenhaus lande, helft mir bitte.

Ich versuche schon den ganzen Tag mittels LNET einen Dateitransfer über TCP/IP für eine automatische Updatefunktion hinzubekommen.
Jetzt bin ich soweit, daß Die Datei (Eine .exe unter Windows) mittels TFileStream gelesen, in kleinen Häppchen von 65k übertragen und am anderen Ende gespeichert wird. Als Buffer verwende ich hier wie da einen ansistring.
Die Datei kommt auch am anderen Ende aufs Byte genau in der richtigen Größe an.
Aber: Es steht nur Müll drin.
Erst dachte ich das liegt an der Übertragung. Evtl an den Strings als Buffer (daß die doch nicht alle Sonderzeichen aufnehmen könnten).
Jetzt hab ich mal die Datei durch eine 6 Byte lange Datei mit dem Inhalt "ABCabc" ersetzt.
Und siehe da, es kommt wieder nur Müll in der Datei an. Und nicht einmal bei jedem Durchgang der selbe. Die ersten beiden Byte variieren.
Und jetzt das beste: Wenn ich die angekommenen Daten in einer ListBox ausgebe (macht im Code "Meldung") stimmt noch alles.
Erst das Schreiben in den FileStream (ZD : TFileStream) vermurkst sie.
Dann hab ich noch gesehen es gibt eine Funktion TFileStream.WriteAnsiString. Wenn ich die verwende ist das Ergebnis zwar anders, aber nicht besser:
Die Datei ist dann um 8 Zeichen länger weil vor und nach (den richtigen) 6 Zeichen noch je vier Sonderzeichen auftauchen.
Code: Alles auswählen
procedure TForm1.LTCP1Receive(aSocket: TLSocket);
var Buf : ansistring = '';
anzahl : longint;
begin
anzahl := LTCP1.GetMessage(Buf,aSocket);
Meldung(Buf);
Empfangen := Empfangen + anzahl;
ProgressBar2.Position:=Empfangen;
Label67.Caption := IntToStr(Empfangen);
Application.ProcessMessages;
if not assigned(ZD) then exit;
ZD.WriteBuffer(Buf,anzahl);
end;
Danke fürs Lesen
Christian