Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Nutzung MemoryStream und FileStream (https://www.delphipraxis.net/160531-nutzung-memorystream-und-filestream.html)

rollstuhlfahrer 18. Mai 2011 17:03

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.

DeddyH 18. Mai 2011 17:09

AW: Nutzung MemoryStream und FileStream
 
Das gilt allerdings nicht für Shortstrings, diese sind AFAIK immer ANSI-kodiert.

rollstuhlfahrer 18. Mai 2011 17:15

AW: Nutzung MemoryStream und FileStream
 
Zitat:

Zitat von DeddyH (Beitrag 1101602)
Das gilt allerdings nicht für Shortstrings, diese sind AFAIK immer ANSI-kodiert.

Ja, aus Gründen der Abwärtskompatibilität.

Bernhard

DeddyH 18. Mai 2011 17:59

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.

himitsu 18. Mai 2011 18:25

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.

BasilBavaria 19. Mai 2011 08:20

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:
Writer.WriteString( StrExt(KartenSatz.Info1,true,cszInfo1) );
: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???
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.

Neutral General 19. Mai 2011 08:24

AW: Nutzung MemoryStream und FileStream
 
Dann schreib halt notfalls selbst in den Stream ;)

himitsu 19. Mai 2011 08:29

AW: Nutzung MemoryStream und FileStream
 
Der Record mit ShortStrings kann übrigens direkt in den Stream kopiert werden.

p80286 19. Mai 2011 16:53

AW: Nutzung MemoryStream und FileStream
 
Zitat:

TWriter wird intern vom Komponenten-Streaming-System verwendet, um Informationen zu einer Komponente (z.B. Komponenteneigenschaften, die als public deklariert sind, oder benutzerdefinierte Eigenschaftsdaten) in einen Stream zu schreiben
Das würde ich so verstehen, das TWriter nicht die erste Wahl ist, ein Record in eine Datei zu schreiben.
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

DeddyH 19. Mai 2011 18:10

AW: Nutzung MemoryStream und FileStream
 
Zitat:

Zitat von p80286 (Beitrag 1101843)
Gerüchteweise habe ich vernommen, daß seit einigen Delphi-Versionen SizeOf und Length auch nicht mehr äquivalent sind.

Wie auch, da Length die Länge in Zeichen angibt. Da aber seit Delphi 2009 ein Zeichen nicht mehr genau ein Byte groß ist, müssen sich diese beiden ja unterscheiden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 Uhr.
Seite 2 von 3     12 3      

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