Entwickler-Ecke
Dateizugriff - Integerwert in MemoryStream schreiben
eXistence - Mo 06.09.04 09:04
Titel: Integerwert in MemoryStream schreiben
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 - 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:
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.
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
LOADSTRFROMSTREAM SAVESTRTOSTREAM um.
Cu,
Udontknow
eXistence - 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 [
http://www.delphi-forum.de/viewtopic.php?t=6534] 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 - 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 - 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 - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!