Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Stream in Stream kopieren (https://www.delphipraxis.net/178158-stream-stream-kopieren.html)

1aa 20. Dez 2013 00:42

Delphi-Version: XE5

Stream in Stream kopieren
 
Steh grad etwas aufm Schlauch:

Wenn ich mit:
Delphi-Quellcode:
procedure tTestStream.WriteStream(aStream: TStream);
 Var hSize : Int64;
begin
 aStream.Position :=0;
 hSize := aStream.Size;
 Write(hSize, Sizeof(hSize));
 CopyFrom(aStream,hSize);
end;
Daten aus einem anderem Stream in den neuen reinkopiere müsste ich diese doch mit :

Delphi-Quellcode:
function tTestStream.ReadStream: TStream;
var hSize : Integer;
begin
  Read(hSize,Sizeof(hSize));
  Result.CopyFrom(Self,hSize);
end;
auslesen können?

oder hab ich hier einen Denkfehler?

edit: tTestStream erbt von TMemoryStream

Sir Rufo 20. Dez 2013 00:46

AW: Stream in Stream kopieren
 
Ist der Result Stream auch initialisiert/gibt es da eine gültige Instanz?

Aphton 20. Dez 2013 00:47

AW: Stream in Stream kopieren
 
Ja erläutere mal, was so schief geht!?!

Edit außerdem:
Zitat:

If Count is 0, CopyFrom sets Source position to 0 before reading and then copies the entire contents of Source into the stream. If Count is greater than or less than 0, CopyFrom reads from the current position in Source.
Position setzen, Größe auslesen und an CopyFrom weiterreichen --> nicht notwendig

1aa 20. Dez 2013 00:55

AW: Stream in Stream kopieren
 
Ok man merkt ich sollte aufhören für heute....

Überarbeitet:
Delphi-Quellcode:

procedure tTestStream.WriteStream(aStream: TStream);
 Var hSize : Int64;
begin
 hSize := aStream.Size;
 Write(hSize, Sizeof(hSize));
 CopyFrom(aStream,hSize);
end;

function tTestStream.ReadStream: TStream;
var hSize : Integer;
begin
  Result := TStream.Create;
  Read(hSize,Sizeof(hSize));
  Result.CopyFrom(Self,hSize);
end;
Edit : wobei... dann kopiert mir ja die Read Funktion den ganzen stream und nicht nur den Stream ab der position?
glaube da muss ich morgen noch mal aus anderes suchen...

1aa 20. Dez 2013 22:02

AW: Stream in Stream kopieren
 
So etwas frischer heute...

und Problem gelöst... man sollte nicht Tstream also constructor nutzen sondern zB. TMemoryStream...
und schon geht es^^

Delphi-Quellcode:
function tTestStream.ReadStream: TStream;
var hSize : Integer;
begin
  Result := TMemoryStream.Create;
  Read(hSize,Sizeof(hSize));
  Result.CopyFrom(Self,hSize);
end;
Danke noch mal für die hilfe

1aa 20. Dez 2013 22:34

AW: Stream in Stream kopieren
 
oder auch nicht jetzt bekomme ich wenn ich den internen memoryStream mit Copyfrom in einen FileStream copieren will die Fehlermeldung : "Stream-Lesefehler"

Delphi-Quellcode:
procedure TForm1.DateiSave(aStream: TMemoryStream);
var hStream : TStream;
begin
  hStream := TFileStream.Create('Test2.txt',fmCreate);
  try
    hStream.CopyFrom(aStream,aStream.Size);{hier kommt der Fehler}
  finally
    hStream.Free;
  end;
end;
Weis einer woran das liegen könnte?

himitsu 21. Dez 2013 01:50

AW: Stream in Stream kopieren
 
Zitat:

Zitat von 1aa (Beitrag 1240632)
Delphi-Quellcode:
hStream.CopyFrom(aStream,aStream.Size);{hier kommt der Fehler}

Was ist aStream?
Ist das "OK"?
Wie groß ist aStream? (Size)
Wo der steht der Zeiger im aStream? (Position)

1aa 21. Dez 2013 02:12

AW: Stream in Stream kopieren
 
Noch mal danke....
die zeiger position wars.....

für die die es interessiert :
Delphi-Quellcode:
function tTestStream.ReadStream: TMemoryStream;
var hSize : Int64;
begin
  Result := TMemoryStream.Create;
  Read(hSize,Sizeof(hSize));
  Result.CopyFrom(Self,hSize);
end;

...

aStream := hStream.ReadStream;

...
procedure TForm1.DateiSave(aStream: TMemoryStream);
var hStream : TStream;
begin
  hStream := TFileStream.Create('Test2.exe',fmCreate);
  try
    aStream.Position := 0;
    hStream.CopyFrom(aStream,aStream.Size);
  finally
    hStream.Free;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:04 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