![]() |
mehrere streams in eine datei speichern?
Ich habe mehrere streams die ich in eine Datei speichern und auch wieder auslesen kann. Ist das überhaupt möglich und wenn ja, wie??? danke!!!
|
Re: mehrere streams in eine datei speichern?
Hallo Weazy,
ja das ist möglich. Du solltest in dem Ziel-Stream zuerst die Größe des Quellstreams speichern. Danach kannst du mit CopyFrom die Daten von der Quelle in das Ziel speichern. Dieser Vorgang kann dann für mehrere Quellen wiederholt werden. Beim Laden solltest du dann zuerst die Größe laden und danach entsprechend der geladenen Größe die passende Anzahl an Bytes von der Quelle in Ziel kopieren.
Delphi-Quellcode:
** ungetestet **
// Speichern
VAR Size : Int64; BEGIN Size := Source.Size; Target.Write(Size, SizeOf(Size)); Source.Seek(0, soFromBeginning); // Lesezeiger an den Anfang des Streams setzen! Target.CopyFrom(Source, Size); END; // Laden VAR Size : Int64; BEGIN Source.Read(Size, SizeOf(Size)); Source.CopyFrom(Target, Size); END; Das sollte mit allen TStreams klappen. Du kannst dann z.B. von 10 TMemoryStream in einen TFileStream speichern. Gruß, pszopp |
Re: mehrere streams in eine datei speichern?
Danke! Das mit dem speichern klappt schon mal. Nur beim laden kommt es immer zu einem "Stream-Fehler". Könnte das möglicherweise daran liegen, das ja die grösse der verschiedenen Streams unbekannt ist?
|
Re: mehrere streams in eine datei speichern?
Du mußt dir natürlich damit es keine Datensenke ist auch ein Format überlegen wie du die einzelnen Streams voneinander abtrennst. Ein ganz einfacher Ansatz wäre ein 8-Byte großen Längenangabe vor jedem Stream zu schreiben.
pszopp-Beispiel macht ja genau das :wall: |
Re: mehrere streams in eine datei speichern?
Ich hatte auch noch einen Fehler beim Laden.
So sollte es besser gehen:
Delphi-Quellcode:
Gruß,
// Laden
VAR Size : Int64; BEGIN Source.Read(Size, SizeOf(Size)); // Source sollte für dein Beispiel ein TFileStream sein. // Target ist dann einer deiner Streams, die nun aus der Datei geladen werden. Target.CopyFrom(Source, Size); END; pszopp |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:32 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