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