Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Einen TMemoryStream in einen TFileStream kopieren, aber wie? (https://www.delphipraxis.net/2965-einen-tmemorystream-einen-tfilestream-kopieren-aber-wie.html)

phlux 16. Feb 2003 12:01


Einen TMemoryStream in einen TFileStream kopieren, aber wie?
 
Hi!
Also ich habe eine Function geschrieben die mehrere Dateien in eine Datei packt, problem jedoch diese werden zuerst in einen TMemoryStream geschrieben um nacher noch durch Kompression oä. durchgejagt werden zu können. Wenn ich jetzt finaler weise das ganze wieder in einen TFileStream schreiben möchte um das ganze zu speichern, krieg ich ne AccessViolation :? Kann mir jemand sagen wo mein Fehler liegt???

Delphi-Quellcode:
function GenerateContainer(inpFiles: TStrings; CompressionType: TXipCompressionType; outFileName: String): Boolean;
var
  i: Integer;
  XipHeader: TXipHeader;
  Stream: TFileStream;
  Ct1, Ct2: TMemoryStream;
  XipFile: TFileStream;

begin
  Ct1 := TMemoryStream.Create;
  Ct1.Position := 0;
  for i := 0 to inpFiles.Count - 1 do
  begin
    Stream := TFileStream.Create(inpFiles[i], fmOpenRead or fmShareExclusive);
    try
      Ct1.CopyFrom(Stream, 0);
    finally
      Stream.Free;
    end;
  end;
  XipFile.Create(outFileName, fmCreate or fmShareExclusive);
  try
    XipFile.WriteBuffer(Ct1, SizeOf(Ct1));
  finally
    XipFile.Free;
  end;
  Ct1.Free;
end;

jbg 16. Feb 2003 12:24

Wenn du mit 2 TFileStream Instanzen arbeitest, dann musst du auch beide mit TFileStream.Create(...) erzeugen und nicht nur die erste.

Delphi-Quellcode:
XipFile := TFileStream.Create(outFileName, fmCreate or fmShareExclusive);

phlux 16. Feb 2003 12:33

Soweit ich das Überblicken kann, erstelle ich von beiden deklarierten TFileStreams Instanzen :?:

sakura 16. Feb 2003 12:39

Ersetze mal diese Zeile
Delphi-Quellcode:
XipFile.WriteBuffer(Ct1, SizeOf(Ct1));
durch
Delphi-Quellcode:
XipFile.CopyFrom(Ct1, 0);
...:cat:...

phlux 16. Feb 2003 13:28

Liste der Anhänge anzeigen (Anzahl: 1)
Hmm.. ich kriege schon beim Erzeugen der Instanz XipFile eine Exception :x
Ich häng mal die Source an!

sakura 16. Feb 2003 14:03

Stimmt, hatte ich vorher nicht beachtet :oops: aus
Delphi-Quellcode:
XipFile.Create(outFileName, fmCreate or fmShareExclusive);
wird
Delphi-Quellcode:
XipFile := TFileStream.Create(outFileName, fmCreate or fmShareExclusive);
...:cat:...

phlux 16. Feb 2003 14:08

:shock: Nein, bin ich blöd, das mir das nicht selbst aufgefallen ist!!!! :x :x :x
@jbg: Jetz weiß ich was du meinstest!! Sry, hab den wald vor lauter bäumen net gesehn :oops:


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