00 Stimmen

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.

AntwortenPositivNegativ
0Beste Antwort0 Stimmen

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:

// ms: TMemoryStream;

ms.position:=0;

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

AntwortenPositiv Negativ
Antworten

Ähnliche Themen

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.