Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - String mit WriteBuffer schreiben
Arne - Sa 31.12.05 16:00
Titel: String mit WriteBuffer schreiben
Mahlzeit zusammen,
ich möchte einen String mittels TFileStream.WriteBuffer in eine Datei schreiben, aber das klappt nicht, wie ich es mir vorstelle.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var myString : String;
begin myStream.WriteBuffer(myString, 32); end; |
Der Prototyp von TFileStream.WriteBuffer lautet:
WriteBuffer(const: Buffer; Count : LongInt);
Wenn ich mit dem Debugger in TFileStream.WriteBuffer reinsteppe, enthält Buffer "kein Wert".
Kann mir jemand erklären, welchen TypeCast ich machen muß, oder wie ich sonst hinbekomme?
Thanx und Guten Rutsch,
Arne
BenBE - Sa 31.12.05 16:08
String speichern mit Streams ist etwas gewhönungsbedürftig:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var S: TStream; L: Integer; St: String;
L := Length(St); S.WriteBuffer(L, SizeOf(Integer)); If L <> 0 Then S.WriteBuffer(S[1], L); |
Lesen analog dazu ... Beachte, dass Du vor dem Lesen der Daten aus dem Stream den String erst alloziieren musst mit SetLength (d.h. Länge lesen, SetLength aufrufen dann String-Daten lesen).
Opa - Sa 31.12.05 16:23
Ich hatte gerade was für mich gemacht um einen Stream nach string zu lesen *g
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| function _LoadFromStream(Stream: TStream):string; var Size: integer; begin result := ''; try Size := Stream.Size - Stream.Position; SetString(result, nil, Size); Stream.Read(Pointer(result)^, Size); except result := ''; end; end;
function _FileLoad(const DateiName: string):string; var Stream : TStream; begin result := ''; Stream := TFileStream.Create(DateiName, fmOpenRead or fmShareDenyWrite); try Stream.Position := 0; if boolean(Stream.Size) then result := _LoadFromStream(Stream); finally Stream.Free; end; end; |
Moderiert von
Gausi: Code- durch Delphi-Tags ersetzt
Arne - Sa 31.12.05 17:57
Danke - klappt jetzt :P
Keldorn - Sa 31.12.05 18:19
Hallo
alternativ die Treader und Twriter klassen anschaun, die haben für jeden Typ ihre eigenen Methoden, die Daten in den stream zu schreiben. Um die Längenangaben beim string brauchst du dich so nicht zu kümmern.
Mfg Frank
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!