TFileStream.Write evtl LNET [gelöst]

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
AlterMann
Beiträge: 238
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

TFileStream.Write evtl LNET [gelöst]

Beitrag von AlterMann »

Liebe Foristen

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

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;
 
Hat wer eine Idee?

Danke fürs Lesen
Christian
Früher war alles besser. Und aus Holz!

AlterMann
Beiträge: 238
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Re: TFileStream.Write evtl LNET [gelöst]

Beitrag von AlterMann »

Wie so oft:
Das Erklären des Problems hilft einem auf die Sprünge.

Ich schreibe den Inhalt des Ansistrings byteweise mit TFileStream.WriteByte, und siehe da, es klappt!

Trotzdem Danke.
Früher war alles besser. Und aus Holz!

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1632
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: TFileStream.Write evtl LNET [gelöst]

Beitrag von corpsman »

Hast du dir schon mal Send_Get_File angeschaut ?

Gruß
Corpsman
--
Just try it

AlterMann
Beiträge: 238
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Re: TFileStream.Write evtl LNET [gelöst]

Beitrag von AlterMann »

Schau ich mir gerne an.
Danke.
Früher war alles besser. Und aus Holz!

Antworten