Delphi: MemoryStream enthält/speichert nur unleserliche Zeichen und Hieroglyphen
Frage von Chematik | 27.07.2013 um 20:24
Ich habe einen TMemoryStream in Delphi und möchte diesen auslesen und speichern. Wie ich es aber auch anstelle, aus irgendwelchen Gründen enthält der Stream nur unleserliche Zeichen. Ich habe hier einmal einen kleinen Auszug mitgebracht:
°° €g ½ 0ì 𺠺 º º º
𠺑 À 7 „< 4 >º ð º º º º º º ðºðºðº ð º ‘ Àš F ôD ðºð
𠺑 À‘ „E d D €g ¥J 0 d
Das interessante dabei: Wenn ich diesen zerstückelten MemoryStream als Datei abspeichere und die Größe bestimme, entspricht diese Größe exakt der Datenmenge, die auch normalerweise im Stream sein sollte. Nur dass es halt die falschen Daten sind.
Ähnliche Themen
PHP: Nur bestimmte Buchstaben, Zahlen und Zeichen in einem String zulassen
Tipp | 10 Kommentare
Delphi/Lazarus: MemoryStream in FileStream laden und speichern
Info | 0 Kommentare
PHP: Beliebige Zeichen am Anfang und Ende eines Strings entfernen
Tutorial | 0 Kommentare
JavaScript: Letztes Zeichen aus String entfernen
Tipp | 0 Kommentare
PHP: Strings mit Ctype-Funktionen auf Zeichenklassen überprüfen
Artikel | 0 Kommentare
Textarea Maxlength: Maximale Zeichenanzahl in HTML Textarea begrenzen
Tutorial | 4 Kommentare
Delphi/Lazarus: Kommandozeilen Parameter Tutorial Teil 2: Empfangen
Tutorial | 0 Kommentare
Wichtiger Hinweis
Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.
Jetzt mitmachen
Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.
Das klingt schwer danach, dass du die Position des MemoryStreams vor dem Lesen nicht wieder zurück auf 0 gesetzt hast. Setze mal folgende Zeile vor die Verarbeitung des Streams:
Zur Erklärung:
Wenn du etwas in einen Stream speicherst, merkt sich Delphi mit einem Zeiger die aktuelle Position. Nach dem Schreiben steht diese Position in der Regel am Ende des Streams, so dass man an dieser Stelle weiter schreiben kann.
Wenn man nun aber den Stream weiterverarbeiten oder lesen will muss man wieder zurück an den Anfang des Streams. Wenn man das nicht macht beginnt Delphi am Ende des Strings zu lesen und liest den Müll der an dieser Stelle nach dem Stream im Speicher steht (deine Hieroglyphen). Wenn du ms.Size benutzt, liest Delphi so lange den Müll ein, wie auch die Länge des originalen Streams ist - daher stimmt die Länge bei dir auch überein, wie du geschrieben hast.
Beispiel:
Ich habe dieses Thema betreffend die Info MemoryStream in FileStream laden und speichern geschrieben. Darin siehst du ein Beispiel, wie du es anstellen kannst. Hier siehst du auch die Zeile, in der die Position auf 0 gesetzt wird.
29.07.2013 um 17:25