Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi mehrere streams in eine datei speichern? (https://www.delphipraxis.net/75667-mehrere-streams-eine-datei-speichern.html)

Weazy 23. Aug 2006 09:33


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!!!

pszopp 23. Aug 2006 09:46

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:
// 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;
** ungetestet **

Das sollte mit allen TStreams klappen. Du kannst dann z.B. von 10 TMemoryStream in einen TFileStream speichern.

Gruß,
pszopp

Weazy 24. Aug 2006 10:22

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?

Bernhard Geyer 24. Aug 2006 10:28

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:

pszopp 24. Aug 2006 10:35

Re: mehrere streams in eine datei speichern?
 
Ich hatte auch noch einen Fehler beim Laden.
So sollte es besser gehen:

Delphi-Quellcode:
// 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;
Gruß,
pszopp


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz