![]() |
AW: Nutzung MemoryStream und FileStream
Wo wir eh gerade bei Chars und AnsiChars/WideChars sind: Falls du noch Strings und Chars hast, die auf AnsiStrings und AnsiChars verweisen, ist deine Struktur spätestens nach einem Wechsel auf Delphi >= 2009 im Eimer. Also am Besten gleich WideStrings und WideChars verwenden. Dann sind die auch kompatibel und die Struktur ändert sich erst wieder mit der Einführung von UTF-32.
Bernhard ADD: Turbo Delphi hat noch AnsiStrings und AnsiChars (sowie PAnsiChars). Wenn du in Erwägung ziehst, irgendwann mal eine neue Delphi-Version einzusetzen, würde ich empfehlen, Wide* zu verwenden, da du dann weniger Probleme hast. |
AW: Nutzung MemoryStream und FileStream
Das gilt allerdings nicht für Shortstrings, diese sind AFAIK immer ANSI-kodiert.
|
AW: Nutzung MemoryStream und FileStream
Zitat:
Bernhard |
AW: Nutzung MemoryStream und FileStream
Na also, wenn er also in seinem Record lediglich Shortstrings ablegt, sollten die einen Wechsel zu einer aktuellen Delphi-Version auch schadlos überstehen.
|
AW: Nutzung MemoryStream und FileStream
Die Frage ist auch noch, wie genau er seinen Record speichert/ausließt ... das wurde ja bis jetzt noch nicht genannt.
|
AW: Nutzung MemoryStream und FileStream
Ich hab die Größenprüfungen eingebaut und etwas gefunden:
:!: Die Size des Streams ändert sich anscheinend, wenn Umlaute und Sonderzeichen wie 'ß' im String enthalten sind. Die Erweiterung des String liefert noch einen korrekten String
Code:
:shock: Beim Prüfen vor Update/Schreiben ist der Stream bei einem Umlaut um 4 Byte vergößert (4937 statt 4933) - bei zwei Umlauten aber nur auf 4938 Byte???
Writer.WriteString( StrExt(KartenSatz.Info1,true,cszInfo1) );
Der String "öß cnchjhj Ä ..kjhk ß" liefert 4940 Byte. Bei Umlauten in zwei Feldern 4941 Byte usw. :?: Der Fehler scheint also bei Writer zu liegen - aber warum? In der Onlinehilfe hab ich nix gefunden. |
AW: Nutzung MemoryStream und FileStream
Dann schreib halt notfalls selbst in den Stream ;)
|
AW: Nutzung MemoryStream und FileStream
Der Record mit ShortStrings kann übrigens direkt in den Stream kopiert werden.
|
AW: Nutzung MemoryStream und FileStream
Zitat:
Außerdem sind "Strings" doch von Natur aus dynamisch. Nur Shortstrings und Array [0..x] of Char/Byte haben eine definierte Länge, da wundert es mich erst einmal überhaupt nicht, das nicht die angenommene Satzlänge in der Datei landet. Gerüchteweise habe ich vernommen, daß seit einigen Delphi-Versionen SizeOf und Length auch nicht mehr äquivalent sind. Gruß K-H |
AW: Nutzung MemoryStream und FileStream
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 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