![]() |
AW: Problem beim Lesen (und schreiben?) von Stream
Das erste Zeichen des Puffers ist 0 mund nicht 1. Der Positionszeiger muss auf 0 gesetzt werden:
Delphi-Quellcode:
Gruß, Andreas
function LoadStrFromStream(Const St: TMemoryStream): AnsiString;
var Len: LongInt; begin St.Position:= 0; St.ReadBuffer(Len, SizeOf(Len)); SetLength(Result, Len); If Len > 0 Then St.ReadBuffer(Result[0] , Len*SizeOf(Result[0])); end; |
AW: Problem beim Lesen (und schreiben?) von Stream
Bei einem Shortstring ist Index 0 das Längenbyte und danach kommen die Zeichen. Bei Strings und Ansistrings beginnt der Puffer ebenfalls bei 1.
Teste es mal im Debugger. Ich habe es natürlich zuvor getestet. |
AW: Problem beim Lesen (und schreiben?) von Stream
Du hast recht, BerndS: Ich habe den AnsiString nicht beachtet...:oops:
Andreas |
AW: Problem beim Lesen (und schreiben?) von Stream
Ganz allgemein könnte man es evtl. so schreiben:
Delphi-Quellcode:
damit das Lesen für jedwenden BufferType funktioniert.
...
If Len > 0 Then St.ReadBuffer(Result[Low(Result)] , Len*SizeOf(Result[Low(Result)])); Andreas |
AW: Problem beim Lesen (und schreiben?) von Stream
Hallo,
vielen Dank für Eure ganzen Antworten! Ein kleines Problem habe ich da allerdings noch: Weiß jemand wie ich die Einstellungen eines Font abspeichere? Font.SaveToStream gibt es leider nicht. Und auch Stream.WriteComponent will nicht funktionieren... Gruß e-gon |
AW: Problem beim Lesen (und schreiben?) von Stream
Schau dir mal TReader und TWriter an ... das nimmt auch Delphi, um die DFM zu speichern (wobei hier das Binär raus kommt, aber in Text konvertriert werden kann)
Und es gibt auch Mapper für XML oder JSON, um Objekte zu (de)serialisieren.
Delphi-Quellcode:
funktioniert mit allen Delphi-Strings (außer ShortString)
ReadOrWrite(Pointer(S), Length(S)*StringElementSize(S));
aber generell ist es besser statt Pointer das passende PChar/PAnsiChar/PWideChar zu verwenden.
Delphi-Quellcode:
und z.B. bei typlosen VAR-Parametern noch ein ^ hinten dran, an den Cast.
ReadOrWrite(PChar(S), Length(S)*SizeOf(Char)); // String
ReadOrWrite(PAnsiChar(A), Length(A){*SizeOf(AnsiChar)}); // AnsiString ReadOrWrite(PWideChar(U), Length(U)*SizeOf(WideChar)); // UnicodeString und WideString |
AW: Problem beim Lesen (und schreiben?) von Stream
Zitat:
Zitat:
.zip kann vollkommen per TStream abgewickelt werden, laden speichern löschen whatever. ob nun text bilder oder whatever. ich finde es ist die einfachste möglichkeit damit umzugehen, da die eigentliche datei (das archiv) eh mitgegeben werden muss. (ob nun zip zlib whatever) eine font ist meist eine ttf datei, die einfach mit ins archiv, fertig. |
AW: Problem beim Lesen (und schreiben?) von Stream
Hallo zusammen,
vielen lieben Dank für die ganzen Antworten! Ich muss das jetzt erstmal alles ausprobieren und verstehen. Bis evtl. noch Fragen aufkommen lösche ich die Markierung zur offenen Frage. Danke nochmals an alle! :thumb: Gruß e-gon |
AW: Problem beim Lesen (und schreiben?) von Stream
Vielleicht anstelle einer Menge von Dateien eine einzelne Datei schreiben/lesen: eine SQLite Datenbank.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz