AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi TStream als Teil an einen anderen TStream übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

TStream als Teil an einen anderen TStream übergeben

Ein Thema von amigage · begonnen am 25. Jan 2011 · letzter Beitrag vom 26. Jan 2011
Antwort Antwort
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
272 Beiträge
 
Delphi 11 Alexandria
 
#1

TStream als Teil an einen anderen TStream übergeben

  Alt 25. Jan 2011, 18:22
Hallo,

ich glaube ich steht auf dem Schlauch und hoffe, ihr könnt mir helfen.
Folgende Problemstellung: Ich möchte eien Grafik einlesen und deren Inhalt mit zusätzlichen Informationen versehen und in einer Binärdatei speichern.

Folgender Ansatz:
Delphi-Quellcode:
var
  FileStream : TFileStream;
  PicStream, MyStream: TStream;
  Len : integer;
begin
  // :
  // Größe des Streams
  Len := PicStream.Size;
  MyStream.Write(Len, SizeOf(Len));
  MyStream.Write(PicStream, Len);
  // :
  // und dann als Datei speichern
  FileStream := TFileStream.Create('D:\Temp\test.dat', fmCreate);
  MyStream.Position := 0;
  try
    FileStream.CopyFrom(MyStream, MyStream.Size);
  finally
    FileStream.Free;
  end;
end;
Beim Auslesen gehe ich so vor:

Delphi-Quellcode:
 
var
  FileStream : TFileStream;
  PicStream : TMemoryStream;

  sizeInt : integer;
  TempBuff : String;
begin
  // :
  sizeInt := 0;
  FileStream.Read(sizeInt, SizeOf(integer));
  If sizeInt > 0 then
  begin
    SetLength(TempBuff, sizeInt);
    FileStream.Read(PChar(TempBuff)^, sizeInt);

    PicStream.Clear;
    PicStream.Write(PChar(TempBuff)^, Length(TempBuff));
    PicStream.Position := 0;
  end;
  // :
end;
Aber irgendwie stimmen die Daten des Streams nicht. An was kann es hängen? Ist schon das Speichern falsch?

Es wäre schön, wenn mich jemand auf die richtige Fährte führen würde

Besten Dank.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#2

AW: TStream als Teil an einen anderen TStream übergeben

  Alt 25. Jan 2011, 19:01
MyStream.Write(PicStream, Len); speichert den Objekt-Zeiger und nicht den Stream-Inhalt.
Warum nicht einfach CopyFrom, bzw. warum nicht direkt in den FileStream?


String = Unicode, seit Delphi 2009
Unicode = 2 Byte pro Zeichen
du speicherst und ließt aber nur 1 Byte pro Zeichen ... heißt also zu vergißt die Hälft.

Bytes = Length(S) * SizeOf(Char) für Delphi-Referenz durchsuchenString
Aber in deinem Fall einfach AnsiString oder besser och RawByteString verwenden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (25. Jan 2011 um 19:06 Uhr)
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
272 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TStream als Teil an einen anderen TStream übergeben

  Alt 26. Jan 2011, 14:41
Hallo,

dank Deiner Tipps habe ich es nun zum Laufen bekommen und kann die Daten wie gewünscht schreiben und lesen.

  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:21 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