Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Streamproblem mehrere dateien (https://www.delphipraxis.net/138690-streamproblem-mehrere-dateien.html)

ghost007 15. Aug 2009 00:57


Streamproblem mehrere dateien
 
Hi,
ich wollte mit folgendem code 2 dateien zusamenfügen und vorher noch den string '13' in die datei schreiben.

Delphi-Quellcode:
procedure TForm1.Test;
  var
    str,str2: TMemoryStream;
    fs: TFileStream;
    bla: TStringStream;
begin
  fs:=TFileStream.Create('U:\blubber.big',fmCreate);
  bla:=TStringStream.Create;
  bla.WriteString('13');
  str:=TMemoryStream.Create;
  str.LoadFromFile('C:\test.png');
  str2:=TMemoryStream.Create;
  str2.LoadFromFile('C:\test2.png');
  fs.CopyFrom(bla,bla.Size);
  fs.CopyFrom(str,str.Size); //hier
  fs.CopyFrom(str2,str2.Size);
  str.Free;
  str2.Free;
  bla.Free;
  fs.Free;
end;
Jedoch bekomm ich in der makierten zeile.
Die Meldung EReadError mit der Meldung 'Stream-Lesefehler'.

Die Muhkuh 15. Aug 2009 01:00

Re: Streamproblem mehrere dateien
 
Hi,

Du musst nach LoadFromFile die Position per .Position wieder auf 0 stellen.

ghost007 15. Aug 2009 01:03

Re: Streamproblem mehrere dateien
 
Quasi so?
Delphi-Quellcode:
procedure TForm1.Test;
  var
    str,str2: TMemoryStream;
    fs: TFileStream;
    bla: TStringStream;
begin
  fs:=TFileStream.Create('U:\blubber.big',fmCreate);
  bla:=TStringStream.Create;
  bla.WriteString('13');
  str:=TMemoryStream.Create;
  str.LoadFromFile('C:\test.png');
  str.Position:=0;
  str2:=TMemoryStream.Create;
  str2.LoadFromFile('C:\test2.png');
  str2.Position:=0;
  fs.CopyFrom(bla,bla.Size); //hier
  fs.CopyFrom(str,str.Size);
  fs.CopyFrom(str2,str2.Size);
  str.Free;
  str2.Free;
  bla.Free;
  fs.Free;
end;
Wenn du das so gemeint hast, dann funzt das immer noch nicht :D

//Edit: Wenn ich die markierte stelle auskommentiere gehts ohne fehler ...

Luckie 15. Aug 2009 01:10

Re: Streamproblem mehrere dateien
 
Wo steht der Dateizeiger nach CopyFrom?

ghost007 15. Aug 2009 01:16

Re: Streamproblem mehrere dateien
 
okay, der fehler schein in dieser zeile zu liegen.
Delphi-Quellcode:
fs.CopyFrom(bla,bla.Size);
Davor steht fs.position auf 0 und dannach/währendessen fliegt die AV

alzaimar 15. Aug 2009 06:19

Re: Streamproblem mehrere dateien
 
bla.Position muss wieder auf 0 stehen, denn die CopyFrom-Methode kopiert ab der aktuellen Position, außer, wenn bei Size (dem 2.Parameter) 0 angegeben wird.

ghost007 15. Aug 2009 21:23

Re: Streamproblem mehrere dateien
 
Zitat:

Zitat von alzaimar
bla.Position muss wieder auf 0 stehen, denn die CopyFrom-Methode kopiert ab der aktuellen Position, außer, wenn bei Size (dem 2.Parameter) 0 angegeben wird.

geht :thumb:


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