Einzelnen Beitrag anzeigen

Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Crosspost: Compressed Data in Datei auslesen

  Alt 23. Apr 2008, 07:30
Ich habe ein Tool für Gothic 3 entwickelt (damals in Eile zusammengehackt):
http://www.bendlins.de/nico/gothic3/ die g3pak-0.0.0.9_src.7z

Der interessante Quellcodeauszug ist:
Delphi-Quellcode:
SrcStrm := TFileStream.Create({SrcFileName}, fmOpenRead or fmShareDenyWrite);
try
  SrcStrm.Seek({SrcOffset}, soFromBeginning);
  DstStrm := TFileStream.Create({DstFileName}, fmCreate or fmShareDenyWrite);
  try
    if {SrcSize} <= 0 then
      Exit;
    if {SrcIsCompressed} then
    begin
      ZipStrm := TZDecompressionStream.Create(SrcStrm);
      try
        SrcStrm.Seek({SrcOffset}, soFromBeginning);
        DstStrm.CopyFrom(ZipStrm, {SrcSize})
      finally
        ZipStrm.Free();
      end;
    end
    else
      DstStrm.CopyFrom(SrcStrm, {SrcSize});
  finally
    DstStrm.Free();
  end;
finally
  SrcStrm.Free();
end;
ps: Man kann für DstStrm natürlich andere Streams verwenden (TMemoryStream, wenn man genug Speicher hat).

Die 'variablen Strukturen' sind nicht ungewöhnlich. Das hängt damit zusammen, dass die Daten sequenziell gelesen/geschrieben werden. Beispiel für eine einfache Persistenz: (string)[size, [data[size]], (integer)[data], ...
  Mit Zitat antworten Zitat