Autor Beitrag
eXistence
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mo 06.09.04 09:04 
hi,
wie schreibe ich einen Integerwert am elegantesten in einen MemoryStream?
mit
"mMartesDatenStream.Write(1, 1);" klappt es leider nicht: es ist eine Variable erforderlich (ich vermute, damit er weiß um welchen var-Typ es sich handelt).
Ich kann meinen Wert natürlich in eine Var stecken, aber irgendwie sieht das nich sonderlich elegant aus... geht das nicht auch einfacher?

btw: das gleiche Problem habe ich, wenn ich ein einzelnes Zeichen schreiben möchte: "mMartesDatenStream.Write('A', 1);" wird mit der gleichen Fehlermeldung quittiert. "mMartesDatenStream.Write('AA', 2);" funktioniert hingegen...
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 06.09.04 09:13 
Hallo!

Es gibt verschiedene Möglichkeiten. Tatsächlich brauchst du für die eigentliche Routine Read/WriteBuffer eine Variable, also in der Form:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var i:integer;
begin
  Stream.WriteBuffer(i,SizeOf(i));
  ...
end;


Du kannst aber dir natürlich eine Prozedur basteln, die das erledigt.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure WriteIntToStream(i:Integer;Stream:TStream)
begin
  Stream.WriteBuffer(i,SizeOf(i));
end;


Noch schöner ist dann natürlich eine Klasse, in der du deine Funktionen implementierst.

Die Sache mit den Zeichen funktioniert so nicht, schau dich mal nach den Routinen Suche in: Delphi-Forum, Delphi-Library LOADSTRFROMSTREAM SAVESTRTOSTREAM um.

Cu,
Udontknow
eXistence Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mo 06.09.04 09:43 
hmm, habe ich mir fast gedacht... dann werde ich mir wohl ein paar prozeduren schreiben, die das dann erledigen...

Die Sache mit dem String habe ich alleridngs nicht ganz verstanden.
Kannst du mir erklären, warum du das hier gerade so gemacht hast?

Bei mir isses nämlich so, dass ich nachdem alle Daten in den MemoryStream geschrieben sind, ich diesen in einen FileStream kopiere.
Wenn ich mir diese Datei dann angucke, sehen meine Strings dort so aus, wie ich es von ihnen erwarte... deswegen leuchtet mir gerade nicht ein, wo bei mir evtl. etwas nicht ganz richtig ist :)
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 06.09.04 10:05 
Gut, stelle dir vor, du schreibst zwei Strings hintereinander in den Stream. Beim Auslesen ergibt sich ein Problem, wenn du nicht eine konstante Länge erwartest: Was gehört nun zum ersten String, was zum zweiten?

Die Prozeduren lösen dies, indem zuerst die Länge des Strings in den Stream geschrieben wird.

Cu,
Udontknow
eXistence Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mo 06.09.04 10:15 
ah, danke für die Erklärung.
Es ist so, dass ich gerade dabei bin, einen Datei-Konverter zu schreiben und mich gerade mit dem header beschäftige.
Dort schreibe ich (sofern ich die Doku zu dem Format richtig verstanden habe) String(chars), Integer und double in einer festgelegten Reihenfolge in die Datei. Die Position der einzelnen Werte ist also byte-genau bekannt.
In diesem Fall dürfte mein Ansatz also doch korrekt sein, oder?
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 06.09.04 10:26 
Na, wie ich bereits sagte, es kommt darauf an, ob deine Strings eine variable Länge haben oder nicht. Wenn die Länge variabel ist, können sich die Bytepositionen ändern, auch wenn sich an der Reihenfolge der Daten nichts geändert hat.

Cu,
Udontknow