AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Stream in Stream kopieren

Ein Thema von 1aa · begonnen am 20. Dez 2013 · letzter Beitrag vom 21. Dez 2013
Antwort Antwort
1aa

Registriert seit: 28. Sep 2008
48 Beiträge
 
Delphi XE5 Enterprise
 
#1

Stream in Stream kopieren

  Alt 20. Dez 2013, 01:42
Delphi-Version: XE5
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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Stream in Stream kopieren

  Alt 20. Dez 2013, 01:46
Ist der Result Stream auch initialisiert/gibt es da eine gültige Instanz?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Stream in Stream kopieren

  Alt 20. Dez 2013, 01:47
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
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
1aa

Registriert seit: 28. Sep 2008
48 Beiträge
 
Delphi XE5 Enterprise
 
#4

AW: Stream in Stream kopieren

  Alt 20. Dez 2013, 01:55
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...
  Mit Zitat antworten Zitat
1aa

Registriert seit: 28. Sep 2008
48 Beiträge
 
Delphi XE5 Enterprise
 
#5

AW: Stream in Stream kopieren

  Alt 20. Dez 2013, 23:02
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

Geändert von 1aa (20. Dez 2013 um 23:31 Uhr)
  Mit Zitat antworten Zitat
1aa

Registriert seit: 28. Sep 2008
48 Beiträge
 
Delphi XE5 Enterprise
 
#6

AW: Stream in Stream kopieren

  Alt 20. Dez 2013, 23:34
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Stream in Stream kopieren

  Alt 21. Dez 2013, 02:50
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
1aa

Registriert seit: 28. Sep 2008
48 Beiträge
 
Delphi XE5 Enterprise
 
#8

AW: Stream in Stream kopieren

  Alt 21. Dez 2013, 03:12
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;
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15: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