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