Einzelnen Beitrag anzeigen

Benutzerbild von smallsmoker
smallsmoker

Registriert seit: 12. Nov 2007
Ort: Duisburg
283 Beiträge
 
#1

LZMA SDK - String in Stream packen

  Alt 8. Dez 2008, 20:17
hi leute,
ich habe mich heute durch den pascal port der lzma sdk durchgewurschtelt und es hinbekommen mir 2 dienste zu basteln die einen Stream komprimieren.
Das habe ich dann erfolgreich für dateikomprimierung benutzt jetzt wollte ich aber einen string komprimieren:

die datei komprimierung sieht in etwa so aus:

Delphi-Quellcode:

procedure TLZMAAlone.CompressStream(var InStream: TStream; var OutStream: TStream);
[..]

procedure TLZMAAlone.DecompressStream(var InStream: TStream; var OutStream: TStream);
[..]

procedure TLZMAAlone.CompressFile(FilepathIn, FilepathOut: String);
var
  inStream: TStream;
  outStream: TStream;
begin
  inStream:=TBufferedFS.Create(FilepathIn,fmOpenRead or fmsharedenynone);
  outStream:=TBufferedFS.Create(FilepathOut,fmcreate);
  try
    CompressStream( inStream, outStream);
  finally
    outStream.Free;
    inStream.Free;
  end;
end;

procedure TLZMAAlone.DecompressFile(FilepathIn, FilepathOut: String);
var
  inStream:TStream;
  outStream:TStream;
begin
  inStream:=TBufferedFS.Create(FilepathIn,fmOpenRead or fmsharedenynone);
  outStream:=TBufferedFS.Create(FilepathOut,fmcreate);
  try
    DecompressStream(inStream,outStream);
  finally
    outStream.Free;
    inStream.Free;
  end;
end;
TBufferedFS könnte auch ein TFileStream sein.

Nun wollte ich einen string in einen tmemorystream packen den dann komprimieren (bzw den inhalt) und einen komprimierten string zurückerhalten.

leider klappt das alles nich so

um den string in den stream und wieder rauszubekommen habe diese funktionen bennutzt

mfg smallsmoker

edit:

ich habe es bislang so versucht:

Delphi-Quellcode:
function TLZMAAlone.CompressString(str: String): String;
var
  inStream: TStream;
  outStream: TStream;
begin
  inStream := TMemoryStream.Create;
  outStream := TMemoryStream.Create;
  try
    SaveStrToStream(inStream, str);
    CompressStream( inStream, outStream);
    LoadStrFromStream(outStream, result);
  finally
    outStream.Free;
    inStream.Free;
  end;
end;

function TLZMAAlone.DecompressString(str: String): String;
var
  inStream: TStream;
  outStream: TStream;
begin
  inStream := TMemoryStream.Create;
  outStream := TMemoryStream.Create;
  try
    SaveStrToStream(inStream, pchar(str));
    DecompressStream( inStream, outStream);
    LoadStrFromStream(outStream, result);
  finally
    outStream.Free;
    inStream.Free;
  end;
end;
da gibt es leider einen ereaderror beim aufrufen von LoadStrFromStream
  Mit Zitat antworten Zitat